普通类调用Spring Bean

将SpringUtil 放在可以扫描的包下:

@Component //自动扫描会注入
public class SpringUtil implements ApplicationContextAware {

    private static ApplicationContext applicationContext = null;

    // 非@import显式注入,@Component是必须的,且该类必须与main同包或子包
    // 若非同包或子包,则需手动import 注入,有没有@Component都一样
    // 可复制到Test同包测试

    //获取applicationContext
    public static ApplicationContext getApplicationContext() {
        return applicationContext;
    }

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        if (SpringUtil.applicationContext == null) {
            SpringUtil.applicationContext = applicationContext;
        }
        System.out.println("---------------com.ilex.jiutou.util.Test.Main.SubPackage.SpringUtil---------------");
    }

    //通过name获取 Bean.
    public static Object getBean(String name) {
        return getApplicationContext().getBean(name);

    }

    //通过class获取Bean.
    public static <T> T getBean(Class<T> clazz) {
        return getApplicationContext().getBean(clazz);
    }

    //通过name,以及Clazz返回指定的Bean
    public static <T> T getBean(String name, Class<T> clazz) {
        return getApplicationContext().getBean(name, clazz);
    }
}

Usage:

var logConfig = SpringUtil.getApplicationContext().getBean(LogConfig.class);

其中LogConfig:

@Data
@Configuration
@ConfigurationProperties(prefix = "log.to.es")
public class LogConfig {
    private Integer queueSize;
    private Integer maxMilliseconds;
    private String debugUrl;
    private String errorUrl;
    private Boolean isRunning;

    public String getUrlByLevel(Level level) {
        switch (level.levelStr) {
            case "DEBUG":
            case "INFO":
                return debugUrl;
            case "WARN":
            case "ERROR":
                return errorUrl;
            default:
                return "";
        }
    }
}

results matching ""

    No results matching ""