戴着假发的程序员出品 抖音ID:戴着假发的程序员 欢迎关注
spring应用手册(第二部分)
@Profile注解源码
package org.springframework.context.annotation; @java.lang.annotation.Target({java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.METHOD}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Documented @org.springframework.context.annotation.Conditional({org.springframework.context.annotation.ProfileCondition.class}) public @interface Profile { java.lang.String[] value(); }@Profile和配置文件的Profile有一样的作用,就是可以在不同的环境(条件)下让配置(注册生效)。
看案例:
/** * @author 戴着假发的程序员 * * @description */ @Component @Profile("oracle") public class ArticleDAO_oracle implements IArticleDAO { public ArticleDAO_oracle(){ System.out.println("实例化ArticleDAO_oracle"); } } /** * @author 戴着假发的程序员 * * @description */ @Component @Profile("mysql") public class ArticleDAO_mysql implements IArticleDAO { public ArticleDAO_oracle(){ System.out.println("实例化ArticleDAO_mysql"); } }测试:
/** * @author 戴着假发的程序员 */ public class SpringTest { @Test public void testAnnotation() throws IOException { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(); //设置启动环境 ac.getEnvironment().setActiveProfiles("mysql"); //注册扫描包,注册所有的bean ac.scan("com.st"); //刷新容器 ac.refresh(); } }测试结果:
实例化ArticleDAO_mysql我们发现ArticleDAO_oracle根本就没有实例化。
当然激活环境的方法还有很多。可以参考 XML配置profile章节。