首页>>后端>>Spring->springxml配置bean(spring beansxml)

springxml配置bean(spring beansxml)

时间:2023-12-02 本站 点击:0

Java中如何获取Spring中配置的bean

一 什么是Spring?

Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架

二 如何在程序中获取Spring配置的bean呢?

方法一 在初始化时保存ApplicationContext对象

代码

ApplicationContext ac = new FileSystemXmlApplicationContex( applicationContext xml );     ac getBean( beanId );

ApplicationContext ac = new FileSystemXmlApplicationContex( applicationContext xml );

ac getBean( beanId );说明 这种方式适用于采用Spring框架的独立应用程序 需要程序通过配置文件手工初始化Spring的情况

方法二 通过Spring提供的工具类获取ApplicationContext对象

代码

import sprntext support WebApplicationContextUtils;      ApplicationContext ac = WebApplicationContextUtils                                 getRequiredWebApplicationContext(ServletContext sc)      ApplicationContext ac = WebApplicationContextUtils                                 getWebApplicationContext(ServletContext sc)      ac getBean( beanId );      ac getBean( beanId );   import sprntext support WebApplicationContextUtils;      ApplicationContext ac = WebApplicationContextUtils                                 getRequiredWebApplicationContext(ServletContext sc)      ApplicationContext ac = WebApplicationContextUtils                                 getWebApplicationContext(ServletContext sc)      ac getBean( beanId );      ac getBean( beanId );

方法三 继承自抽象类ApplicationObjectSupport

说明 抽象类ApplicationObjectSupport提供getApplicationContext()方法 可以方便的获取到ApplicationContext Spring初始化时 会通过该抽象类的setApplicationContext(ApplicationContext context)方法将ApplicationContext 对象注入

方法四 继承自抽象类WebApplicationObjectSupport

说明 类似方法三 调用getWebApplicationContext()获取WebApplicationContext

方法五 实现接口ApplicationContextAware

lishixinzhi/Article/program/Java/ky/201311/28587

spring xml配置bean 怎么调用

new一个ClassPathApplication对象,将配置对象的类路径作为参数传入,在调用其getBean方法,将你要调用的bean的id和该bean的class对象作为参数传入就能获取这个bean对象了

Spring BeanDefinition 生成所有bean的配置信息

这个过程会记录下所有的bean定义,这只是定义,还没生成具体的bean。

MapString, RootBeanDefinition mergedBeanDefinitions。

为了不至于每次用到配置信息的时候都去解析一遍配置文件,我们需要将解析结果保存起来。而保存解析结果这个过程就是BeanDefinition的注册。

顺着obtainFreshBeanFactory方法,进入到AbstractRefreshableApplicationContext的refreshBeanFactory方法,这个方法的主要功能就是创建默认的IOC容器和Xml配置文件的相关操作。

执行完,bean定义信息就加载完成了,后面就根据这些定义信息生成bean。

容器启动时,先读取配置文件,如果发现配置文件里设置了扫描注解,则扫描注解生成每个bean的BeanDefinition放入BeanDefinition 容器。再继续读取xml,将配置的bean放入到BeanDefinition 容器中,这样bean定义容器就有了所有的BeanDefinition。

下一步就根据这些bean定义生成bean对象,并注入依赖的bean,如果依赖的bean没有,则继续生成,这样递归下去,知道所有的bean都生成结束。

构造一个IOC容器需要如下几个步骤:

第一步:资源的定位。所谓资源就是指Spring里众多的XML配置文件,要获取到配置文件里面的信息,首先是要找到它。

第二步:加载和解析资源文件。XML文件里面定义的一些节点,和Spring里面定义的数据结构不匹配,那么就需要按照Spring的解析规则将XML解析成Spring需要的。

第三步:将解析完的数据结构注册到IOC容器中。Spring中内部的数据结构叫BeanDefinition。

经过以上三个步骤之后,IOC容器已经构造好,但是还是不能被直接使用。BeanDefinition只是配置文件里的配置在IOC中建立的一个映射,对于IOC容器来说最重要的依赖关系都还没有注入呢,相当于光有一个壳,内容还没有填充。

这里又有个Spring中重要的概念,叫做依赖注入。依赖的意思上文中有提到过吧,就是对象的引用关系嘛,注入是个动词,个人理解为设置,那依赖注入的意思不就是设置对象的引用关系了哇。

接下来这个过程是容器的实例化。容器的实例化只有一步,就是依赖注入。

完成IOC容器的构造和实例化之后,完整的IOC就建立好了。主线分析好了,接下来便可以顺藤摸瓜的学习源码了。

依赖注入主要有两个过程,一个是实例化Bean,另一个是将依赖关系注入到Bean中。

依赖注入的入口是我们熟悉的getBean方法。

spring中读取xml配置文件、获取bean

读取xml文件

/**

* 利用XmlBeanFactory(Resource resource)

* 这里Resource必须是xml格式

* Resource包括 AbstractResource ClassPathResource FileSystemResource

* InputStreamResource ServletContextResource UrlResource

*/

/*

* 利用 InputStreamResource(InputStream inputStream)

* 要将applicationContext xml放在项目根目录下

*/

InputStream is = null;

try {

is = new FileInputStream( applicationContext xml );

} catch (FileNotFoundException e) {

e printStackTrace();

}

Resource resource = new InputStreamResource(is);

BeanFactory factory = new XmlBeanFactory(resource);

UserDao userDao = (UserDao)factory getBean( userDao );

/*

* 利用 Properties

* 要将bean properties放在类路径--源文件夹(src)目录下

*/

具体见

利用ClassPathXmlApplicationContext

可以从classpath中读取XML文件

( ) ApplicationContext context = new ClassPathXmlApplicationContext( applicationContext xml );

UserDao userDao = (UserDao)context getBean( userDao );

( ) ClassPathXmlApplicationContext resource = new ClassPathXmlApplicationContext(new  String[]{ applicationContext ibatis oracle xml applicationContext xml applicationContext data oracle xml });

BeanFactory factory = resource;

UserDao userDao = (UserDao) factory getBean( userDao );

利用ClassPathResource

可以从classpath中读取XML文件

Resource cr = new ClassPathResource( applicationContext xml );

BeanFactory bf=new XmlBeanFactory(cr);

UserDao userDao = (UserDao)bf getBean( userDao );

加载一个xml文件 springframewonfig PropertyPlaceholderConfigurer不起作用

.利用XmlWebApplicationContext读取

从Web应用程序的文件架构中 指定相对位置来读取定义文件

XmlWebApplicationContext 的建构子无法带参数 参考API文件会发现 预设的location会指向/WEB INF/applicationContext xml档案 使用其 public static属性DEFAULT_CONFIG_LOCATION可取得此预设档名 由于我使用MyEclipse 预设会多一个 /WebRoot 的 目录在WEB INF之前 因此若在web project里有一些与web无关的程式要使用context时(例如处理一些MVC架构中的 M 的部份) 就无法使用 XmlWebApplicationContext来读取bean定义档 因为default location会差一个 WebRoot 的目录

即 使在web xml里面 在DispatcherServlet定义中重新定义contextConfigLocation也一样(此定义可以 override掉XmlWebApplicationContext中的DEFAULT_CONFIG_LOCATION值) 因为与web无关的程式 并不会经过web xml的定义档设定 目前我还没试成功过XmlWebApplicationContext取得bean定义档 使用 ClassPathXmlApplicationContext反而会快一些

XmlWebApplicationContext ctx = new XmlWebApplicationContext();

ctx setConfigLocations(new String[] { /WEB INF/ applicationContext xml );

ctx setServletContext(pageContext getServletContext());

ctx refresh();

UserDao  userDao = (UserDao ) ctx getBean( userDao );

利用FileSystemResource读取

Resource rs = new FileSystemResource( D:/tomcat/webapps/test/WEB INF/classes/ applicationContext xml );

BeanFactory factory = new XmlBeanFactory(rs);

UserDao  userDao  = (UserDao )factory getBean( userDao );

值得注意的是 利用FileSystemResource 则配置文件必须放在project直接目录下 或者写明绝对路径 否则就会抛出找不到文件的异常

.利用FileSystemXmlApplicationContext读取

可以指定XML定义文件的相对路径或者绝对路径来读取定义文件

方法一

String[]   path={ WebRoot/WEB INF/applicationContext xml WebRoot/WEB INF/applicationContext_task xml };

ApplicationContext context = new FileSystemXmlApplicationContext(path);

方法二

String path= WebRoot/WEB INF/applicationContext* xml ;

ApplicationContext context = new FileSystemXmlApplicationContext(path);

方法三

ApplicationContext ctx =

new FileSystemXmlApplicationContext( classpath:地址 );

没有classpath的话就是从当前的工作目录

*******************************************************************************

**         分割一下                                                                                                            **

*******************************************************************************

获取Spring框架管理的类实例的方法有多种 如下

方法一 在初始化时保存ApplicationContext对象

代码

ApplicationContext ac = new FileSystemXmlApplicationContext( applicationContext xml );

ac getBean( beanId );

说明

这种方式适用于采用Spring框架的独立应用程序 需要程序通过配置文件手工初始化Spring的情况

方法二 通过Spring提供的工具类获取ApplicationContext对象

代码

import sprntext support WebApplicationContextUtils;

ApplicationContext ac =

WebApplicationContextUtils getRequiredWebApplicationContext(ServletContext sc)

ApplicationContext ac = WebApplicationContextUtils getWebApplicationContext(ServletContext

sc)

ac getBean( beanId );

ac getBean( beanId );

说明

这种方式适合于采用Spring框架的B/S系统 通过ServletContext对象获取ApplicationContext对象 然后

在通过它获取需要的类实例

上面两个工具方式的区别是 前者在获取失败时抛出异常 后者返回null

方法三 继承自抽象类ApplicationObjectSupport

说明

抽象类ApplicationObjectSupport提供getApplicationContext()方法 可以方便的获取到 ApplicationCont

ext Spring初始化时 会通过该抽象类的setApplicationContext(ApplicationContext

context)方法将ApplicationContext 对象注入

方法四 继承自抽象类WebApplicationObjectSupport

说明

类似上面方法 调用getWebApplicationContext()获取WebApplicationContext

方法五 实现接口ApplicationContextAware

说明

实现该接口的setApplicationContext(ApplicationContext context)方法 并保存ApplicationContext 对

象 Spring初始化时 会通过该方法将ApplicationContext 对象注入

以上方法适合不同的情况 请根据具体情况选用相应的方法

这里值得提一点的是 系统中用到上述方法的类实际上就于Spring框架紧密耦合在一起了 因为这些类是知

道它们是运行在Spring框架上的 因此 系统中 应该尽量的减少这类应用 使系统尽可能的独立于当前运

行环境 尽量通过DI的方式获取需要的服务提供者

lishixinzhi/Article/program/Java/ky/201311/28302

spring配置的bean怎么获取

通过xml配置文件

bean配置在xml里面,spring提供多种方式读取配置文件得到ApplicationContext.

第一种方式:FileSystemXmlApplicationContext

通过程序在初始化的时候,导入Bean配置文件,然后得到Bean实例:

ApplicationContext ac = new FileSystemXmlApplicationContext(applicationContext.xml)

ac.getBean(beanName);

第二种方式:WebApplicationContextUtil

Spring xml配置bean

import一般用于团队开发使用,可以将多个配置文件,导入合并为一个。

假设,现在项目中有多个人开发,这三个人负责不同的类的开发,不同的类需要注册在不同的bean中,文名可以利用import将所有人的beans.xml合并为一个总的!

    1. 张三 bean1.xml

    2. 李四 bean2.xml

    4.在总的applicationContext.xml中:


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:/Spring/10012.html