基于编程方式实现条件装配

1、定义接口
​​​​​​​package com.imooc.diveinspringbootzhujie.condition;


import org.springframework.context.annotation.Conditional;

import java.lang.annotation.*;

@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE, ElementType.METHOD })
@Documented
@Conditional(OnSystemPropertyCondition.class)
public @interface ConditionalOnSystemProperty {
    String name();

    String value();
}
2、定义包装接口的功能类,使用Condition接口中定义的属性和方法。

package com.imooc.diveinspringbootzhujie.condition;
import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;

import java.util.Map;

public class OnSystemPropertyCondition implements Condition {

    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata){
        //Map<String, Object> getAnnotationAttributes(String annotationName);
        Map<String, Object> attributes = metadata.getAnnotationAttributes(ConditionalOnSystemProperty.class.getName());

        String propertyName = String.valueOf(attributes.get("name"));

        String propertyValue = String.valueOf(attributes.get("value"));

        System.out.println(propertyName + " " + propertyValue);

        String javaPropertyValue = System.getProperty(propertyName);//根据name获取系统value的值(我的是Administrator)

        return propertyValue.equals(javaPropertyValue);
    }
}
3、定义spring boot 的项目启动入口
package com.imooc.diveinspringbootzhujie.bootstrap;

import com.imooc.diveinspringbootzhujie.condition.ConditionalOnSystemProperty;
import org.springframework.boot.WebApplicationType;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;

//@ConditionalOnSystemProperty(name = "user.name", value = "")
public class ConditionalOnSystemPropertyBootstrap {

    @Bean
    @ConditionalOnSystemProperty(name="user.name",value="Administrator")//这是条件装配的入口
    public String helloWorld(){
        return "hello world 小马哥";
    };


    public static void main(String[] args) {
        ConfigurableApplicationContext context = new SpringApplicationBuilder(ConditionalOnSystemPropertyBootstrap.class)
                .web(WebApplicationType.NONE)
                .run(args);
        //这时不需要取Bean

        String helloWorld = context.getBean("helloWorld", String.class);

        System.out.println(helloWorld);



        context.close();//关闭上下文
    }
}
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值