spring常用注解及源码解析(四)

自动注入相关

1、相关注解以及之间的差异

  1. @Autowired、@Qualifier、@Primary是Spring框架的
    @Resource、@Inject是java本身的

2)@Autowired

1)按照类型去容器中找,如果是ioc容器中有多个,再将属性的名称作为组件的id去容器中查找
2)@Autowired(required = false),作为非必须的装配
3)@Autowired:构造器、参数、方法、属性

@Component
public class Boss {
    @Override
    public String toString() {
        return "Boss{" +
                "car=" + car +
                '}';
    }
    //@Autowired标注在构造器上时,Spring创建容器时,就会调用方法,完成赋值
    //方法使用的参数,自定义类型的值从IOC容器中获取
    @Autowired
    public Boss(Car car) {
        this.car = car;
        System.out.println("有参构造器:"+car);
    }

    public Car getCar() {
        return car;
    }
    //@Autowired标注在方法上时,Spring创建容器时,就会调用方法,完成赋值
    //方法使用的参数,自定义类型的值从IOC容器中获取
   // @Autowired
    public void setCar(Car car) {
        this.car = car;
    }

    private Car car;

}

3)@Qualifier("bookDo2")
该注解可以指定一个具体的bean实例id

3)@Primary
首选装配的组件

@Configuration
@ComponentScan({"com.dwd.snail.testspring.test.bean","com.dwd.snail.testspring.test.service","com.dwd.snail.testspring.test.dao","com.dwd.snail.testspring.test.controller"})
public class MainConfig_Autowire {
    @Primary
    @Bean(value="bookDo2")
    public BookDo bookDo(){
        BookDo bookDo=new BookDo();

        bookDo.setLabel("2");
        return bookDo;

    }


}

4)@Resource
可以和@Autowired一样实现自动装配功能,但是默认按照组件名称作为组件进行装配,没有能支持@Autowired(required = false)

5)@Inject
需要导入javax.inject的包,和@Autowired的功能一样,但是没有required = false的属性

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容