主要转载自:http://412887952-qq-com.iteye.com/blog/1479445
如果在普通类里使用@Resrouce或者@Autoware这个两个注解,在使用的时候会报NEP,
因为如果本类不是springBean的话,那么注入是注入失败的,而且不抱错.
那平时该怎么用呢.可以使用那个什么Context(xxx.xml).getBean()来获取.
但是这样会去读取spring配置文件.如果在web环境里就不实用了.因为spring启动的时候就已经读取了配置文件,难道我们还要每次使用都去读取配置文件吗?
这样是不科学的.我们应该想办法获取到spring的容器,然后直接从容器里面获取.
方案1.继承自抽象类ApplicationObjectSupport
import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ApplicationObjectSupport; /** * 获取spring信息的工具类 * * @author Administrator * */ public final class ToolSpring extends ApplicationObjectSupport { private static ApplicationContext applicationContext = null; @Override protected void initApplicationContext(ApplicationContext context) throws BeansException { // TODO Auto-generated method stub super.initApplicationContext(context); if (ToolSpring.applicationContext == null) { ToolSpring.applicationContext = context; System.out.println(); System.out.println(); System.out.println("---------------------------------------------------------------------"); System.out.println( "========ApplicationContext配置成功,在普通类可以通过调用ToolSpring.getAppContext()获取applicationContext对象,applicationContext=" + applicationContext + "========"); System.out.println("---------------------------------------------------------------------"); System.out.println(); System.out.println(); } } public static ApplicationContext getAppContext() { return applicationContext; } public static Object getBean(String name) { return getAppContext().getBean(name); } public static Object getBean(Class<?> clazz) { return getAppContext().getBean(clazz); } }
并把这个工具类配置到bean里
2.继承自抽象类WebApplicationObjectSupport
跟上个差不多
import org.springframework.context.ApplicationContext; import org.springframework.web.context.support.WebApplicationObjectSupport; /** * 获取spring信息的工具类 * * @author Administrator * */ public final class ToolSpring extends WebApplicationObjectSupport { private static ApplicationContext applicationContext = null; @Override protected void initApplicationContext(ApplicationContext context) { // TODO Auto-generated method stub super.initApplicationContext(context); if (applicationContext == null) { applicationContext = context; System.out.println(); System.out.println(); System.out.println("---------------------------------------------------------------------"); System.out.println( "========ApplicationContext配置成功,在普通类可以通过调用ToolSpring.getAppContext()获取applicationContext对象,applicationContext=" + applicationContext + "========"); System.out.println("---------------------------------------------------------------------"); System.out.println(); System.out.println(); } } public static ApplicationContext getAppContext() { return applicationContext; } public static Object getBean(String name) { return applicationContext.getBean(name); } public static Object getBean(Class<?> clazz) { return applicationContext.getBean(clazz); } }
同样把类配成bean
3.实现接口ApplicationContextAware
import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; /** * 获取spring信息的工具类 * * @author Administrator * */ public final class ToolSpring implements ApplicationContextAware { private static ApplicationContext applicationContext = null; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { // TODO Auto-generated method stub if (ToolSpring.applicationContext == null) { ToolSpring.applicationContext = applicationContext; System.out.println(); System.out.println(); System.out.println("---------------------------------------------------------------------"); System.out.println( "========ApplicationContext配置成功,在普通类可以通过调用ToolSpring.getAppContext()获取applicationContext对象,applicationContext=" + applicationContext + "========"); System.out.println("---------------------------------------------------------------------"); System.out.println(); System.out.println(); } } public static ApplicationContext getApplicationContext() { return applicationContext; } public static Object getBean(String name) { return getApplicationContext().getBean(name); } public static Object getBean(Class<?> clazz) { return getApplicationContext().getBean(clazz); } }