spring应用手册-IOC(注解实现)-(17)-@Profile注解

    科技2025-05-05  12

    戴着假发的程序员出品 抖音ID:戴着假发的程序员 欢迎关注

    @Profile注解

    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章节。

    Processed: 0.018, SQL: 8