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