spring的IOC灰常的强大。。特别是管理Web项目中的自动加载。
但是实际应用中,可能会碰到这样两类的问题:
1.写UnitTest的时候,需要脱离容器,手动读取xml文件加载bean。
2.在一个Web容器中,可能某个脱离了spring管理(也就是一个非bean)的类,需要感知并读取某个spring容易的bean。
下面转了2篇文章,分别是对应上面2个问题的解决方案。
壹壹壹壹壹壹壹壹壹壹壹壹壹壹壹壹壹壹壹壹壹壹壹壹壹壹壹壹壹壹壹壹壹壹壹壹壹壹壹壹壹壹
http://hi.baidu.com/%C9%CF%B5%DB%D2%B2%B7%B8%C0%A7/blog/item/f934474a104c3e2008f7ef66.html
Spring中读取bean配置文件的几种方式
BeanFactory允许InputStream作为构造函数的参数,也可以org.springframework.core.io.Resource接口。下面这个例子是用ClassPathResource作为参数:
Resource resource = new ClassPathResource("bean.xml"); BeanFactory factory = new XmlBeanFactory(resource); ActionBean action = (ActionBean) factory.getBean("actionBean"); |
如果同一个Bean在配置文件有多个bean的定义,则用下面的方法取得所有的对象:
Resource resource = new ClassPathResource("bean.xml"); ListableBeanFactory factory = new XmlBeanFactory(resource); Map helloBeans = factory.getBeansOfType(ActionBean.class, false, false); |
BeanDefinitionRegistry reg = new DefaultListableBeanFactory(); XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(reg); // 載入bean定義檔 reader.loadBeanDefinitions(new ClassPathResource("bean1.xml")); reader.loadBeanDefinitions(new ClassPathResource("bean2.xml")); .... // 取得Bean BeanFactory bf = (BeanFactory) reg; Object o = bf.getBean("actionBean"); |
===================================================================
在读spring in aciton 时,他用的BeanFactory factory = new XmlBeanFactory(new FileInputStream("hello.xml"));
可是现在的用的1.2.6版本的构造器(XmlBeanFactory)只能接收Resource接口了,所以调不出来是正常的事情,假设现在有一个文件hello.xml
读取方法
1:ApplicationContext cx=new FileSystemXmlApplicationContext("hello.xml");//指定的路径去找文件
2:ApplicationContext factory = new ClassPathXmlApplicationContext("hello.xml");//还会在classpath去找
3:Resource fa = new FileSystemResource("hello.xml");
BeanFactory factory=new XmlBeanFactory(fa);
4:这个要设制classpath了,麻烦
Resource res = new ClassPathResource("com/springinaction/chapter01/hello/hello.xml");
BeanFactory factory=new XmlBeanFactory(res);
好了,用了上面那种方法都可以调用getBean("your bean name")了,
eg: BeanFactory factory=new XmlBeanFactory(fa);
hello he=(hello)factory.getBean("hello");
he.getHello();
================================================================================
贰贰贰贰贰贰贰贰贰贰贰贰贰贰贰贰贰贰贰贰贰贰贰贰贰贰贰贰贰贰贰贰贰贰贰贰贰贰贰贰贰贰贰
http://babycountry.spaces.live.com/blog/cns!18767b1e2eb6d0e1!236.entry
spring 读取注册bean的一些方法(转)
一:方法一(多在struts框架中)继承BaseDispatchAction
1 | com.mas.wawacommunity.wap.web.action; org.apache.struts.action.ActionForm; org.apache.struts.action.ActionForward; org.apache.struts.action.ActionMapping; org.apache.struts.action.ActionServlet; org.apache.struts.actions.DispatchAction; org.springframework.web.context.WebApplicationContext; org.springframework.web.context.support.WebApplicationContextUtils; com.mas.wawacommunity.wap.service.UserManager; BaseDispatchAction DispatchAction WebApplicationContext ctx; UserManager userMgr; Object (String beanName) (beanName); ActionForward (ActionMapping mapping, ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) (); (ActionServlet servlet) this.servlet = servlet; this.ctx = (()); this.userMgr = (UserManager) (); |
action调用:
1 | com.mas.wawacommunity.wap.web.action; javax.servlet.http.HttpServletRequest; javax.servlet.http.HttpServletResponse; org.apache.struts.action.ActionForm; org.apache.struts.action.ActionForward; org.apache.struts.action.ActionMapping; org.apache.struts.action.ActionServlet; com.mas.wawacommunity.wap.model.News; com.mas.wawacommunity.wap.service.NewsManager; NewsAction BaseDispatchAction NewsManager newsManager; (ActionServlet servlet) (servlet); newsManager = (NewsManager) (); ActionForward (ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse resp) category = (request, , ); pageNo = (request, , ); pageSize = (request, , ); PageRoll pageRoll = (category, pageNo, pageSize); (, pageRoll); (); |
二:方法二实现BeanFactoryAware
1 | com.anymusic.oa.commons.service; org.springframework.beans.BeansException; org.springframework.beans.factory.BeanFactory; org.springframework.beans.factory.BeanFactoryAware; ServiceLocator BeanFactoryAware BeanFactory beanFactory = ; ServiceLocator servlocator = ; (BeanFactory factory) BeansException this.beanFactory = factory; BeanFactory () beanFactory; ServiceLocator () (servlocator == ) servlocator = (ServiceLocator) (); servlocator; Object (String servName) (servName); Object (String servName, Class clazz) (servName, clazz); |
action调用:
1 | com.anymusic.oa.webwork; java.util.List; java.util.Map; javax.servlet.http.HttpServletRequest; com.anymusic.oa.commons.service.ServiceLocator; com.anymusic.oa.hibernate.pojo.Role; com.anymusic.oa.hibernate.pojo.Users; com.anymusic.oa.spring.IUserService; com.opensymphony.webwork.ServletActionContext; com.opensymphony.xwork.Action; com.opensymphony.xwork.ActionContext; com.opensymphony.xwork.ModelDriven; UserAction BaseAction Action,ModelDriven Users user = (); ServiceLocator service = (); UserService userService = (UserService)(); String () Exception SUCCESS; Object () user; String () HttpServletRequest request = (); List ls=( Users.class ); (,ls); (); SUCCESS; |
三:方法三实现ApplicationContextAware
1 | com.easou.framework.common.util; org.springframework.beans.BeansException; org.springframework.beans.factory.NoSuchBeanDefinitionException; org.springframework.context.ApplicationContext; org.springframework.context.ApplicationContextAware; SpringContextUtil ApplicationContextAware ApplicationContext applicationContext; (ApplicationContext applicationContext) BeansException SpringContextUtil.applicationContext = applicationContext; ApplicationContext () applicationContext; Object (String name) BeansException (name); Object (String name, Class requiredType) BeansException (name, requiredType); (String name) (name); (String name) NoSuchBeanDefinitionException (name); Class (String name) NoSuchBeanDefinitionException (name); String[] (String name) NoSuchBeanDefinitionException (name); |
action调用:
1 | com.anymusic.oa.webwork; java.util.List; java.util.Map; javax.servlet.http.HttpServletRequest; com.anymusic.oa.commons.service.ServiceLocator; com.anymusic.oa.hibernate.pojo.Role; com.anymusic.oa.hibernate.pojo.Users; com.anymusic.oa.spring.IUserService; com.opensymphony.webwork.ServletActionContext; com.opensymphony.xwork.Action; com.opensymphony.xwork.ActionContext; com.opensymphony.xwork.ModelDriven; UserAction BaseAction Action,ModelDriven Users user = (); UserService userService = (UserService) (); String () Exception SUCCESS; Object () user; String () HttpServletRequest request = (); List ls=( Users.class ); (,ls); (); SUCCESS; |