• spring boot自动装配及自动装配条件判断


    第一步需要在pom.xml文件指定需要导入的坐标

    要是没有自动提示需要检查maven有没有

    实现代码

    /*springboot第三方自动配置实现方法
    * 什么是自动配置 自动配置就是springboot启动自动加载的类不需要在手动的控制反转自动的加入bean中
    *
    * */
    
    /*第一种方案包扫描 不推荐因为繁琐自己也没有试成功过加在启动类上
    @ComponentScan({"com.example","com.example.comtihmabc2"}*/
    
    /*
    第二种方案@Import注解导入加在启动类上
    @Import({HeaderParser.class})  导入普通类交给I0C容器管理
    
    @Import({HeaderConfig.class})//导入配置类,交给I0C容器管理
    示例代码:
    @Configuration
    public class HeaderConfig {
        @Bean
        public HeaderParser headerParser(){ return new HeaderParser();}
        @Bean
        public HeaderGenerator headerGenerator(){ return new HeaderGenerator(); }
    }
    @Import({MyImportSelector.class})//导入Importselector接口实现类
    第三方所实现的接口ImportSelector 里面清楚的写明白了需要导入的类位置
    示例代码:
    public class MyImportSelector implements ImportSelector {
        public String[] selectImports(AnnotationMetadata importingClassMetadata) {
            return new String[]{"com.example.HeaderConfig"};
        }
    */
    
    
    /*第三种方案自定义注解@EnableHeaderConfig加在启动类上
    第三方自定义注解示例代码:
    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.TYPE)
    @Import(MyImportSelector.class)//MyImportSelector.class表示所要导入的类可以是配置类
    public @interface EnableHeaderConfig {
    }
    * */
    
    
    
    @SpringBootApplication
    public class ComTihmaBc2Application {
        public static void main(String[] args) {
            SpringApplication.run(ComTihmaBc2Application.class, args);
        }
    
    }
    

    执行代码示例

    @SpringBootTest
    class ComTihmaBc2ApplicationTests {
    
    //    //1.获取I0c容器对象
    //    @Autowired
    //    ApplicationContext applicationContext;
    
    
        @Autowired //手动依赖注入
        ApplicationContext applicationContext ;
    
    //    @Test
    //    void contextLoads() {
    //        applicationContext.getBean(HeaderParser.class).parse();
    //    }
    
        @Test
        void contextLoads1() {
            applicationContext.getBean(HeaderGenerator.class).generate();
        }
    
    
    }
    
    自动装配条件判断
    /*springboot自动配置条件判断注解满足条件才会执行  通常声名在类上或者方法上
    * springboot底层自动配置就是用此方法
    * */
    @Configuration
    public class HeaderConfig {
    
        //注解1
        /*判断环境中是否有对应字节码文件,才注册bean到I0C容器。可通过类型value或者名字name来进行判断
          示例1 : @ConditionalOnClass(name ="io.jsonwebtoken.Jwts")  名字name
          示例2 : @ConditionalOnClass(value = HeaderParser.class )  通过类型value
          */
        //注解2
         /* @ConditionalOnMissingBean 当不存在当前类型的bean时,
         才声明该bean才加入ioc容器 ---也可以指定类型(value属性)或 名称(name属性)
         没有就是当前 比如
         @ConditionalOnMissingBean
        public HeaderParser headerParser(){ return new HeaderParser();}
    
         */
    /*    @ConditionalOnProperty(name = "name",havingValue = "itheima")
    配置文件中存在对应的属性和值,才注册bean到I0C容器
    
    比如application.properties 配置文件中
    # 应用服务 WEB 访问端口
    server.port=8080
    name=itheima
    有就可以执行
    
    */
        @Bean
        @ConditionalOnProperty(name = "name",havingValue = "itheima")
        public HeaderParser headerParser(){ return new HeaderParser();}
    
        @Bean
        public HeaderGenerator headerGenerator(){ return new HeaderGenerator(); }
    }

  • 相关阅读:
    面试题 2023/11/15
    实现一个Prometheus exporter
    Chapter18: Machine Learning from Omics Data
    出口英国玩具有带电的话检测标准是 BS EN62115
    【KNN分类】kd-tree
    EF Core:基于关系的复杂查询 区分IEnumerable和IQueryable
    MemGPT: Towards LLMs as Operating Systems
    UniApp 中 nvue 盒模型入门
    软件测试面试---项目的组成
    log4cpp初入门
  • 原文地址:https://blog.csdn.net/kuayueday/article/details/136104584