• @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 对象时,到底注入的是哪个对象?

  • 相关阅读:
    com.mongodb.MongoException$CursorNotFound: cursor not found on server异常处理
    Oracle中暂时表空间的清理
    java——数组
    二分查找的感悟
    【转】Linux时间函数之gettimeofday()函数之使用方法
    【转】《APUE》第三章笔记(4)及习题3-2
    【转】APUE习题4.6---测试lseek作用
    【转】linux下a.out >outfile 2>&1重定向问题
    【转】./a.out 2>&1 > outfile
    【转】apue《UNIX环境高级编程第三版》第一章答案详解
  • 原文地址:https://www.cnblogs.com/lqh969696/p/15989816.html
Copyright © 2020-2023  润新知