在将Spring框架应用于项目开发中时,繁多的xml配置文件会使项目的维护升级变得困难,特别是项目很大时,有时候会花掉大量的时间去定位相应的组件配置。为了解决这个问题,引入Spring框架中的强大注解变得很重要,同时,注解的学习更是为后期学习Spring Boot做好了铺垫。
@Configuration
@Configuration注解用于定义配置类,并用于构建bean定义,初始化Spring容器,被标注的类类似于Spring的xml配置文件中的
@Bean
给容器注册一个Bean;类型为方法返回值类型,id不指定时默认使用方法名作为id。
@ComponentScan
配置自动扫描相应的包。会自动扫描包路径下面的所有@Controller、@Service、@Repository、@Component 的类。包含的属性如下:
- value:指定扫描的包路径。接收String数组。
- @Filter:声明扫描包的过滤规则,可以按注解、类型、正则表达式等进行过滤。
@ComponentScans
如果是JDK8以上可以声明多个@ComponentScan进行配置,也可以在@ComponentScans中配置多个@ComponentScan。
1 | //配置类==配置文件 |
@Scope
控制Bean的作用范围。
@Lazy
懒加载。
1 | /**默认是单实例的 |
@Conditional(条件注解)
标注在方法上时,按照一定的条件进行动态转配,满足条件才给容器中注册Bean。标注在配置类上时,满足当前条件,这个类配置中的所有Bean才能生效。其中这个条件类必须实现Condition接口。
1 | /** |
1 | //判断对象是否是linux |
1 | //判断系统是否是windows |
@Import
快速给容器中注册组件。id默认是全类名。
1 | class})//@Import导入组件,id默认是组件的全类名 ({Color. |
- ImportSelector:如果某个类实现了ImportSelector接口,通过重写接口中的方法selectImports,可以将需要注册的类的全类名返回给@Import注解,并实现批量注册。
1 | class})//@Import导入组件,id默认是组件的全类名 ({MyImportSelector. |
1 | //自定义逻辑返回需要导入的组件 |
- ImportBeanDefinitionRegistrar:手动注册Bean到容器中。
1 | class,MyImportBeanDefinitionRegistrar.class})//@Import导入组件,id默认是组件的全类名 ({MyImportSelector. |
1 | public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar { |
使用FactoryBean注册组件
Spring提供了一个org.Springframework.bean.factory.FactoryBean的工厂类接口,用户可以通过实现该接口定制实例化bean的逻辑。
1 |
|
1 | //创建一个Spring定义的FactoryBean |
1 | @Test |