spring的上下文可以同时获取两个bean对象吗

spring的上下文可以同时获取两个bean对象吗,第1张

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等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/9842700.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存