Spring:依赖注入(IOC)之注解注入

注解注入顾名思义就是通过注解来实现注入,Spring和注入相关的常见注解有Autowired、Resource、Qualifier、Service、Controller、Repository、Component等。

  • Resource用来指定名称注入。
  • Autowired是自动注入,自动从spring的上下文找到合适的bean来注入。
  • Qualifier和Autowired配合使用,指定bean的名称。
  • Service,Controller,Repository分别标记类是Service层类,Controller层类,数据存储层的类,spring扫描注解配置时,会标记这些类要生成bean。
  • Component是一种泛指,标记类是组件,spring扫描注解配置时,会标记这些类要生成bean。

上面的Autowired和Resource是用来修饰字段,构造函数,或者设置方法,并做注入的。而Service,Controller,Repository,Component则是用来修饰类,标记这些类要生成bean。

一、@Resource

默认是按照名称来装配注入的,只有当找不到与名称匹配的bean才会按照类型来注入。它有两个属性是比较重要的:

  • name: Spring 将 name 的属性值解析为 bean 的名称, 使用 byName 的自动注入策略
  • type: Spring 将 type的属性值解析为 bean 的类型,使用 byType 的自动注入策略

@Resource 的装配顺序:

  • 如果仅指定了 name 属性值,则从容器中查找名称匹配的 bean 进行装配,找不到则抛出异常。
  • 如果仅指定了 type 属性值,则从容器中查找类型匹配的唯一的 bean 进行装配,找不到或者找到多个都会抛出异常。
  • 如果同时指定了 name 属性和 type 属性,那么 Spring 将从容器中找唯一匹配的 bean 进行装配,找不到则抛出异常。
  • 如果既不指定 name 属性又不指定 type 属性,Spring这时通过反射机制使用 byName 自动注入策略。 如果没有匹配,则回退一个原始类型进行匹配,如果匹配则自动装配。

二、@Autowried

默认是按照类型进行装配注入,默认情况下,它要求依赖对象必须存在,如果允许 null 值,可以设置它 required 为false。

如果我们想要按名称进行装配的话,可以添加一个 @Qualifier 注解解决。

@Autowried
@Qualifier("adminDAO")
private AdminDAO adminDAO;

@Resource 注解是J2EE提供的,它的包是javax.annotation.Resource, 而 @Autowried 是 Spring 提供的,它的包是org.springframework.beans.factory.annotation.Autowired如果想减少对 Spring 的依赖建议使用 @Resource 方法。

@Resource 和 @Autowried 都可以加在字段的 setter 方法上。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王小二(海阔天空)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值