All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.moon.spring.SpringUtil Maven / Gradle / Ivy

package com.moon.spring;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;

/**
 * @author moonsky
 */
public final class SpringUtil implements ApplicationContextAware {

    private static volatile ApplicationContext CTX;

    @Autowired(required = false)
    private ConfigurableApplicationContext context;

    @Override
    public synchronized void setApplicationContext(ApplicationContext ctx) {
        if (context == null && ctx instanceof ConfigurableApplicationContext) {
            context = (ConfigurableApplicationContext) ctx;
        }
        CTX = ctx;
    }

    public static ApplicationContext getContext() { return CTX; }

    public static  T getBean(Class type) {
        return CTX == null ? null : CTX.getBean(type);
    }

    public static Object getBean(String beanName) {
        return CTX == null ? null : CTX.getBean(beanName);
    }

    public static  T getBean(String beanName, Class requiredType) {
        return CTX == null ? null : CTX.getBean(beanName, requiredType);
    }

    public static Environment getEnvironment() {
        ApplicationContext ctx = getContext();
        return ctx == null ? null : ctx.getEnvironment();
    }

    public static String getProperty(String key) { return getProperty(key, null); }

    public static String getProperty(String key, String defaultValue) {
        Environment env = getEnvironment();
        return env == null ? defaultValue : env.getProperty(key, defaultValue);
    }

    public static void publish(ApplicationEvent event) { publish((Object) event); }

    public static void publish(Object event) {
        ApplicationContext ctx = getContext();
        if (ctx != null) {
            ctx.publishEvent(event);
        }
    }

    public static void refresh() {
        if (CTX instanceof ConfigurableApplicationContext) {
            ((ConfigurableApplicationContext) CTX).refresh();
        } else {
            ConfigurableApplicationContext gblCtx;
            SpringUtil gbl = getBean(SpringUtil.class);
            if ((gblCtx = gbl.context) != null) {
                gblCtx.refresh();
            }
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy