6

我有一个在 spring 上下文 xml 文件中配置的属性文件。我从文件中加载值很好。我正在尝试从该属性文件中加载一个非弹簧管理的常规 pojo 中的属性。由于 Spring 已经加载了该属性,我想知道是否有办法获取该值,而不必手动加载属性文件?

4

2 回答 2

7

如果您的 pojo 不是由 Spring 管理的,您可以以静态方式访问 Spring 上下文。

将 bean 添加到您的应用程序 xml:

<bean id="StaticSpringApplicationContext" class="com.package.StaticSpringApplicationContext"/>

创建一个类:

public class StaticSpringApplicationContext implements ApplicationContextAware  {
    private static ApplicationContext CONTEXT;

      public void setApplicationContext(ApplicationContext context) throws BeansException {
        CONTEXT = context;
      }

      public static Object getBean(String beanName) {
        return CONTEXT.getBean(beanName);
      }

}

然后,您可以使用以下方法从 POJO 访问任何 Spring bean:

StaticSpringApplicationContext.getBean("yourBean")
于 2012-11-29T19:21:06.437 回答
1

对于使用注释和实现泛型的更现代的方法,您可以使用此版本,基于 Wickramarachi 响应:

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

@Component
public class StaticSpringApplicationContext implements ApplicationContextAware {
    private static ApplicationContext applicationContext;

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

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

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

}

用法如下:

SpringJPAPersistenceChannel bean = StaticSpringApplicationContext.getBean(MyBean.class);
于 2018-08-07T10:34:53.063 回答