一直再用Spring,但是仅限于使用,也没有系统学习过,最近抽空开始系统学些一下,以spring in action作为参考,以下内容大部分摘自spring in action,仅限于自己学习。
1.装配
创建对象之间的协作关系称为装配,这是依赖注入的本质
Spring容器负责创建bean,并通过DI来协调对象之间的关系。
Spring有三种装配机制:
1)XML中进行显式配置
2)在Java中进行配置
3)隐式的bean发现机制和自动装配
2.Spring自动装配bean
1)自动扫描:自动发现应用上下文中创建的bean
2)自动创配:Spring自动满足bean之间的依赖
自动化装配bean:
@Component("name"):表明该类会作为组件类,name表示组件bean的名字,@Component可以用Java依赖注入规范中的@Name("name")替换
@ComponentScan(basePackageClasses={xxxx1.class}):Spring中启用组件扫描(默认扫描与配置相同的包),对应于XML中<context:component-scan>元素,其中basePackageClasses可用basePackages="com.xx.aaa"(包名)替代
由于过程中用到了Junit模拟Spring环境,加载Spring容器,顺带两个注解:
@RunWith(SpringJunit4ClassRunner.class):便于在测试开始的时候自动创建Spring的应用上下文(模拟Spring环境)
@ContextConfiguration(classes=xxxx.class):表明需要在xxx中加载配置(配置文件(Java或者XML文件))
实现自动装配:
@AutoWired:可以用在任何方法上(以下是三种方式)
@AutoWired
private CDPlayer cd;
@AutoWired
public CDPlayer(CompactDisc cd){
this.cd = cd;
}
//注入Name对象
@AutoWired
public void setName(Name name){
this.name = name;
}
@Inject可以替代@Autowired
3.Java代码装配Bean
当我们装配的组件来自第三方时,无法用注解装配,此时需要显式配置,推荐使用JavaConfig(不是XML),因为其更强大、安全、对重构友好
@Configuration:表明这个类是一个配置类
@Bean(name=”xxx”):对应的方法会返回一个bean对象,默认与带有该注解的方法名一致
在JavaConfig中装配bean的方式:引用创建bean的方法
@Bean
public CDPlayer cdPlayer(){
return new CDPlayer(compactDisc());
}
//使CompactDisc作为方法参数(推荐,不必须在同一个配置类中)
@Bean
public CDPlayer cdPlayer(CompactDisc cd){
return new CDPlayer(cd);
}
JavaConfig可以使用任何必要的Java功能产生bean实例。
以上仅是个人总结自Spring in Action。