spring @Profile的运用示例

@Profile的作用是把一些meta-data进行分类,分成Active和InActive这两种状态,然后你可以选择在active 和在Inactive这两种状态 下配置bean,

在Inactive状态通常的注解有一个!操作符,通常写为:@Profile("!p"),这里的p是Profile的名字。

下面demo中AppProfileConfig的bean在active状态下被IOC容器创建,而AppProfileConfig2是在Inactive状态下被IOC容器创建:

demo的思路是:先定义两个domain类,再写两个配置类即上面提的AppProfileConfig和AppProfileConfig2这两个类,最后写一个测试类:

示例代码如下:

第一个domain类:Alarm类的代码如下:

package com.timo.profile.domain;

public class Alarm {
    private String name;
    private Integer alarmSeverity;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAlarmSeverity() {
        return alarmSeverity;
    }

    public void setAlarmSeverity(Integer alarmSeverity) {
        this.alarmSeverity = alarmSeverity;
    }
}

第二个domain类:ouyangfeng的代码如下:

package com.timo.profile.domain;

public class Ouyangfeng {
    private String name;
    private Integer age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

第一个配置类:AppProfileConfig的代码如下:

package com.timo.profile;

import com.timo.profile.domain.Alarm;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;

@Configuration
@Profile("sixi")
public class AppProfileConfig {
    @Bean
    public Alarm alarm(){
        Alarm alarm = new Alarm();
        alarm.setAlarmSeverity(1);
        alarm.setName("历史告警");
        return  alarm;
    }
}

第二个配置类AppProfileConfig2的代码如下:

package com.timo.profile;

import com.timo.profile.domain.Ouyangfeng;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;

@Configuration
@Profile("!flower")
public class AppProfileConfig2 {
    @Bean
    public Ouyangfeng ouyangfeng(){
        Ouyangfeng ouyangfeng = new Ouyangfeng();
        ouyangfeng.setAge(25);
        ouyangfeng.setName("欧阳");
        return  ouyangfeng;
    }
}

测试类的代码如下:

package com.timo.profile;

import com.timo.profile.domain.Alarm;
import com.timo.profile.domain.Ouyangfeng;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class Test {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();    //激活@Profile中name为sixi的类:
        ctx.getEnvironment().setActiveProfiles("sixi");
        ctx.register(AppProfileConfig.class,AppProfileConfig2.class);
        ctx.refresh();
        Alarm alarm = ctx.getBean(Alarm.class);
        Ouyangfeng ouyangfeng = ctx.getBean(Ouyangfeng.class);
        System.out.println("alarm="+alarm);
        System.out.println("ouyangfeng="+ouyangfeng);

    }
}
时间: 2024-10-11 13:47:42

spring @Profile的运用示例的相关文章

Spring Profile和Mybatis进行多个数据源(H2和Mysql)的切换

总结: 最近在做WebMagic的后台,遇到一个问题:后台用到了数据库,本来理想情况下是用Mysql,但是为了做到开箱即用,也整合了一个嵌入式数据库H2.这里面就有个问题了,如何用一套代码,提供对Mysql和H2两种方案的支持?博主收集了一些资料,也调试了很久,终于找到一套可行方案,记录下来.代码贴的有点多,主要是为了以后方便自己查找. H2的使用 H2是一个嵌入式,纯Java实现的数据库,它各方面都要好于Java的sqlitejdbc.它可以使用内存模式,也可以使用磁盘模式.具体使用可以看攻略

spring profile 多环境配置管理

现象 ??如果在开发时进行一些数据库测试,希望链接到一个测试的数据库,以避免对开发数据库的影响. ??开发时的某些配置比如log4j日志的级别,和生产环境又有所区别. ??各种此类的需求,让我希望有一个简单的切换开发环境的好办法. 解决 ??现在spring3.1也给我们带来了profile,可以方便快速的切换环境. ??使用也是非常方便.只要在applicationContext.xml中添加下边的内容,就可以了 <!-- 开发环境配置文件 --> <beans profile=&qu

Maven 结合 Spring profile对不同的部署环境打包部署

这是一个草鸡鸡冻人心的时刻,搞了2天终于搞定了,麻麻再也不用担心我部署出错了!!!!!!! 所有profile,spring和maven的,定义均要一致,否则,自己运行看看. 首先,先来讲下spring的profile功能,这个是方便项目的各种环境分离(开发.测试.生产),简单介绍下如何使用. 在beans中定义环境代码,项目中,我在beans.xml里定义 1 <beans profile="develop,test,product"></beans> 在数据

Spring中的IOC示例

Spring中的IOC示例 工程的大概内容是: 一个人在中国时用中国话问候大家,在国外时用英语问候大家. 其中, IHelloMessage是接口,用来定义输出问候信息 public interface IHelloMessage { public String sayhello(); } HelloWorld是接口的实现类,向用户输出  hello world  信息 public class HelloWorld implements IHelloMessage { @Override pu

Spring MVC-页面重定向示例(转载实践)

以下内容翻译自:https://www.tutorialspoint.com/springmvc/springmvc_page_redirection.htm 说明:示例基于Spring MVC 4.1.6. 以下示例显示如何编写一个简单的基于Web的应用程序,该应用程序利用重定向将http请求传输到另一个页面.首先,让我们使用Eclipse IDE,并按照以下步骤使用Spring Web Framework开发基于动态窗体的Web应用程序: 步骤 描述 1 创建一个名为HelloWeb的项目,

Spring MVC-静态页面示例(转载实践)

以下内容翻译自:https://www.tutorialspoint.com/springmvc/springmvc_static_pages.htm 说明:示例基于Spring MVC 4.1.6. 以下示例显示了如何使用Spring MVC Framework编写一个简单的基于Web的应用程序,该MVC框架可以在<mvc:resources>标签的帮助下访问静态页面以及动态页面.首先,让我们使用Eclipse IDE,并按照以下步骤使用Spring Web Framework开发基于动态窗

Spring IOC(控制反转)示例解析

控制反转--Spring通过一种称作控制反转(IoC)的技术促进了低耦合.当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象.你可以认为IoC与JNDI相反--不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它. 首先用简单代码做一个简单示例来介绍一下什么事控制反转. 1.做一个叫JavaWork的测试类,其中有doTest()方法.(当然,是需要有人来做测试啦,所以看第二步) 2.有一个人,张三,他来做测试这个工

Spring整合MyBatis完整示例

为了梳理前面学习的内容<Spring整合MyBatis(Maven+MySQL)一>与<Spring整合MyBatis(Maven+MySQL)二>,做一个完整的示例完成一个简单的图书管理功能,主要使用到的技术包含Spring.MyBatis.Maven.MySQL及简单MVC等.最后的运行效果如下所示: 项目结构如下: 一.新建一个基于Maven的Web项目 1.1.创建一个简单的Maven项目,项目信息如下: 1.2.修改层面信息,在项目上右键选择属性,再选择“Project

Spring集成MyBatis完整示例

为了梳理前面学习的<Spring整合MyBatis(Maven+MySQL)一>与<Spring整合MyBatis(Maven+MySQL)二>中的内容,准备做一个完整的示例完成一个简单的图书管理功能,主要使用到的技术包含Spring.MyBatis.Maven与MySQL等.最后的运行效果如下: 项目结构如下: 一.新建一个基于Maven的Web项目 1.1.创建一个简单的Maven项目,项目信息如下: 1.2.修改层面信息,在项目上右键选择属性,再选择“Project Face