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); } }

 

posted @ 2017-12-01 14:09  技术让世界更精彩  阅读(1824)  评论(0编辑  收藏