zoukankan      html  css  js  c++  java
  • 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); } }
  • 相关阅读:
    bzoj 1689: [Usaco2005 Open] Muddy roads 泥泞的路【贪心】
    bzoj 1734: [Usaco2005 feb]Aggressive cows 愤怒的牛【二分+贪心】
    bzoj 3401: [Usaco2009 Mar]Look Up 仰望【单调栈】
    bzoj 1652: [Usaco2006 Feb]Treats for the Cows【区间dp】
    bzoj 1718: [Usaco2006 Jan] Redundant Paths 分离的路径【tarjan】
    bzoj 1655: [Usaco2006 Jan] Dollar Dayz 奶牛商店【高精度+完全背包】
    洛谷 P3121 [USACO15FEB]审查(黄金)Censoring (Gold) 【AC自动机+栈】
    bzoj 3942: [Usaco2015 Feb]Censoring【kmp+栈】
    bzoj 1578: [Usaco2009 Feb]Stock Market 股票市场【背包】
    性能优化一大推
  • 原文地址:https://www.cnblogs.com/1540340840qls/p/7942017.html
Copyright © 2011-2022 走看看