@Component和@Configuration都属于Spring所提供的注解,两者可谓各司其职。
共同点@Component这个注解,从刚开始的SpringMVC到现在的SpringBoot,我们都一直有接触到,我们也知道它的功能,它帮我们实现了声明一个bean注入到IOC容器中。
另一个注解@Configuration,它们有个共同点,便是它也可以声明一个bean注入到IOC容器中。
特别点那这样的话,@Configuration的意义是什么呢?
在我看来,@Configuration这个注解,是最能诠释Spring的去配置文件这个工作的注解,因为这个注解有一个很大的作用,它可以代替xml文件,生成类似<beans>的结果。
也就是除了本身外,它可以在类中通过@Bean注解来注入多个Bean到IOC容器中。
如下:
@Configurationpublic class ExampleConfiguration {// 获取到application.properties里的com.mysql.jdbc.Driver配置项@Value("com.mysql.jdbc.Driver")private String driverClassName;@Value("jdbc://xxxx.xx.xxx/xx")private String driverUrl;@Value("${root}")private String driverUsername;@Value("123456")private String driverPassword;//通过@Configuration和@Bean注解,将注入一个名称为dataSource的Bean,这个Bean的主体,便是dataSource()这个方法的结果@Bean(name = "dataSource")public DataSource dataSource() {BasicDataSource dataSource = new BasicDataSource();dataSource.setDriverClassName(driverClassName);dataSource.setUrl(driverUrl);dataSource.setUsername(driverUsername);dataSource.setPassword(driverPassword);return dataSource;}// 还能再继续注入其他的Bean@Beanpublic PlatformTransactionManager transactionManager() {return new DataSourceTransactionManager(dataSource());}}之后在需要使用该Bean的地方,便可以使用
@Autowiredprivate DataSource dataSource;来注入,并使用。
注意点在使用@Configuration这个注解的时候,有几点是需要注意的,我们顺便提一下:
配置类必须以类的形式提供(不能是工厂方法返回的实例),允许通过生成子类在运行时增强(cglib 动态代理)。
配置类不能是 final 类(没法动态代理)。配置注解通常为了通过 @Bean 注解生成 Spring 容器管理的类,配置类必须是非本地的(即不能在方法中声明,不能是 private)。任何嵌套配置类都必须声明为static。@Bean 方法可能不会反过来创建进一步的配置类(也就是返回的 bean 如果带有 @Configuration,也不会被特殊处理,只会作为普通的 bean)。Copyright © 广州京杭网络科技有限公司 2005-2024 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有