在春天中获取bean的方法有哪些?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
<强>方法如下强>
- <李>
方法一:通过读取XML文件反射生成对象
李> <李>方法二:通过春天提供的跑龙套类获取ApplicationContext对象
李> <李>方法三:继承自抽象类ApplicationObjectSupport
李> <李>方法四:继承自抽象类WebApplicationObjectSupport
李> <李>方法五:实现接口ApplicationContextAware
李> <李>方法六:通过春天提供的ContextLoader
李>获取春天中bean的方式总结:
<强>方法一:通过读取XML文件反射生成对象强>
ApplicationContext ac =, new FileSystemXmlApplicationContext (“applicationContext.xml"); ac.getBean (“userService");//比如:& lt; bean id=皍serService",类=癱om.cloud.service.impl.UserServiceImpl"祝辞& lt;/bean>
说明:这样的方式适用于採用弹簧框架的独立应用程序,须要程序通过配置文件手工初始化春天的情况。
<强>方法二:通过春天提供的工具类获取ApplicationContext对象强>
ApplicationContext ac1 =, WebApplicationContextUtils.getRequiredWebApplicationContext (ServletContext sc); ApplicationContext ac2 =, WebApplicationContextUtils.getWebApplicationContext (ServletContext sc); ac1.getBean (“beanId"); ac2.getBean (“beanId");
说明:这样的方式适合于春天框架的B/S系统,通过ServletContext对象获取ApplicationContext对象,然后在通过它获取须要的类实例。上面两个工具方式的差别是,前者在获取失败时抛出异常。后者返回零。
<强>方法三:继承自抽象类ApplicationObjectSupport 强>
说明:抽象类ApplicationObjectSupport提供getApplicationContext()方法。能够方便的获取ApplicationContext。
春初始化时。会通过该抽象类的setApplicationContext (ApplicationContext上下文)方法将ApplicationContext对象注入。
<强>方法四:继承自抽象类WebApplicationObjectSupport 强>
说明:类似上面方法。调用getWebApplicationContext()获取WebApplicationContext
<强>方法五:实现接口ApplicationContextAware 强>
说明:实现该接口的setApplicationContext (ApplicationContext上下文)方法,并保存ApplicationContext对象.Spring初始化时,会通过该方法将ApplicationContext对象注入。
下面是实现ApplicationContextAware接口方式的代码,前面两种方法类似:
public class SpringContextUtil implements ApplicationContextAware {, ,//才能,春天应用上下文环境, private 才能static ApplicationContext  applicationContext;, ,/* *,才能 ,,*,实现ApplicationContextAware接口的回调方法。设置上下文环境, ,,*, ,,*,@param applicationContext ,,*/, public 才能;void  setApplicationContext (ApplicationContext applicationContext), {, ,,,SpringContextUtil.applicationContext =, applicationContext;, ,,}, ,/* *,才能 ,,*,@return ApplicationContext ,,*/, public 才能static ApplicationContext  getApplicationContext (), {, ,,,return applicationContext;, ,,},/* *,才能 ,,*,获取对象, ,,*, ,,*,@param name ,,*,@return 对象 ,,*,@throws BeansException ,,*/, public 才能static Object  getBean (String 名称),throws BeansException {, ,,,return applicationContext.getBean(名字),, ,,}, }
尽管,春天提供的后三种方法能够实如今普通的类中继承或实现对应的类或接口来获取弹簧的ApplicationContext对象,可是在使用是一定要注意实现了这些类或接口的普通java类一定要在春天的配置文件ApplicationContext。xml文件里进行配置。否则获取的ApplicationContext对象将为null。
<强>方法六:通过春天提供的ContextLoader 强>
WebApplicationContext wac =, ContextLoader.getCurrentWebApplicationContext (); wac.getBean (beanID);
最后提供一种不依赖于servlet,不须要注入的方式,可是须要注意一点,在服务器启动时.Spring容器初始化时,不能通过下面方法获取春容器,细节能够查看春源代码org.springframework.web.context.ContextLoader。