spring项目启动后,获取bean的方法总结
来源:互联网 发布:海康网络视频解码器 编辑:程序博客网 时间:2024/04/28 21:38
如果在web项目中,用到定时器的朋友可能会遇到使用spring注解的方式获取bean的时候报空指针的异常。这是就可以使用手工的方法获取spring容器中的bean了。
下面是具体的方法:
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;@Servicepublic 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
0 0
- spring项目启动后,获取bean的方法总结
- spring 项目中获取bean 的方法
- 获取 spring 的 bean 方法总结
- Spring启动后获取所有拥有特定注解的Bean
- Spring启动后获取所有拥有特定注解的Bean
- spring-项目启动下获取Bean实例
- 如何获取spring中存放的各个bean及设置某个bean的自动启动方法
- spring的bean获取项目根目录
- tomcat中运行正常的web项目部署至websphere后,spring无法获取bean
- Web项目启动初始化监听器如何获取spring bean
- spring 获取 bean方法
- Spring中获取bean的方式总结
- spring中bean的获取方式总结
- Spring中获取bean的方式总结
- 获取Spring Bean 的几种方法.
- 获取Spring 容器中bean的方法
- 获取spring容器中bean的方法
- servletListener 中获取spring bean的方法
- # ibatis参数报错class java.lang.String
- android分辨率适配
- tar命令详解
- PAT A1006
- JAVA中的接口和抽象类
- spring项目启动后,获取bean的方法总结
- 线程执行 Q&A
- 数组的排序方法
- 《C和指针》中关于EOF的问题
- PAT A1008
- 下载文件组件
- 对于泥球型状态机,估计你也苦恼!
- PHP 判断中英文
- Swift Playground