美文网首页
JAVA 静态使用Bean方法

JAVA 静态使用Bean方法

作者: 程序员大春 | 来源:发表于2020-04-21 10:57 被阅读0次
@Component
@Scope(scopeName = WebApplicationContext.SCOPE_SESSION)
public class Xxxx implements Serializable {

    private Object object = null;

    public void set(Object obj) {
        this.object = obj;
    }

    public Object get() {
        return object;
    }

    public static Xxxx me() {
        return SpringContextHolder.getBean(Xxxx.class);
    }
}

使用

Xxxx.me().get()

Spring的ApplicationContext的持有者,可以用静态方法的方式获取spring容器中的bean

public class SpringContextHolder implements ApplicationContextAware {

    private static ApplicationContext applicationContext;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        SpringContextHolder.applicationContext = applicationContext;
    }

    public static ApplicationContext getApplicationContext() {
        assertApplicationContext();
        return applicationContext;
    }

    @SuppressWarnings("unchecked")
    public static <T> T getBean(String beanName) {
        assertApplicationContext();
        return (T) applicationContext.getBean(beanName);
    }

    public static <T> T getBean(Class<T> requiredType) {
        assertApplicationContext();
        return applicationContext.getBean(requiredType);
    }

    private static void assertApplicationContext() {
        if (SpringContextHolder.applicationContext == null) {
            throw new RuntimeException("applicaitonContext属性为null,请检查是否注入了SpringContextHolder!");
        }
    }

相关文章

网友评论

      本文标题:JAVA 静态使用Bean方法

      本文链接:https://www.haomeiwen.com/subject/luayihtx.html