• 技术文章 >Java >java教程

    @Profile注解详解

    (*-*)浩(*-*)浩2019-08-12 16:15:11转载1822
    @Profile:Spring为我们提供的可以根据当前环境,动态的激活和切换一系列组件的功能;

    php入门到就业线上直播课:进入学习

    开发环境develop、测试环境test、生产环境master

    数据源:(/dev) (/test) (/master)

    @Profile:指定组件在哪个环境的情况下才能被注册到容器中,不指定,任何环境下都能注册这个组件

    1) 加了环境标识的bean,只有这个环境被激活的时候才能注册到容器中。默认是default环境

    2) 写在配置类上,只有是指定的环境的时候,整个配置类里面的所有配置才能开始生效

    package com.spring.config;
     
    import java.beans.PropertyVetoException;
     
    import javax.sql.DataSource;
     
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.context.EmbeddedValueResolverAware;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.Profile;
    import org.springframework.context.annotation.PropertySource;
    import org.springframework.util.StringValueResolver;
     
    import com.mchange.v2.c3p0.ComboPooledDataSource;
     
    /**
     * Profile:
     * 		Spring为我们提供的可以根据当前环境,动态的激活和切换一系列组件的功能;
     * 
     * 开发环境develop、测试环境test、生产环境master
     * 数据源:(/dev) (/test) (/master)
     *
     * @Profile:指定组件在哪个环境的情况下才能被注册到容器中,不指定,任何环境下都能注册这个组件
     * 
     * 1) 加了环境标识的bean,只有这个环境被激活的时候才能注册到容器中。默认是default环境
     * 2) 写在配置类上,只有是指定的环境的时候,整个配置类里面的所有配置才能开始生效
     * 
     */
    @PropertySource("classpath:/dbconfig.properties")
    @Configuration
    public class MainConfigOfProfile implements EmbeddedValueResolverAware{
    	
    	@Value("${db.user}")
    	private String user;
    	
    	private String driverClass;
    	
    	@Profile("default")
    	@Bean("test")
    	public DataSource testDataSource(@Value("${db.password}")String password) throws PropertyVetoException {
    		ComboPooledDataSource dataSource = new ComboPooledDataSource();
    		dataSource.setUser(user);
    		dataSource.setPassword(password);
    		dataSource.setDriverClass(driverClass);
    		return dataSource;
    	}
    	
    	@Profile("dev")
    	@Bean("dev")
    	public DataSource devDataSource(@Value("${db.password}")String password) throws PropertyVetoException {
    		ComboPooledDataSource dataSource = new ComboPooledDataSource();
    		dataSource.setUser(user);
    		dataSource.setPassword(password);
    		dataSource.setDriverClass(driverClass);
    		return dataSource;
    	}
    	
    	@Profile("master")
    	@Bean("master")
    	public DataSource masterDataSource(@Value("${db.password}")String password) throws PropertyVetoException {
    		ComboPooledDataSource dataSource = new ComboPooledDataSource();
    		dataSource.setUser(user);
    		dataSource.setPassword(password);
    		dataSource.setDriverClass(driverClass);
    		return dataSource;
    	}
     
    	public void setEmbeddedValueResolver(StringValueResolver resolver) {
    		String driverClass = resolver.resolveStringValue("${db.driverClass}");
    		this.driverClass = driverClass;
    	}
     
    }
    package com.spring.test;
     
    import java.util.Arrays;
     
    import javax.sql.DataSource;
     
    import org.junit.Test;
    import org.springframework.context.annotation.AnnotationConfigApplicationContext;
     
    import com.spring.config.MainConfigOfProfile;
     
     
    public class IOCTestProfile {
    	//1. 使用命令行动态参数:在虚拟机参数位置加载 -Dspring.profiles.active=test
    	//2. 使用代码的方式激活某种环境;
    	@Test
    	public void test01() {
    		AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfigOfProfile.class);
    		//1. 创建一个applicationContext
    		//2. 设置需要激活的环境
    		applicationContext.getEnvironment().setActiveProfiles("dev","master");
    		//3. 注册主配置类
    		applicationContext.register(MainConfigOfProfile.class);
    		//4. 启动刷新容器
    		applicationContext.refresh();
    		
    		String[] beanNamesForType = applicationContext.getBeanNamesForType(DataSource.class);
    		System.out.println(Arrays.toString(beanNamesForType));
    		
    		applicationContext.close();
    	}
     
     
            @Test
    	public void test02() {
    		AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfigOfProfile.class);
    		
    		String[] beanNamesForType = applicationContext.getBeanNamesForType(DataSource.class);
    		System.out.println(Arrays.toString(beanNamesForType));
    		
    		applicationContext.close();
    	}
    }

    以上就是@Profile注解详解的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:CSDN,如有侵犯,请联系admin@php.cn删除

    前端(VUE)零基础到就业课程:点击学习

    清晰的学习路线+老师随时辅导答疑

    自己动手写 PHP MVC 框架:点击学习

    快速了解MVC架构、了解框架底层运行原理

    专题推荐:注解
    上一篇:java怎么用 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • ❤️‍🔥共22门课程,总价3725元,会员免费学• ❤️‍🔥接口自动化测试不想写代码?• Java注解的定义及使用介绍(代码示例)• springmvc注解是什么• component什么层注解• spring都有什么常用注解标签
    1/1

    PHP中文网