IoC容器配置Bean(3)

来源:互联网 发布:手机淘宝旺旺名怎么改 编辑:程序博客网 时间:2024/06/05 09:20
<bean>之间的关系:
        1)继承:        <!--定义一个抽象的bean,抽象的原因是为了不让他实例化此Bean-->        <bean id="abstractCar" class="com.baobaotao.tagdepend.Car" p:brand="红旗CA72" p:price="20000.00" p:color="黑色" abstract="true"/>        <bean id="car3" p:color="红色" parent="abstractCar"/>        <bean id="car4" p:color="白色" parent="abstractCar"/>        2)依赖:        一般情况下,使用<ref>元素来建立对其他的Bean的依赖关系,spring负责管理这些Bean的关系。当实例化一个Bean时,spring保证该Bean所依赖的其他Bean都已经初始化。Spring允许用户使用depends-on属性指定Bean前置依赖的Bean,前置依赖的Bean会在本Bean实例化之前创建好:        <bean id="manager" class="com.baobaotao.tagdepend.CacheManager" depends-on="sysInit"/>        <bean id="sysInit" class="com.baobaotao.tagdepend.sysInit"/>        3)引用:        假设一个<bean> 要引用另一个<bean>的id属性值,我们可以使用以下的配制方式:                <bean id="car" class="com.baobaotao.tagdepend.Car"/>                <bean id="boss" class="com.baobaotao.tagdepend.Boss">                         <property name="carId">                                <idref bean="car"/>                        </property>                </bean>
整合多个配置文件:
        对一个大型应用来说可能有多个XML配置文件,在启动Spring容器时,可以通过一个Spring数组指定这些配置文件。Spring通过<import>将多个配置文件引入
到一个文件中,进行配置文件的集成。这样在启动Spring容器时,仅仅需要指定这个合并好的配置文件就可以。例如在bean2.xml中引入bean1.xml:
        <import resource="classpath:com/baobaotao./impt/beans1.xml"/>        <bean id="boss1" class="com.baobaotao.fb.Boss" p:name="John" p:car-ref="car1"/>        <bean id="boss2" class="com.baobaotao.fb.Boss" p:name="John" p:car-ref="car2"/>
        假设我们已经在bean1.xml中配置了car1和car2的Bean,那么就可以加载配置成功。

Bean的作用域:
        有5中作用域类型:
                singleton:Bean以单例方式存在
                prototype:每次从容器中调用Bean时,都会返回一个新的实例
                request:每次Http请求都会返回一个新的Bean
                session:同一个Http Session共享一个Bean,不同的使用不同的Bean
                globalSession:同一个全局Session共享一个Bean

        singleton作用域:
                Singleton中的Bean在同一Spring IoC容器中只有一个实例:
                <bean id="car" class="com.baobaotao.scope.Car" scope="singleton"/>                <bean id="boss1" class="com.baobaotao.scope.Boss" p:car-ref="car"/>                <bean id="boss2" class="com.baobaotao.scope.Boss" p:car-ref="car"/>                <bean id="boss3" class="com.baobaotao.scope.Boss" p:car-ref="car"/>
        在容器内部boss1,boss2,boss3的car属性都指向同一个Bean

        prototype作用域:
                与采用singleton相反,每次都会创建新的Bean:
                <bean id="car" class="com.baobaotao.scope.Car" scope="prototype"/>                <bean id="boss1" class="com.baobaotao.scope.Boss" p:car-ref="car"/>                <bean id="boss2" class="com.baobaotao.scope.Boss" p:car-ref="car"/>
                容器内部boss1,boss2的car属性分别创建一个新的Bean供自己使用。
        Web应用环境相关的Bean作用域:
                在使用Spring的WebApplicationContext时,还需要使用另外三种Bean的作用域:request、session和globalsession。在使用这些作用域之前,必>须在Web容器中添加额外的配置。
                我们需要通过ContextLoaderListener(或者ContextLoaderServlet)将Web容器与Spring容器整合。
                在整合spring容器时使用ContextLoaderListener,实现ServletContextListener监听接口,ServletContextListener只负责监听Web容器启动和和关>闭的事件。RequestContextListener实现ServletRequestListener监听器接口,该监听器监听HTTP请求时间,Web服务器接受的每一次请求都会通知该监听器。

基于注解的配置:
        使用注解定义Bean:Spring容器成功启动的三大要件是:Bean定义信息、Bean实现类以及Spring本身。我们使用@Component注解在类声明处进行标注,它可>以被Spring容器识别,Spring容器自动将POJO转换为容器管理的Bean。例如:
                package com.baobaotao.anno;                import org.springframework.stereotype.Component;                @Component("UserDao")                public class UserDao{                        ...                }                以上代码等效于:                <bean id="userDao" class="com.baobaotao.anno.UserDao"/>
        spring容器提供了三个功能基本和@Conponent等效的注解,他们分别用于对DAO、Service以及Web层的Controller进行注解:
                        @Repository:用于对DAO实现类进行标注
                        @Service:用于对Service实现类进行标注
                        @Controller:用于对Controller实现类进行标注
`       我们可以通过context命名空间的component-scan的base-package属性指定一个需要扫描的基类包,spring容器会自动扫描这个基类包内的所有类,并从类的
注解信息中获取Bean的定义信息。


0 0
原创粉丝点击