1--@Autowired

@AutowiredSpring里面提供的一个注解,它默认是根据类型来实现Bean的依赖注入;

@Autowired里面有一个required属性,默认值是true 表示强制要求bean实例的一个注入,在应用启动的时候,如果IOC容器中不存在对应类型的bean,那么启动就会报错;如果我们不希望实现依赖注入就可以把这个属性设置为false

其次如果Spring IOC容器中存在多个相同类型的bean实例,但是由于@Autowired是根据类型去进行注入的,所以Spring启动的时候就会提示一个错误,就是原本只能注入一个单实例Bean,但是现在Ioc容器存在多个,导致注入失败;针对这个问题,可以使用@Primary @Qualifier这两个注解来解决;

@Primary表示主要的Bean,当存在多个相同类型的Bean的时候,会优先使用声明了@Primary注解的一个Bean

@Qualifier 相当于条件筛选,可以根据Bean的名字可以去找到需要装配的目标Bean

2--@Resource

@Resource是JDK中提供的一个注解,只不过Spring在实现上提供了这个注解的一个功能支持,它的使用方式和@Autowired类似,

最大的区别就是@Resource可以支持ByName 和 ByType两种注入方式;

  • 如果使用name属性,spring会根据bean的名字来进行依赖注入;
  • 如果使用type属性,spring会根据bean的类型来进行依赖注入,如果两个属性都没有进行设置,@Resource默认是根据定义的属性名字去容器中进行匹配,如果没有匹配成功,再根据类型来匹配;
  • 如果两个都没有匹配到就会报错

3--注入方式

@Autowired 支持构造方法注入,属性注入,Setter方法注入

@Resource 只支持属性注入,Setter方法注入 不支持构造方法注入

posted on 2024-09-11 14:43  申辉  阅读(2)  评论(0编辑  收藏  举报