Spring Boot的@Import和@Condition注解

@Import

可以写在任何一个组件,或者配置类上面

它其实是一个class的数组使用时,可以导入很多的组件

public @interface Import {
    Class<?>[] value();
}

我现在我的配置类上用@Import导入两个组件

@Import({User.class, DBHelper.class})      //User是我自己写的一个组件,DBhelper是在第三方依赖里随便找的一个实体类。
@Configuration

public class MyConfig {
}

在主程序里获取容器里的组件并打印

public static void main(String[] args) {
        //1.返回IOC容器
        ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);

        //2. 查看容器里面的组件
        String [] names=run.getBeanDefinitionNames();
        for(String name : names)
            {
                System.out.println(name);
            }

然后可以找到我导入的两个组件

在这里插入图片描述

**@Import({User.class, DBHelper.class}) **这个注解自动调用这两个类的无参构造器,给我们往容器里添加了组件,默认组件的名字是全类名

@Conditional

条件装配:满足Conditional指定的条件,则进行组件注入

@Conditional是一个根注解,有很多派生注解

在这里插入图片描述

这里演示**@ConditionalOnBean@ConditionalOnMissingBean**

比如我把我的配置类写成这个样子

@Configuration
public class MyConfig {
    @Bean                  //先添加pet组件
    public Pet pet(){
        return new Pet("asd");
    }
    @Bean
    @ConditionalOnBean(name = "pet")       //若存在pet组件,则添加user组件
    public User user(){
        User kk=new User("zhangsan");
        kk.setPet(new Pet("asd"));
        return kk;
    }
}

在主函数里测试一下

	ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);
    boolean pet = run.containsBean("pet");
    System.out.println("pet组件是否存在"+pet);
    boolean user = run.containsBean("user");
   	System.out.println("user组件是否存在"+user);

若写为@ConditionalOnMissingBean(name = “pet”)

则出现结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值