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

最新文章

  1. JackRabbit的前世今生
  2. Joomla软件功能介绍与开源程序大比拼Joomla,wordpress,Drupal哪个好?
  3. PHP echo 即时输出
  4. AE二次开发技巧之撤销、重做
  5. 笨方法学python--多行,转义序列
  6. [iOS]C语言技术视频-05-程序循环结构(do{}while();)
  7. 201521123119《Java程序设计》第9周学习总结
  8. js基本类型与引用类型,浅拷贝和深拷贝
  9. 数据恢复培训资料:BMP文件详解
  10. Vuex的基本概念、项目搭建、入坑点
  11. Pycharm桌面图标(Fedora)
  12. Java诊断工具
  13. English class 81:How Vulnerability can make our lives better?
  14. JAVA基础部分 JDK和JRE以及JVM
  15. 删除vector指定位置的元素
  16. [BZOJ 2839]集合计数
  17. Vim-复制选中内容至系统剪贴板,光标移动到指定行的行首和行尾
  18. Struts2_day01--导入源文件_Struts2的执行过程_查看源代码
  19. LintCode-56.两数之和
  20. appium连接夜神模拟器方法总结

热门文章

  1. Test类实验
  2. Python3爬虫(十三) 爬取动态页之Selenium
  3. 8 TFTP代码详解 协议写在程序中
  4. P2212 [USACO14MAR]浇地Watering the Fields
  5. howto:在构建基于debian的docker基础镜像时,更换国内包源
  6. CSS流布局权威指南
  7. Java之枚举笔记(Enum)
  8. C++调用Asprise OCR识别图片
  9. Ubuntu 安装Qt
  10. 使用testng.xml组织测试用例