spring框架的核心是spring容器,容器负责管理应用中的组件的生命周期,它会创建这些组件并且保证它们的依赖能够得到满足,这样的话,组件才能完成预定的任务。而在这里,最主要的也是最核心的就是依赖注入和AOP,这篇文章主要来自我阅读《spring实战》中关于Spring装配bean的总结与摘要,不足之处请指出!
Spring装配bean的基本方式
1.装配的定义:创建应用对象之间协作关系的行为通常称为装配,这也是依赖注入(DI)的本质。
2.Spring容器负责创建应用程序中的bean并通过DI来协调这些对象之间的关系, 而bean如何进行装配,Spring具有非常大的灵活性,它提供了三种主要的装配机制:
- 在XML中进行显示配置;
- 在Java中进行显示配置;
- 隐式的bean自动发现机制和自动装配。
1.自动化装配bean
1.Spring从两个角度来实现自动化装配bean:
组件扫描(component scanning):Spring会自动发现应用上下文中所创建的bean。
自动装配(autowiring):Spring自动满足bean之间的依赖。
2.java创建带有@Component的注解的bean类,使用@ComponentScan的注解启动组件扫描。(在这里,只是单独的创建一个普通的类并带有@ComponentScan的注解,这个注解默认情况下会扫描与配置类相同的包。)
bean类:
@Component
public class Sge{
}
注解扫描(这个是默认扫描与配置类相同的包):
@Configuration
@ComponentScan
public class CDConfig{
}
设置组件扫描的基础包(可以多个):
@Configuration
@ComponentScan(basePackages={"xxx","yyy"})
public class CDConfig{
}
@Configuration
@ComponentScan(basePackagClasses={"xxx.class","yyy.class"})
public class CDConfig{
}
或者也可以使用XML启用扫描组件:
<context:component-scan base-pacakage="xxx">
3.为bean添加注解实现自动装配:@Autowired可以用在类的任何方法上
//注解使用在构造器上
@Component
public class Sge{
private Compact sss;
@Autowired
public CDs(Compact sss){
this.sss = sss;
}
}
//注解使用在Setter方法上
@Component
public class Sge{
private Compact sss;
@Autowired
public void setCDs(Compact sss){
this.sss = sss;
}
}
2.Java代码装配bean
当在很多场景(将第三方库中的组件装配到你的应用中),无法在类上添加@Autowired等的注解,这时候需要使用Java显示装配才行。
1.创建配置类:创建JavaConfig类的关键在于为其添加@Configuration注解,@Configuration注解表明这个类是一个配置类,该类应该包含在Spring应用上下文中如何创建bean的细节。
@Configuration
public class CDConfig{
}
2.声明简单的bean:@Bean注解会告诉Spring这个方法将会返回一个对象,该对象要注册为Spring应用上下文中的bean。
@Bean
public CompactDisc sgtPeppers(){
return new SgtPeppers();
}
上面的bean(CompactDisc Bean)自身没有任何依赖。
@Bean
public CDPlayer cd(){
return new CDPlayer(sgtPeppers());
}
CDPlayer Bean依赖CompactDisc Bean,是通过调用sgtPeppers()方法返回CompactDisc实例的,除此之外,也可以通过构造器或者Setter等方法实现DI(依赖注入)功能。
3.XML代码装配bean
1.声明简单的bean,在XML中,声明bean只有以下一种通过标签的方式来声明。
<bean id="aa" class="xxx"/>
2.借助构造器注入初始化bean,在XML中声明DI时,有两种基本的配置方案可供选择:
①. <constructor-arg>元素
②使用Spring3.0所引入的c-命名空间