spring @Profile的运用示例

Posted 技术让世界更精彩

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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); } }

 


以上是关于spring @Profile的运用示例的主要内容,如果未能解决你的问题,请参考以下文章

《Spring Boot实战》示例代码问题

Spring Boot教程7——Profile

Spring 环境与profile——超简用例

Spring-AOP

如何运用领域驱动设计 - 值对象

需要示例代码片段帮助