SpringBoot底层注解详解

@ConditionalOnBean

  基于bean组件的条件判断,简单来说就是只有当前的的IOC容器当中包含@ConditionalOnBean注解所规定的bean组件的时候,其它的组件才会被注入到容器当中。

@Bean("Tom")//这里可以设置自定义组件的名字
    public Pet pet01(){
        Pet pet = new Pet("汤姆猫");
        return pet;
    }

    @ConditionalOnBean(name = "Tom")
    @Bean
    public User user01(){
        User user = new User("张三",25);
        //User组件依赖了Pet组件(true or false)
        user.setPet(pet01());
        return  user;
    }

user01会被注入到容器当中。

@Bean("tom")//这里可以设置自定义组件的名字
    public Pet pet01(){
        Pet pet = new Pet("汤姆猫");
        return pet;
    }

    @ConditionalOnBean(name = "Tom")
    @Bean
    public User user01(){
        User user = new User("张三",25);
        //User组件依赖了Pet组件(true or false)
        user.setPet(pet01());
        return  user;
    }

user01不会被注入到容器当中。

@ConditionalOnMissingBean

  基于bean组件的条件判断,简单来说就是只有当前的的IOC容器当中并不包含@ConditionalOnMissingBean注解所规定的bean组件的时候,其它的组件才会被注入到容器当中,跟 @ConditionalOnBean起到相反的作用。

@Configuration(proxyBeanMethods = true)//告诉SpringBoot这是一个配置类==配置文件
@ConditionalOnMissingBean(name = "test")
public class MyConfig {
    /*
    * 给容器中添加组件。
    * 1.以方法名作为组件的id。
    * 2.返回类型就是组件类型。
    * 3.返回的值就是组件在容器中的实例。*/
    /*
    * 外部无论对配置类中的这个组件注册方法调用多少次获取的都是之前注册容器中共的单实例对象*/
    @Bean("Tom")//这里可以设置自定义组件的名字
    public Pet pet01(){
        Pet pet = new Pet("汤姆猫");
        return pet;
    }
    @Bean
    public User user01(){
        User user = new User("张三",25);
        //User组件依赖了Pet组件(true or false)
        user.setPet(pet01());
        return  user;
    }
}

由于容器当中并没有名字为test的组件,因此Tom组件和user01组件可以被注入到容器当中。

@ImportResource

  虽然使用SpringBoot进行开发可以不写xml配置文件,但是难免会有人使用xml配置文件来向容器中注入组件,那么在SpringBoot里面就可以使用 @ImportResource注解来向容器中注入组件属性。

@Configuration(proxyBeanMethods = true)//告诉SpringBoot这是一个配置类==配置文件
@ConditionalOnMissingBean(name = "123")
@ImportResource("classpath:beans.xml")
public class MyConfig {

    /*
    * 给容器中添加组件。
    * 1.以方法名作为组件的id。
    * 2.返回类型就是组件类型。
    * 3.返回的值就是组件在容器中的实例。*/
    /*
    * 外部无论对配置类中的这个组件注册方法调用多少次获取的都是之前注册容器中共的单实例对象*/

    //@Bean("Tom")//这里可以设置自定义组件的名字
    public Pet pet01(){
        Pet pet = new Pet("汤姆猫");
        return pet;
    }
    //这个注解已经被屏蔽掉了,导致这里的user01和Tom并不是组件,组件的注入依赖于上面的@ImportResource注解
    //@Bean
    public User user01(){
        User user = new User("张三",25);
        //User组件依赖了Pet组件(true or false)
        user.setPet(pet01());
        return  user;
    }
}

@ConfigurationProperties

  如何将bean组件的属性值和属性配置文件绑定在一起呢,@ConfigurationProperties就是来解决这个问题的,具体使用我们来看看代码:

//在配置类当中注入user01组件,此时的组件并没有属性内容
@Bean
    public User user01(){
        User user = new User();
        return  user;
    }
<!--设置属性值-->
user.username=lisi
user.userage=24
user.pet.petype=dog
//在User类上面添加@ConfigurationProperties注解即可绑定属性
//使用这个注解的前提是User类组件已经被注入到容器当中!!!
@ConfigurationProperties(prefix = "user")
public class User {
    private String username;
    private int userage;
    private Pet pet;
    //无参构造方法
    public User() {
    }
    //有参构造方法
    public User(String username, int userage) {
        this.username = username;
        this.userage = userage;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public int getUserage() {
        return userage;
    }
    public void setUserage(int userage) {
        this.userage = userage;
    }
    public Pet getPet() {
        return pet;
    }
    public void setPet(Pet pet) {
        this.pet = pet;
    }
    @Override
    public String toString() {
        return username +""+userage+""+pet.getPetype();
    }
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值