Spring注解版之自动装配

自动装配:Spring利用依赖注入(DI),完成对IOC容器中各个组件的依赖关系赋值

1、@AutoWired:自动注入【Spring定义的】
1、 默认按照类型去容器中找对应的组件 applicationContext.getBean(BookService.class),找到就赋值

2、如果找到相同类型的组件,再将属性的名称作为组件的id去容器中查找applicationContext.getBean(“bookDao”)
@AutoWired
private BookDao bookDao2; 此时装配的属性名称是bookDao2

3、@Qualifier(“bookDao”):使用该注解来指定需要装配的组件的id,而不是使用属性名

4、自动装配默认一定要将属性赋值好,没有就会报错,可通过在Autowire的注解中将required=false来使该配置设置为非必须

5、@Primary:让Spring进行自动装配的时候,默认使用首选的bean,也可以继续使用@Qualifier来指定需要装配的bean
BookService{
@Autowired
BookDao bookDao;
}

2、Spring还支持使用@Resource( JSR250) 和 @Inject (JSR330)
1、@Resource:
可以和@Autowired一样实现自动装配功能;默认是按照组件名称进行装配的;通过@Resource(name=“bookDao2”)指定bean
没有能支持@Primary的功能以及@Autowired(required=false)的功能

2、@Inject(需要导入依赖):
导入javax.inject的包,和Autowired的功能一样,没有required=false的功能
AutowiredAnnotationBeanPostProcessor: 解析完成自动装配功能

3、@Autowired:构造器,参数,方法,属性
1)标注在方法位置 标注在方法,Spring容器创建当前对象,就会调用方法,完成赋值,方法使用的参数,自定义类型的值从ioc容器中获取,@Bean标注的方法创建对象的时 候,方法参数的值默认从ioc容器中获取,默认不写Autowired,效果是一样的

@Bean
public Color color(Car car){
    Color color = new Color();
    color.setCar(car);
	return color;
}

2)标注在构造器位置 默认加在ioc容器中的组件,容器启动会调用无参构造器创建对象,再进行初始化赋值等操作。标注在构造器上可以默认调用该方法,方法中用的参数同样从ioc容器中获取,如果容器只有一个有参构造器,这个有参构造器的Autowired可以省略,参数位置的组件还是可以自动从容器中获取

3)标注在参数位置 从ioc容器中获取参数组件的值

4、自定义组件想要使用Spring容器底层的一些组件比如ApplicationContext,BeanFactory等
自定义组件需要实现xxxAware接口;在创建对象的时候会调用接口规定的方法注入相关组件;
把Spring底层的一些组件注入到自定义的bean
xxxAware的功能都是使用xxxAwareProcessor处理的

Profile:
Spring为我们提供的可以根据当前环境,动态的激活和切换一系列组件的功能;
开发环境、测试环境、生产环境
数据源(/A)(/B)(/C)
@Profile:指定组件在哪个环境的情况下才能被注册到容器中,不指定,任何环境下都能注册
1、加了环境标识的bean,只有这个环境被激活的时候才能注册到容器中,默认是default环境
2、写在配置类上,只有是指定的环境的时候,整个配置类里面的所有配置才能生效
3、没有标注环境标识的bean在任何环境下都加载
运行时如何指定运行环境:
1、命令行参数,通过在虚拟机参数位置指定-Dspring.profiles.active=xxx来指定运行环境,标注了该环境的bean会被配置进容器中
2、程序内指定:

//1、创建一个applicationContext
AnnotationConfigApplicationContext applicationContext =	new AnnotationConfigApplicationContext();
// 2、设置需要激活的环境
applicationContext.getEnvironment().setActiveProfiles("dev");
//3、注册主配置类
applicationContext.register(MainConfigOfProfile.class);
//4、启动刷新容器
applicationContext.refresh();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值