spring项目启动后,获取bean的方法总结
2016-12-12 23:24
357 查看
如果在web项目中,用到定时器的朋友可能会遇到使用spring注解的方式获取bean的时候报空指针的异常。这是就可以使用手工的方法获取spring容器中的bean了。
下面是具体的方法:
1。先说一个最简单的方法
只要传入bean的name就可以获取了,简单方便。
2。实现BeanFactoryAware接口
说明:
这个类的意思大体这么几个意思:
测试:
访问url:http://www.xy.com:8080/news/addressee/test
控制台打印:
成功获取
3。方法三
4。方法四
5。方法五
示例:
方法六:
获取不到报错
方法七:
获取不到返回null
本文参考了:https://my.oschina.net/u/1454202/blog/521204
http://www.cnblogs.com/yangzhilong/p/3949332.html
下面是具体的方法:
1。先说一个最简单的方法
ContextLoaderListener.getCurrentWebApplicationContext().getBean ("beanName");
只要传入bean的name就可以获取了,简单方便。
2。实现BeanFactoryAware接口
package cn.cupcat.util; import org.springframework.beans.BeansException; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.BeanFactoryAware; import org.springframework.stereotype.Service; @Service public class BeanFactotyUtil implements BeanFactoryAware{ private static BeanFactory beanFactory=null; @Override public void setBeanFactory(BeanFactory beanFactory) throws BeansException { this.beanFactory = beanFactory; } public static <T> T getBean(String beanName){ return (T)beanFactory.getBean(beanName); } }
说明:
这个类的意思大体这么几个意思:
1,实现BeanFactoryAware接口,这个接口可以让我们在项目启动后获取bena工厂的实例,从而随心所欲的获取我们想要的bean实例。 2,setBeanFactory()方法是用的spring的依赖注入,set方法是三种注入方式之一。这样实例才会注入到该类里。 既然要注入,那么我们必须设置BeanUtils这个类也要在项目启动的时候被spring实例化,我这里是采用注解的方式@service来实现。 3,静态getBean方法,这里方法必须是静态的,因为你如果自己去new这个BeanUtils类的话,beanFactory是不会被注入进去的。
测试:
@RequestMapping("test") public void test(){ DaoSupport bean = BeanFactotyUtil.getBean("daoSupport"); System.out.println(bean); }
访问url:http://www.xy.com:8080/news/addressee/test
控制台打印:
cn.cupcat.dao.DaoSupport@113f0e57
成功获取
3。方法三
写一个工具类类继承ApplicationObjectSupport,并将这个加入到spring的容器
4。方法四
写一个工具类类继承WebApplicationObjectSupport,并将这个加入到spring的容器
5。方法五
写一个工具类实现ApplicationContextAware接口,并将这个加入到spring的容器
示例:
import java.util.Map; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; /** * 获取ApplicationContext和Object的工具类 * @author yzl * */ @SuppressWarnings({ "rawtypes", "unchecked" }) public class SpringContextUtils implements ApplicationContextAware { private static ApplicationContext applicationContext; public void setApplicationContext(ApplicationContext arg0) throws BeansException { applicationContext = arg0; } /** * 获取applicationContext对象 * @return */ public static ApplicationContext getApplicationContext(){ return applicationContext; } /** * 根据bean的id来查找对象 * @param id * @return */ public static Object getBeanById(String id){ return applicationContext.getBean(id); } /** * 根据bean的class来查找对象 * @param c * @return */ public static Object getBeanByClass(Class c){ return applicationContext.getBean(c); } /** * 根据bean的class来查找所有的对象(包括子类) * @param c * @return */ public static Map getBeansByClass(Class c){ return applicationContext.getBeansOfType(c); } }
方法六:
ApplicationContext ac1 = WebApplicationContextUtils.getRequiredWebApplicationContext(ServletContext sc)
获取不到报错
方法七:
ApplicationContext ac2 = WebApplicationContextUtils.getWebApplicationContext(ServletContext sc)
获取不到返回null
本文参考了:https://my.oschina.net/u/1454202/blog/521204
http://www.cnblogs.com/yangzhilong/p/3949332.html
相关文章推荐
- 如何获取spring中存放的各个bean及设置某个bean的自动启动方法
- spring-如何在项目启动的情况下获取Bean实例
- 获取 spring 的 bean 方法总结
- Java普通类获取Spring XML中Bean的方法总结
- 获取spring 的bean 方法总结
- spring-项目启动下获取Bean实例
- JSP 获取spring容器中bean的两种方法总结
- 项目启动 spring初始化bean之后执行指定方法
- spring 项目中获取bean 的方法
- Java普通类获取Spring XML中Bean的方法总结
- Web项目中获取SpringBean——在非Spring组件中获取SpringBean
- SPRING中BEAN注入成功,可是启动WEB服务器,调用方法时,BEAN全是空,NullpointerException
- Spring的几种工厂方法创建bean的总结
- Web项目中获取SpringBean——在非Spring组件中获取SpringBean
- 获取Spring容器中Bean实例的工具类(Java泛型方法实现)
- 获取Spring的Bean持有容器对象的方法
- C#应用程序获取项目路径的方法总结
- 普通Java类获取Spring的Bean的方法
- 获取Spring 容器中bean的方法
- Web项目中获取SpringBean——在非Spring组件中获取SpringBean