zoukankan      html  css  js  c++  java
  • Spring(二)Bean入门

    原文出自:http://www.cnblogs.com/liunanjava/p/4399387.html

    一、BeanFactory介绍

    1.1、Bean:

    • 在Spring技术中是基于组件的
    • 最基本的是最常用的单元
    • 其实实例保存在Spring的容器当中

    Bean通常被定义在配置文件当中,Bean实例化由Spring的Ioc容器进行管理,Bean的实例可以通过 Beanfactory进行访问,实际上大部分J2EE应用,Bean是通过ApplicationContext来访问的,ApplicationContext是BeanFactory的子接口,功能要比BeanFactory强大许多

    1.2、BeanFactory作用

    • 配置、创建以及管理Bean对象
    • 维持Bean对象之间的依赖关系
    • 负责Bean对象的生命周期

    BeanFactory常用方法:

    •  containsBean(String beanname)
    • Object getBean(String beanName)

    通常使用XmlBeanFactory类来实现

    1.3、ApplicationContext

    • 读取Bean定义文件
    • 维护Bean之间的依赖关系
    • 国际化的支持
    • 资源文件的读取getRource()方法可以轻松读取Rource对象
    • 事件传播
    • 多配置文件加载

    二、Bean定义

    2.1、基本组成

    配置文件

    • <beans/>是Sring配置文件的根节点
    • 一个<beans/>节点里面可以有多个<bean>节点

    定义<bean>节点时,通常要指定两个属性

    id:用来指明bean的标识符,这个标识符具有唯一性,Spring对bean的管理以及bean之间这种依赖关系都需要这个属性

    class: 指明该bean的具体实现类,这里不能是接口(可以是接口实现类)全路径包名.类名

    Bean在Spring容器中两种行为(通过scope来设置默认不写为singelton)

    singleton:单实例模式(默认,构造方法为private),整个Spring的容器中只有一个共享实例存在(singleton)

    non-singelton:每次请求该bean,Spring容器都会新建立一个bean实例,然后返回给程序(request,session,prototype)

    2.2、创建Bean

    Bean的命名:

    按照Java中的命名规范即可,使用清晰的,描述性的,一致的命名规范

    Bean的命名机制:

    id 当在Spring的窗口当中,查找某个Bean对象时,首先根据id进行查找,将其余作为Bean的默认名称,如果ID属性不存在,则根据Name属性进行查找(将其中的第一个名称作为默认的名称),如果ID和NAME都不存在根据类的名称进行查找

    id---------->name--------------->类名

    <bean id="id1" class="实现类"></bean>
    <bean name="id1" class="实现类"></bean>
    <bean  class="实现类"></bean>

    Bean的别名:

    通过alias属性指定:

    <alias name="指定关联的Bean的名称fromname" alias="该关联类的别名的名称toname"/>

    2.3、创建Bean步骤

    创建XML文件----写入配置信息---生成Bean类----加入Bean到配置文件

    三、Bean注入

    3.1、基本类型和String

    • 用到Value元素
    • XML解析器以String类型解析出数据

    如果属性不是String类型,属性值会通过PropertyEditors转换为其他类型

    3.2、注入Bean

     -ref元素进行标识 

    Ref元素通常有两个属性:

    bean:指定不在同一个XML文件中的bean的id

    <bean id="test" class="com.pb.test">
    <property name="user">
    <ref bean="其他的bean的id"/>
    </property>
    </bean>

    local:指定在同一个XML文件中的bean的id

    <bean id="test" class="com.pb.test">
    <property name="user">
    <ref bean="相同的XML文件中的bean的id"/>
    </property>
    </bean>

    value和ref的区别:

    使用ref元素,可以让Spring在部署时验证依赖的Bean是否真实存在

    使用value元素,进行指定仅在创建Bean实例时做验证,会导致错误的延时出现,而且还会带来额外的类型转制开销

    3.3、集合注入

    List:

    复制代码
    <bean id="test" class="com.pb.test">
            <property name="lists">
            <list>
            <value>1</value>
            <value>2</value>
            <value>3</value>
            </list>
            </property>
        </bean>
    复制代码

    Map:

    复制代码
    <bean id="test" class="com.pb.test">
            <property name="map">
                <map>
                    <entry key="key1">
                        <value>value1</value>
                    </entry>
                    <entry key="key2">
                        <value>key2</value>
                    </entry>
                </map>
            </property>
        </bean>
    复制代码

    props:

    复制代码
    <bean id="test" class="com.pb.test">
    <property name="props">
    <props>
    <prop key="key1">value1</prop>
    <prop key="key2">value2</prop>
    </props>
    </property>
    </bean>
    复制代码

    set:

    复制代码
     < property  name ="interest" >    
                 < set >    
                     < value > 唱歌 </ value >    
                     < value > 跳舞 </ value >    
                     < value > 书法 </ value >    
                 </ set >    
        </ property >    
    复制代码

    3.4、自动绑定

    通过autowire属性来设置

    no:默认的。默认为不绑定

    byName:根据属性名称自动进行绑定

    byType:根据属性类型自动进行绑定

    四、Bean的作用域

    • singleton:(单实例模式)spring容器只会存在一个共享的bean实例,并且所有针对该bean的请求只会返回同一个bean实例。
    • propertype(no-singleton):对每一次针对该bean的请求都会生成一个新的bean实例。 相当于java中的new 操作。定义为propertype的bean其生命周期很长,不易回收,通常要额外的处理。
    • request:针对每一次的http请求都会产生一个新的bean实例,Bean仅在当前的http request范围内有效
    • session:针对每一次的http请求都会产生一个新的bean实例,Bean仅在当前的http session范围内有效

    五、Bean管理生命周期

    5.1、Bean的生命周期

    5.2、生命周期管理

    两个时机

    Spring可以管理实例化bean之间以及销毁之前的行为

    注入依赖关系之后:

    • 使用init-method属性:通过指定init- method属性,确定某个方法应该在Bean依赖关系结束之后执行。这种方式无需要将代码与Spring的接口耦合在一起代码污染极小。通常在bean 当中进行方法定义如init()方法,然后在配置文件Bean元素中加入init-method属性来实现这个过程。
    • 实现InnitializingBean接口:这种方式无须指明init-method属性,当窗口依赖注入以后,会自动调用afterPropertiesSet方法,它和init-method执行效果一样,但这种方式属于侵入性的代码设计不推荐使用

    销毁Bean之前:

    •  destroy-method:用于在执行Bean销毁之前所执行的方法,这种方式和init-method一样无压需要代码与Spring的接口耦合在一起代码污染极小。在bean中加入destory-method属性和实现这个过程
    • 实现DisposeableBean接口:无需要指明destory-method属性,当容器依赖注入以后,会自动调用destroty方法,属于侵入性代码设计不推荐使用

    六、Bean的继承

    Bean的继承:

    什么是Bean继承呢?继承是指子bean可以从父bean继承配置信息,也可以覆盖特定的配置信息,或者在父 bean的基础之上加入新的配置信息,其实质类似于java中的子类与父类的继承关系,利用继承可以节省很多配置工作,在实际的项目应用中,共有的配置会 配置成模板,供子bean继承,如果2个bean之间配置信息大致相同,可以采用bean的继承来减少配置工作

    Bean的模板:

    在Spring中既然要将公用的配置,配置成模板,这个模板不需要被实例化,而仅仅作为子bean的模板来使用,但在ApplicationContext或者BeanFactory默认会初始化所有的bean.

    使用abstract属性,该属性可以阻止模板被实例化

    abstract="true"时,表示该bean是抽象的bean,不能被初始化。

  • 相关阅读:
    Java如何编写自动售票机程序
    install windows service
    redis SERVER INSTALL WINDOWS SERVICE
    上传文件
    This problem will occur when running in 64 bit mode with the 32 bit Oracle client components installed.
    解决Uploadify上传控件加载导致的GET 404 Not Found问题
    OracleServiceORCL服务不见了怎么办
    Access to the temp directory is denied. Identity 'NT AUTHORITYNETWORK SERVICE' under which XmlSerializer is running does not have sufficient permiss
    MSSQL Server 2008 数据库安装失败
    数据库数据导出成XML文件
  • 原文地址:https://www.cnblogs.com/vincent-blog/p/4414529.html
Copyright © 2011-2022 走看看