spring的上下文可以同时获取两个bean。spring项目,在相同的上下文中创建两个springbean。需要在单独的Configuration文件和单独的访问中创建。bean对象的创建,是靠注解,想要在代码里面,不是使用注解获取到bean对象,而是在上下文对象里面获取到bean对象,项目起动,就扫描注解,让被注解的类,创建bean对象,放到spring容器里面,从容器里面获取到对象。
package spring;import java io IOException;import URL;import java util ArrayList;import java util HashMap;import java util List;import java util Map;import jdom Document;import jdom Element;import jdom JDOMException;import jdom input SAXBuilder;import jdom xpath XPath;import vo BeanDefinition;/ 简单模拟spring的ClassPathXmlApplicationContext spring容器管理bean @author zdw /@SuppressWarnings( unchecked )public class MyApplicationContext{ private List<BeanDefinition> list = new ArrayList<BeanDefinition>(); private Map<String Object> sigletons = new HashMap<String Object>(); public MyApplicationContext(String fileName) { this readXML(fileName); try { instanceBeans(); } catch (Exception e) { e printStackTrace(); } } / 实例化所有bean @throws InstantiationException @throws IllegalAccessException @throws ClassNotFoundException / private void instanceBeans() throws InstantiationException IllegalAccessException ClassNotFoundException { for (BeanDefinition bean : list) { if (null != bean getClassName() && bean getClassName() length() > ) sigletons put(bean getId() Class forName(bean getClassName()) newInstance()); } } / 读取xml配置 @param fileName / public void readXML(String fileName) { SAXBuilder builder = new SAXBuilder(); URL url = this getClass() getClassLoader() getResource(fileName); try { Document doc = builder build(url); XPath xpath = XPath newInstance( //ns:beans/ns:bean ); xpath addNamespace( ns ); List<Element> beans = xpath selectNodes(doc); for (Element bean : beans) { String id = bean getAttributeValue( id ); String className = bean getAttributeValue( class ); BeanDefinition beanDefinition = new BeanDefinition(id className); list add(beanDefinition); } } catch (JDOMException e) { e printStackTrace(); } catch (IOException e) { e printStackTrace(); } } / 得到指定id的bean @param id @return / public Object getBean(String id) { return sigletons get(id); }}
测试
@Test public void testMyUserService() { MyApplicationContext ctx = new MyApplicationContext( beans xml ); UserService us = (UserService) ctx getBean( userService ); us print(); } lishixinzhi/Article/program/Java/ky/201311/28759
在使用spring容器的web应用中,业务对象间的依赖关系都可以用spring-contextxml文件来配置,并且由spring容器来负责依赖对象的创建。如果要在servlet中使用spring容器管理业务对象,通常需要使用 WebApplicationContextUtilsgetRequiredWebApplicationContext(getServletContext()) 来获得WebApplicationContext,然后调用WebApplicationContextgetBean("beanName")来获得对象的引用,这实际上是使用了依赖查找来获得对象,并且在servlet代码中硬编码了应用对象的bean名字。
这种方式,相当于把spring容器中的bean加载到了servlet容器中,即把spring中的bean放到webxml的bean中。
以上就是关于spring的上下文可以同时获取两个bean对象吗全部的内容,包括:spring的上下文可以同时获取两个bean对象吗、简单模拟spring的容器管理bean、如何在servlet中获取spring创建的bean等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)