spring注解 @Primary,@Autowired,@Qualifier,@Resource,@Inject自动装配注解
spring的自动装配:Spring利用依赖注入(DI),完成对IOC容器中中各个组件的依赖关系赋值;
1.@Qualifier 配合@Autowired使用,自动装配指定名字的bean
2.@Primary 让Spring进行自动装配的时候,默认使用首选的bean;
3.@Autowired:自动注入
- 默认优先按照类型去容器中找对应的组件:applicationContext.getBean(Car.class);找到就赋值;
- 如果找到多个相同类型的组件,再将属性的名称作为组件的id去容器中查找applicationContext.getBean(“car”);
- 自动装配默认一定要将属性赋值好,没有就会报错,如果没有注入bean, 可以使用@Autowired(required=false);
- 装配l了同一个类型,多个bean的实例的时候,可以使用@Qualifier(“car”):使用@Qualifier指定需要装配的组件的id,而不是使用属性名
4.@Resource JSR250中的注解,java注解
- 可以实现跟@Autowired注解一样的功能
- 默认是按照组件名称进行装配的applicationContext.getBean(“car”)
- 对@Primary标注的bean,没有支持
- 必须注入bean,如果没有注入,会报错(没有@Autowired(reqiured=false)功能)
5.@Inject JSR330规范中的注解,java注解,使用的时候,需要引入对应的jar包
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
- 可以实现跟@Autowired注解一样的功能
- 默认是按照组件名称进行装配的applicationContext.getBean(“car”)
- 可以支持@Primary标注的bean
- 必须注入bean,如果没有注入,会报错(没有@Autowired(reqiured=false)功能)
其实可以看到,在使用过程中,spring的注解@Autowired在功能上,更加的强大,也是推荐使用的,使用java标准的注解,在使用其他的类似框架中,可以不用更改代码,不过,在类似框架中,应该没有框架,能够弄得过 spring了,下面主要说明spring的@Autowired注解的使用方式
创建两个bean,Car和Vehicle ,在Vehicle中有Car的实例
public class Car {
}
@Component
public class Vehicle {
private Car car;
//如果bean中,有且只有一个有参的构造方法,那么@Autowired可以省略,参数的内容可以从容器中获取
@Autowired
public Vehicle(Car car) {
this.car = car;
}
public Car getCar() {
return car;
}
public void setCar(Car car) {
this.car = car;
}
}
@Autowired:可以用在 构造器,参数,方法,属性上;都是从容器中获取参数组件的值,如果是单例对象,获取的bean都是同一个
标注在构造器上:如果bean中,有且只有一个有参的构造方法,那么@Autowired可以省略,参数的内容可以从容器中获取
标注在方法上:一般标注在set方法上;如果去@Bean注解标注的方法
放在参数位置:无论是构造器的参数,还是set方法的参数,都是可以的;
如果使用@Bean的形式注入bean,参数上的@Autowired可以忽略
测试:大家自己测试吧;
还没有评论,来说两句吧...