您好,欢迎来到爱玩科技网。
搜索
您的当前位置:首页10、@Conditional注解

10、@Conditional注解

来源:爱玩科技网

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

package com.mxx.boot.configure;

import com.mxx.boot.bean.Pet;
import com.mxx.boot.bean.User;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;

/**
 * @Author mxx
 * @Date 2024/10/14 16:17
 * @Version 1.0
 * 1、配置类里面使用@Bean标注在方法上给容器注册一个bean,默认是单实例的
 * 2、配置类本身也是组件
 * 3、proxyBeanMethods:代理bean的方法
 *      full:每个bean调用方法都去创建新的对象。
 *      light:如果组件调用方法,springboot只会调用一次,如果再调用,直接从容器中拿,不会重新创建新的对象。
 *  4、@Import({User.class, DBHelper.class})
 *        给容器中自动创建出这两个类型的组件、默认组件的名字就是全类名
 */
@Configuration// 告诉springboot这是一个配置类=配置文件
public class MxxConfigure {
    @Bean(name="tom")
    public Pet pet(){
        return new Pet("tomcat");
    }
    /**
     * 外部无论对配置类中的组件注册方法调用多少次,springboot总会调用一次配置类中配置方法,给容器中注册组件
     * @return
     */
    @ConditionalOnBean(name="tom")
    @Bean //给容器添加一个组件,以方法名作为组件的id,返回类型是组件类型。返回的值是bean实例
    public User user01(){
        return new User("mxx", 18);
    }

}
package com.mxx.boot;

import com.mxx.boot.bean.User;
import com.mxx.boot.configure.MxxConfigure;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

/**
 * @Author mxx
 * @Date 2024/10/14 10:57
 * @Version 1.0
 */
@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        ConfigurableApplicationContext run= SpringApplication.run(DemoApplication.class, args);
        String[] names = run.getBeanDefinitionNames();
        for (String name : names) {
            System.out.println(name);
        }
        Boolean flag= run.containsBean("user01");
        System.out.println(flag);
    }
}

名字为tom的bean存在就会将user01加入到容器中。

package com.mxx.boot.configure;

import com.mxx.boot.bean.Pet;
import com.mxx.boot.bean.User;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;

/**
 * @Author mxx
 * @Date 2024/10/14 16:17
 * @Version 1.0
 * 1、配置类里面使用@Bean标注在方法上给容器注册一个bean,默认是单实例的
 * 2、配置类本身也是组件
 * 3、proxyBeanMethods:代理bean的方法
 *      full:每个bean调用方法都去创建新的对象。
 *      light:如果组件调用方法,springboot只会调用一次,如果再调用,直接从容器中拿,不会重新创建新的对象。
 *  4、@Import({User.class, DBHelper.class})
 *        给容器中自动创建出这两个类型的组件、默认组件的名字就是全类名
 */
@Configuration// 告诉springboot这是一个配置类=配置文件
public class MxxConfigure {
   // @Bean(name="tom")
    public Pet pet(){
        return new Pet("tomcat");
    }
    /**
     * 外部无论对配置类中的组件注册方法调用多少次,springboot总会调用一次配置类中配置方法,给容器中注册组件
     * @return
     */
    @ConditionalOnBean(name="tom")
    @Bean //给容器添加一个组件,以方法名作为组件的id,返回类型是组件类型。返回的值是bean实例
    public User user01(){
        return new User("mxx", 18);
    }

}

conditional相关的注解,既可以加在方法上也可以加到类上。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- aiwanbo.com 版权所有 赣ICP备2024042808号-3

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务