问题
你欣赏DI容器的能力,但希望覆盖一些配置,或者只希望将更多的设置从XML格式转移到Java中,可以更好的从重构和类型安全性中获益。
解决方案
可以使用Java Config。JavaConfig就是使用注释来描述Bean配置的组件,是Spring的一个子项目,目前已加入核心框架之中。
/**
* 用javaConfig简化XML配置
* Created by leon on 2017/4/25.
*/
@Configuration
public class PersonConfig {
@Bean
public person leon(){
person leon = new person();
leon.setName("Leon");
return leon;
}
}
这等价于如下xml
<bean id="leon" class="com.zy.IOC.person" p:name="Leon"/>
这样的改进是什么呢?不可否认是易读性的增加。同样可以为其指定生命周期方法:
第一种:
@Bean(initMethod = "method1",destroyMethod = "method2")
@Lazy
public person leon(){
person leon = new person();
leon.setName("Leon");
return leon;
}
XML中定义的Bean全部配置选项都可以通过java config定义的Bean。
@Lazy、@Primary、@DependsOn
注解的工作方式与XML等价的。@Lazy 将Bean的构造推迟到必须满足依赖或者应用上下文显示访问.@DependsOn指定一个Bean的创建必须在其他Bean创建之后,它的存在对于Bean的正确构建至关重要。@Primary指定相同接口的多个Bean。自然,如果你从容器按照名字访问Bean,这个注解就没有什么意义了。