@component与@Configuration创建bean
-
@configuration配置
针对@configuration,首先@Configuration与@Bean搭配使用,一般在项目中定义配置累才会使用这个注解
@Configuration
代表这个类是一个配置类,可理解为用spring的时候xml里面的
@Bean
用来定义一个bean,可以指定初始、销毁方法,及bean范围等,可理解为用spring的时候xml里面的
-
bean的管理方式
Spring帮助我们管理Bean分为两个部分,一个是注册Bean,一个装配Bean
。 完成这两个动作有三种方式,
一、是使用自动配置的方式、
二、是使用JavaConfig的方式,
三、是使用XML配置的方式。
-
自动配置
针对于@Component注解:使用@Component去告诉Spring,我是一个bean,你要来管理我,然后使用@AutoWired注解去装配Bean(所谓装配,就是管理对象直接的协作关系)(参考来自Spring之@Configuration、@Component、@Bean - 云+社区 - 腾讯云 (tencent.com))。
@Configuration @ConfigurationProperties("remote") @Data public class RemoteProperties { /** * 调用ip */ private String host; /** * 调用本地ip */ private String ip; }
-
JavaConfig配置
@Configuration其实就是告诉spring,spring容器要怎么配置(怎么去注册bean,怎么去处理bean之间的关系(装配))。@Bean的意思就是,我要获取这个bean的时候,你spring要按照这种方式去帮我获取到这个bean。
@Configuration public class BeanConfig { @Bean public ThreadPoolTaskScheduler threadPoolTaskScheduler() { ThreadPoolTaskScheduler executor = new ThreadPoolTaskScheduler(); // 线程池数量 executor.setPoolSize(Runtime.getRuntime().availableProcessors()); //设置好了之后可以方便我们定位处理任务所在的线程池 executor.setThreadNamePrefix("charge-task-Executor-"); //用来设置线程池关闭的时候等待所有任务都完成再继续销毁其他的Bean executor.setWaitForTasksToCompleteOnShutdown(true); //该方法用来设置线程池中任务的等待时间,如果超过这个时候还没有销毁就强制销毁,以确保应用最后能够被关闭,而不是阻塞住 executor.setAwaitTerminationSeconds(60); return executor; } }
-
xml的方式
用@Bean注解的方法:会实例化、配置并初始化一个新的对象,这个对象会由spring IoC 容器管理。
-
针对@Component与@Configuration同时对同一对象生成bean
@Configuration
加 @Bean
会创建一个 userName 不为 null 的 UserManager 对象,
而 @Component
也会创建一个 userName 为 null 的 UserManager 对象
那么我们在其他对象中注入 UserManager 对象时,到底注入的是哪个对象?