Spring 之条件注解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_29689487/article/details/82890833

    根据条件注解 @Conditional  在不同条件下创建不同的 bean.

判断条件定义:

package com.pangu.conditional;

import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;

/**
 * linux
 * @author etfox
 *
 */
public class LinuxCondition implements Condition {

    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        System.out.println(context.getEnvironment().getProperty("os.name"));
        return context.getEnvironment().getProperty("os.name").contains("Linux") || 
                context.getEnvironment().getProperty("os.name").contains("Mac OS X");
    }

}
package com.pangu.conditional;

import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;

/**
 * Windows
 * @author etfox
 *
 */
public class WindowsCondition implements Condition {

    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        return context.getEnvironment().getProperty("os.name").contains("Windows");
    }

}

 接口:

package com.pangu.conditional;

public interface ListService {
    public String showListCmd();
}

实现类:

package com.pangu.conditional;

public class LinuxListService implements ListService {

    @Override
    public String showListCmd() {
        return "ls";
    }

}
package com.pangu.conditional;

public class WindowsListService implements ListService {

    @Override
    public String showListCmd() {
        return "dir";
    }

}

配置类:

package com.pangu.conditional;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;

@Configuration
public class ConditionConfig {

    @Bean
    @Conditional(WindowsCondition.class)
    public ListService windowsListService() {
        return new WindowsListService();
    }

    @Bean
    @Conditional(LinuxCondition.class)
    public ListService linuxListService() {
        return new LinuxListService();
    }
}

执行类:

package com.pangu.conditional;

import org.junit.Test;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class Main {

    @Test
    public void test() {
        AnnotationConfigApplicationContext context = 
                new AnnotationConfigApplicationContext(ConditionConfig.class);
        
        ListService listService = context.getBean(ListService.class);
        
        System.out.println(context.getEnvironment().getProperty("os.name")+"系统下的命令为"+
                listService.showListCmd());
        
        context.close();
        
    }

}

结果:

九月 28, 2018 10:42:17 下午 org.springframework.context.support.AbstractApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@75828a0f: startup date [Fri Sep 28 22:42:17 CST 2018]; root of context hierarchy
Mac OS X
Mac OS X系统下的命令为ls
九月 28, 2018 10:42:18 下午 org.springframework.context.support.AbstractApplicationContext doClose
信息: Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@75828a0f: startup date [Fri Sep 28 22:42:17 CST 2018]; root of context hierarchy

猜你喜欢

转载自blog.csdn.net/qq_29689487/article/details/82890833