美文网首页
spring获取容器里的bean

spring获取容器里的bean

作者: jihe_lunlixue | 来源:发表于2017-09-07 18:44 被阅读0次

    1.获取bean的方式

    1.BeanFactory有很多实现类,通常使用org.springframework.beans.factory.xml.XmlBeanFactory类来获取bean。

    2.但对于大部分J2EE应用而言,推荐使用ApplicationContext.即从context中获取bean。

     ApplicationContext是BeanFactory的子接口,其常用实现类是org.springframework.context.support.FileSystemXmlApplicationContext和org.springframework.context.support.ClassXmlAplicationContext。

    Springr的配置信息通常采用XML配置文件来设置,因此,创建BeanFactory实例时,应该提供XML配置文件作为参数。

    2.ApplicationContext常用的加载context文件的方法

    1、FileSystemXmlApplicationContext

    这个方法是从文件绝对路径加载配置文件,例如:

    ApplicationContext ctx = new FileSystemXmlApplicationContext( "G:/Test/applicationcontext.xml ");

    如果在参数中写的不是绝对路径,那么方法调用的时候也会默认用绝对路径来找,我测试的时候发现默认的绝对路径是eclipse所在的路径。

    采用绝对路径的话,程序的灵活性就很差了,所以这个方法一般不推荐。

    (如果要使用classpath路径,需要加入前缀classpath:)

    2、ClassPathXmlApplicationContext

    这个方法是从classpath下加载配置文件(适合于相对路径方式加载),例如:

    ApplicationContext ctx = new ClassPathXmlApplicationContext( "/applicationcontext.xml ");

    该方法参数中classpath:前缀是不需要的,默认就是指项目的classpath路径下面;这也就是说用ClassPathXmlApplicationContext时默认的根目录是在WEB-INF/classes下面,而不是项目根目录。这个需要注意!

    3、XmlWebApplicationContext

    专为web工程定制的方法,推荐Web项目中使用。例如:

    ServletContext servletContext = request.getSession().getServletContext();

    ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(servletContext);

    3、三种获取contex的区别

    3.1 ClassPathXmlApplicationContext使用方法

    ClassPathXmlApplicationContext 默认会去 classPath 路径下找。classPath 路径指的就是编译后的 classes 目录。

    示例:

    @TestpublicvoidtestBean(){

    //单配置文件方式一

    BeanFactory beanFactory=newClassPathXmlApplicationContext("applicationContext.xml");

    //单配置文件方式二

    BeanFactory beanFactory=newClassPathXmlApplicationContext("classpath:applicationContext.xml");

    //多个配置文件

    BeanFactory beanFactory=newClassPathXmlApplicationContext(newString[]{"applicationContext.xml"});

    //绝对路径需加“file:”前缀

    BeanFactory beanFactory=newClassPathXmlApplicationContext("file:E:\Workspace\idea_workspace\spring\springtest\src\main\resources\applicationContext.xml");    TestBean bean= (TestBean) beanFactory.getBean("testBean");   

     assertEquals("testStr",bean.getTestStr());}

    运行示例你会发现 “classpath:” 是可以缺省的。

    如果是绝对路径,就需要加上 “file:” 前缀,不可缺省。

    3.2 FileSystemXmlApplicationContext使用方法

    FileSystemXmlApplicationContext 默认是去项目的路径下加载,可以是相对路径,也可以是绝对路径,若是绝对路径,“file:” 前缀可以缺省。

    示例:

    @TestpublicvoidtestBean(){

    //classes目录

    BeanFactory beanFactory=newFileSystemXmlApplicationContext("classpath:applicationContext.xml");

    //项目路径相对路径

    BeanFactory beanFactory=newFileSystemXmlApplicationContext("src\\main\\resources\\applicationContext.xml");

    //多配置文件

    BeanFactory beanFactory=newFileSystemXmlApplicationContext(newString[]{"src\\main\\resources\\applicationContext.xml"});

    //绝对目录

    BeanFactory beanFactory=newFileSystemXmlApplicationContext(newString[]{"E:\\Workspace\\idea_workspace\\spring\\springtest\\src\\main\\resources\\applicationContext.xml"});    TestBean bean= (TestBean) beanFactory.getBean("testBean");    assertEquals("testStr",bean.getTestStr());}

    3.3 XmlWebApplicationContext

    专为web工程定制的方法,推荐Web项目中使用。

    相关文章

      网友评论

          本文标题:spring获取容器里的bean

          本文链接:https://www.haomeiwen.com/subject/outwjxtx.html