Spring目前是目前最最最火的Java框架,而且在这基础上发展的SpringBoot,SpringCloud也都有很多人用,我们已经习惯了使用注解的方式开发,所以也可以了解Spring注解驱动发展的过程。
此时Java5刚刚发布,正在流行Annotation风格,Spring1.2提供了@Transactional和@ManagedResource,但是此时装载Bean还是通过XML配置的方式
<bean name="DemoSerivce"
class="com.tiger.example.spring.v1.DemoService01"/>
<context:component-scan
base-package="com.tiger.example.spring.v2">context:component-scan>
@Configuration
public class SpringConfiguration {
@Bean
public DemoService03 getDeDemoService03(){
return new DemoService03();
}
}
@Configuration
@Import(ImportConfiguration.class) //扫描ImportConfiguration配置类并且加载
public class SpringConfiguration {
@Bean
public DemoService03 getDeDemoService03(){
return new DemoService03();
}
}
@Configuration
public class ImportConfiguration {
@Bean
public ImportService getImportService(){
return new ImportService();
}
}
@Configuration
@EnableScheduling
public class ScheduleConfiguration {
@Bean
public ScheduleService getScheduleService(){
return new ScheduleService();
}
}
Spring4.x提供了@Conditional注解,用来可以自定义条件完成Bean的初始化
@Configuration
public class SpringConfiguration {
//条件注解 如果TigerCondition返回true初始化,否则不初始化
@Conditional(TigerCondition.class)
@Bean
public DemoService getDemoService(){
return new DemoService();
}
}
public class TigerCondition implements Condition {
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
// TODO 这里可以实现很多业务逻辑处理
//返回false时 bean不实例化
//return false;
//返回true时 bean实例化
return true;
}
}
@Indexed是为了提升在ComponentScan扫描的性能 细节可以参考这里
Spring5–@Indexed注解
如果Class A和ClassB为循环依赖
Spring2.x注解驱动的发展重要时期,提供了很多实用的注解,再到后面完全去XML配置以及提升性能,使Spring更受欢迎!
代码位置: tiger-spring-demo