文章目录
装配 bean
1. 自动化装配
@Component
告知Spring为被注解的类创建bean
> 为bean命名:
> + Spring为Bean默认命名为类名首字母小写
> + @Component(“XXX”)
> + @Named(“XXX”)
@ComponentScan
组件扫描默认不可用,需用此注解显式配置
设置组件扫描基础包:
- 默认以配置类(带@Configuration)所在的包为基础包
@ComponentScan({"XXX", "XXX2"})/@ComponentScan(basePackages = {"XXX", "XXX2"})
指定基础包,使用String作为value值,类型不安全@ComponentScan(basePackageClasses = {XXX.class, XXX2.class})
使用类来作为value值,这些类所在的包
将作为基础包;注:
也可以在包中创建仅用于扫描的空标记接口
,使用其作为value值;
@Autowire
自动装配,将已创建的bean自动注入到当前类中,可用于:
- 构造器
@Autowired
public CDPlayer(CopactDisc cd){
this.cd = cd;
}
> + 属性的Setter方法
@Autowired
public void setCompactDisc(CopactDisc cd){
this.cd = cd;
}
> + 类的任何方法上
@Autowired
public void insertDisc(CompactDisc cd){
this.cd = cd;
}
自动装配结果:
- 有且只有一个bean匹配依赖需求,将其装配进来
- 没有匹配的bean,创建应用上下文时,Spring抛出异常;若要避免,将@Autowired的
required
属性设置为false,此时,要装配的bean为null,需要代码进行null检查- 多个匹配的bean,Spring抛出异常
@Named 和 @Inject
@Inject注解来源于java依赖注入规范,大部分情况下可与@Autowired互换
2. 通过代码装配Bean
若想将第三方库中的组件装配到应用中,无法添加自动扫描和装配的注解,此时,需要采用显式装配的方式。
XML
javaConfig
更强大、类型安全、对重构友好
- 不应该包含任何业务逻辑
- 不应该侵入到任何业务逻辑代码中(不和其他类发生关联)
- 通常放到单独的包中
创建一个配置类
import org.springframework.context.annotation.Configuration
@Configuration//表明这个类是配置类
public class TestConfig {
}
@Bean
声明一个简单bean
此注解告诉Spring:
- 被其标记的方法返回的对象,要注册为Spring上下文中的bean;
方法体中包含最终产生bean实例的逻辑.
@Bean
public BeanObject createBean(){
return new BeanObject();
}
- Bean的id默认和被注解的方法名一样,支持重命名,使用Bean注解的
name
属性
Bean注入
- 方式1: 引用创建Bean的方法
eg:
若要在BeanObject2中注入BeanObject1,如下
@Bean
public BeanObject2 inject(){
return new BeanObject2(createBean());
}
@Bean
public BeanObject2 inject2(){
return new BeanObject2(createBean());
}
Spring会拦截所有对createBean()方法的调用,并确保直接返回该方法所创建的bean;
Spring默认是单例的,上述代码中,两个BeanObject2的bean中注入的是同一个BeanObject1的bean
- 方式2: 请求一个实现类bean的接口类型作为参数
/**假设BeanObject是接口BeanObject1Interface的实现类
**/
@Bean
public BeanObject2 inject(BeanObject1Interface object1){
return new BeanObject2(object1);
}
这是引用其他bean的最佳选择,不要求将BeanObject1Interface声明到同一个配置类中,甚至没要求其必须在javaConfig中声明,可以通过组件扫描或xml进行配置。不管接口是采用什么方式创建出来的,Spring都会将其传入到配置方法中,用来创建BeanObject2 bean。
另外,除了构造器,我们还可以使用任何java功能来产生bean实例,比如setter方法等。
3. XML装配
Spring Tool Suite: https://spring.io/tools
此工具有Eclipse、Visual Studio Code、Atom支持,可帮助我们编写xml配置文件
- 对强依赖使用构造器注入;对选择性的依赖使用属性注入。