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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>