zoukankan      html  css  js  c++  java
  • 《Spring2.0 技术手册》读书笔记三Bean定义文件的配置与读取

    通过前两篇笔记知道Spring是通过配置文件来管理应用组件-Bean的。那本篇详解Bean配置文件!

    对Spring的使用分为两步: 定义各类;配置类、及类间的依赖关系。配置文件是往往是一个xml文件,在主程序中,我们有以下两种方法来读取xml配置文件并根据配置文件来初始化Bean。

    方法一:

    其中Resource和BeanFactory均为接口,ClassPathResource、FileSystemResource、InputStreamResource、ServletContextResource、UrlResource实现了Resource接口。XmlBeanFactory实现了BeanFactory接口,XmlBeanFactory只接受实现Resource接口的对象。在这里,BeanFactory就是Spring提供的IoC容器,负责读取Bean定义文件;管理对象的加载、生成;维护Bean对象间的依赖关系;负责Bean的生命周期。然后通过getBean()方法取得Bean实例。

    注意:使用BeanFactory,只有在真正需要Bean对象时,才会建立实际的Bean实例,而不是在一开始建立BeanFactory时就建立Bean实例。

    BeanFactory接口提供了6种方法有:

    boolean containsBean(String):测试BeanFactory是否包含指定名称的Bean。

    Object getBean(String):指定Bean定义文件中设置的Bean的id,取得对应的Bean实例。

    Object getBean(String,Class):获得相应Bean实例,并转换为指定的类。

    Class getType(String):获得相应Bean的Class实例。

    boolean isSingleton(String):测试对应Bean的scope是否为singleton,即容器只有一个此Bean的实例。

    String[] getAliases(String):取得对应Bean的所有别名。 

    方法二:

     

    BeanFactory只是管理Bean的容器,若要使用Spring的一些特色及高级容器功能,就需要使用ApplicationContext。它是一个接口,基于BeanFactory建立,除具备读取Bean定义文件,维护Bean间关系外,还提供了应用程序所需要的更完整的框架功能,如:更方便的取得资源文件、提供解析文字消息的方法、支持国际化消息、可以发布事件等。

    实现此接口的类有:FileSystemXmlApplicationContext-指定xml定义文件的相对路径或绝对路径来读取xml文件;ClassPathXmlApplicationContext-从classpath下读取xml文件,即源代码所在根目录;XmlWebApplicationContext-在web应用程序的文件架构中,指定相对位置读取定义文件。 

    下面详解Bean定义文件

    Bean的实例化:

     

    在代码中调用applicationContext.getBean("bean1")方法均可获得XXXBean1的实例。

    Bean的scope和别名

    从BeanFactory或ApplicationContext取得的实例默认为Singleton模式。


     

    Bean定义的继承

    在Bean定义文件中,可能会许多Bean都有相同的属性,且大部分设置都是相同的值,这时就可以考虑继承某个Bean定义,省去相同的设置。有两种继承设置方法-抽象继承和实例继承:

     

    通过getBean("someBean")方法获得Bean实例中属性name为Jack,age为18。注意:Bean的属性设置有两种形式,一个是通过<property>标签的子标签<value>设置,一个是通过<property>标签的value属性设置。其中value均可改为ref,属性的值是对另外一个Bean实例的引用。

    Bean的依赖设置

    上篇已经介绍了依赖注入的三种方法,Spring中主要使用设置注入:通过<property>标签来设置依赖关系。也可以使用构造函数注入

    ,前提是类中需要有包含相应参数的构造函数。

     

    类HelloBean中有属性String name,int age;构造函数HelloBean(String,int)。也可以使用<constructor-arg>标签的属性name指定对应的构造函数的参数。name/index都不使用,就必须保证定义文件中的参数顺序与构造函数的参数顺序保持一致。

    <constructor-arg>的type属性可以指定参数的类型。如果参数不是基本类型,也可以用ref来代替value,指向某个类的实例(<ref bean=""/>或者使用constructor-arg的属性ref)。

    引用设置

    前面都提到了ref标签或者ref属性,下面详写例子如下:value用于指定字符串或基本数据类型

    ref用于设置属性引用某个实例

    如果Bean1实例化前要求Bean2必须先实例化,可以设置如下:

    自动绑定:

    自动绑定是指不用使用<value><ref><bean class="">标签来显式指定属性引用某对象或值,而让容器自动将符合Bean中属性

    类型的其他Bean实例绑定到属性上。这虽然简化了配置,但是可读性减弱,不鼓励使用在spring 2.0以后,自动绑定就做了限制,不支持

    符串、基本类型、类(简单类型的数组)的自动绑定。

    集合对象的设置:

    对数组、java.util.List、java.util.Set、java.util.Map、java.util.Properties等集合对象的注入,如下:

    使用util标签简化,如下:

    Look Up 方法注入

    如上,类MessageManager中的方法createMessage可以为抽象没有实现的,如果类中调用此方法,则返回sysMessage实例。

    多个bean定义文件读取

    ApplicationContext可以读取多个Bean定义文件,

    也可以在配置文件中进行设置,代替代码中的实现

  • 相关阅读:
    2003开机自动登陆然后马上锁定计算机
    修改DNS、网关的VBS代码,不需重起即时生效
    页面自动刷新代码
    dos命令给权限
    无法运行VBS代码
    去掉2003或2kserver版的系统启动报错
    让易语言的信息框总在最前
    教你轻松搞定RJ45网线接头
    小技巧:如何设定永久通用WinRAR压缩密码
    Bootstrap入门教程
  • 原文地址:https://www.cnblogs.com/whuqin/p/4982117.html
Copyright © 2011-2022 走看看