Spring入门笔记(五)@Autowired注解

参考慕课网spring入门篇
@Autowired对类成员变量、方法及构造函数进行标注,完成自动装配的工作。它是由BeanPostProcessor处理的,所以不能再自己的BeanPostProcessor或BeanFactoryPostProcessor类型应用这些注解,这些类型必须通过xml或者@Bean注解加载

一、注解setter方法
private AutoTest autoTest;

@Autowired
public void setAutoTest(AutoTest autotest) {
    this.autoTest = autoTest;
}
二、注解构造器或成员变量
public class Test {
    @Autowired
    private AutoTest autoTest;

    private SimpleTest simpleTest;

    @Autowired
    public Test(SimpleTest simpleTest) {
        this.simpleTest = simpleTest;
    }
}

注解成员变量与注解setter方法类似。
默认情况下,如果找不到合适的bean会导致autowiring识别抛出异常,可以通过 @Autowired(reuqired = false)避免,每个类只能有一个构造器被标记为required = true。@Autowired的必要属性,可以使用@Required注解。

三、注解其他的解析依赖性接口

比如: BeanFactory, ApplicationContext, Environment, ResourceLoader, ApplicationEventPublisher, and MessageSource

public class MovieRecommender {

    @Autowired
    private ApplicatoinContext context;
    // ...
}
四、注解数组和key为String的Map

注解给需要该类型的数组的字段或方法,以提供ApplicationContext中的所有特定类型的bean。
如果希望数组有序,可以让bean实现org.springframework.core.Ordered接口或使用@Order注解

@Component
public class BeanInvoker {

    @Autowired
    private List<BeanInterface> list;

    @Autowired
    private Map<String, BeanInterface> map;
五、@Autowired, @Qualifier和@Resource

如果一个接口有多个实现类,可以使用@Qualifier进行注解,如:

@Service
public class InjectionServiceImpl implements InjectionService {

//  @Autowired
//  @Qualifier("injectionDAOImpl1")
    private InjectionDAO injectionDAO;

//  @Autowired  
//  public InjectionServiceImpl(@Qualifier("injectionDAOImpl1") InjectionDAO injectionDAO) {
//      this.injectionDAO = injectionDAO;
//  }

    @Autowired
    public void setInjectionDAO(@Qualifier("injectionDAOImpl1") InjectionDAO injectionDAO) {
        this.injectionDAO = injectionDAO;
    }
  1. 对于按类型自动装配可能多个bean实例的情况,可以用@Qualifier缩小范围或指定唯一,也可以用于指定单独的构造器参数或方法参数,如上面代码。也可用于注解集合类型变量。
  2. 如果通过名字进行注解注入,主要使用的不是@Autowired + @Qualifier,而是使用@Resource注解。
  3. @Autowired适用于fields,constructor,multi-argument methods这些允许在参数级别使用@Qualifier缩小注解范围的情况;@Resource适用于成员变量、只有一个参数的setter方法情况
  4. 可以使用java文件和xml文件两种方式自定义@Qualifier
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值