@component与@Configuration创建bean

  • @configuration配置

针对@configuration,首先@Configuration与@Bean搭配使用,一般在项目中定义配置累才会使用这个注解

@Configuration

代表这个类是一个配置类,可理解为用spring的时候xml里面的<beans>标签

@Bean

用来定义一个bean,可以指定初始、销毁方法,及bean范围等,可理解为用spring的时候xml里面的<bean>标签

  • 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怎么获取这个bean,各种<ref>就是手动的配置bean之间的关系。

用@Bean注解的方法:会实例化、配置并初始化一个新的对象,这个对象会由spring IoC 容器管理。

  • 针对@Component与@Configuration同时对同一对象生成bean

@Configuration 加 @Bean 会创建一个 userName 不为 null 的 UserManager 对象,

而 @Component 也会创建一个 userName 为 null 的 UserManager 对象

那么我们在其他对象中注入 UserManager 对象时,到底注入的是哪个对象?

 

posted @ 2022-03-10 15:45  清华大咖  阅读(260)  评论(0编辑  收藏  举报