zoukankan      html  css  js  c++  java
  • spring in action学习笔记七:@Conditional注解的用法

    @Profile注解是@Conditional注解的一个例子。即@Profile也是用@Conditional注解来实现的。

    必须让条件实现Condition这个接口。

    下面的案例讲如果环境中有magic这个属性,则能通过条件,spring会创建bean。反之如果环境中没有magic这个属性,则不能通过条件,spring就不会创建bean,会报错。

    案例的代码如下:

    MagicBean的代码如下:

     1 package com.advancedWiring.conditionalBeans;
     2 
     3 import org.springframework.beans.factory.BeanNameAware;
     4 import org.springframework.beans.factory.annotation.Value;
     5 
     6 /**
     7  * Created by ${秦林森} on 2017/6/8.
     8  */
     9 public class MagicBean implements BeanNameAware{
    10 
    11     @Override
    12     public void setBeanName(String name) {
    13         System.out.println("The MagicBean's bean name is :"+name);
    14     }
    15 }

    MagicExistsCondition的代码如下:

     1 package com.advancedWiring.conditionalBeans;
     2 
     3 import org.springframework.context.annotation.Condition;
     4 import org.springframework.context.annotation.ConditionContext;
     5 import org.springframework.core.env.Environment;
     6 import org.springframework.core.type.AnnotatedTypeMetadata;
     7 
     8 /**
     9  * Created by ${秦林森} on 2017/6/8.
    10  */
    11 public class MagicExistsCondition implements Condition{
    12     @Override
    13     public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
    14         Environment environment = context.getEnvironment();
    15         /**
    16          * 如果环境包含magic这个属性,则返回true,反之为false
    17          * 千万不要理解为MagicBean有magic这个属性返回true,反之为false.
    18          */
    19         return environment.containsProperty("magic");
    20      }
    21 }

    MapelConfig的代码如下:

     1 package com.advancedWiring.conditionalBeans;
     2 
     3 import org.springframework.context.annotation.Bean;
     4 import org.springframework.context.annotation.Conditional;
     5 import org.springframework.context.annotation.Configuration;
     6 import org.springframework.context.annotation.Import;
     7 
     8 /**
     9  * Created by ${秦林森} on 2017/6/8.
    10  */
    11 @Configuration
    12 public class MapelConfig {
    13     @Bean
    14     @Conditional(MagicExistsCondition.class)
    15     public MagicBean magicBean(){
    16         return  new MagicBean();
    17     }
    18 }

    测试类Test的代码如下:

     1 package com.advancedWiring.conditionalBeans;
     2 
     3 import org.springframework.context.annotation.AnnotationConfigApplicationContext;
     4 
     5 /**
     6  * Created by ${秦林森} on 2017/6/8.
     7  */
     8 public class Test {
     9     public static void main(String[] args) {
    10         /**
    11          * 如果想让MagicExistsCondition返回true的话:
    12          *  System.setProperty("magic","这里的内容随便写");这句话不能少。
    13          *  反之,如果不写上面的语句,则返回false.
    14          */
    15         System.setProperty("magic","people");//这句话不能少。
    16         AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(MapelConfig.class);
    17         MagicBean magicBean = ac.getBean(MagicBean.class);
    18     }
    19 }
  • 相关阅读:
    [BNUOJ] ACM Battle(贪心)
    [BNUOJ]Training Plan(贪心,dp)
    [BNUOJ]Squared Permutation(线段树,单点更新)
    可以处理重边的求割点(边)模板
    [Python] Spark平台下实现分布式AC自动机(一)
    [HDOJ2222]Keywords Search(AC自动机)
    [GCJ] Qualification Round 2017
    HDU 6298.Maximum Multiple-数学思维题(脑子是个好东西,可惜我没有) (2018 Multi-University Training Contest 1 1001)
    牛客网 牛客小白月赛5 I.区间 (interval)-线段树 or 差分数组?
    牛客网 暑期ACM多校训练营(第二场)J.farm-STL(vector)+二维树状数组区间更新、单点查询 or 大暴力?
  • 原文地址:https://www.cnblogs.com/1540340840qls/p/6965196.html
Copyright © 2011-2022 走看看