当前位置:   article > 正文

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

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(); }
}

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/120986
推荐阅读
相关标签
  

闽ICP备14008679号