spring学习日志之二Bean的配置的细节和解析

    xiaoxiao2026-08-22  5

    1,Spring容器原理概述

    Bean配置信息定义了Bean的实现以及依赖关系,Spring容器根据各种形式的Bean配置信息在容器内部建立Bean定义注册表,然后根据注册表加载、实例化Bean,并建立Bean和Bean的依赖关系,最后将这些准备就绪的Bean放到Bean的缓存池中,以供外层的应用程序调用。

    2 ,Spring的依赖注入

    1)       属性注入,例子:

    <propertyname=”attributeName”><value>value</value></property>

    2)       构造函数注入,例子:

    <constructor-argtype=”double”><value>value</value></ constructor>

    3)       工厂方法注入,例子:

    <beanid=”carFactory” class=”mvn.CarFactory”>

    <beanid=”car2” factory-bean=”carFactory”factory-method=”createHongQiCar”>

    3 ,Bean的引用

    <ref>元素可以通过以下三个属性引用容器中其他的Bean。

    1)       bean:通过该属性可以引用同一容器或者父容器的Bean,这是最常见的形式

    2)       local:通过该属性只能引用统一配置文件中的Bean,它可以利用XML解析器自动检验引用的合法性,以便在开发编写配置时就能够及时发现并纠正配置的错误。

    3)       parent:引用父容器中的Bean,如<ref parent=”car”>的配置说明car的Bean是父容器的Bean

    4 ,Bean的作用域

    类别

    说明

    singleton

    在Spring 的IOC容器中仅存一个Bean实例,Bean以单实例的方式存在

    prototype

    每次从容器中调用调用Bean时,都返回一个新的实例,即每次调用getBean()时,相当于执行new XXBean()的操作

    request

    每次HTTP请求都会创建一个新的Bean,该作用域仅适用于WebApplicationContext环境

    session

    同一个HTTP Session共享一个Bean,不同HTTP Session使用不同的Bean,该作用域仅适用于WebApplicationContext环境

    globalSession

    同一个全局Session共享一个Bean,一般用于Portlet应用环境,该作用域仅适用于WebApplicationContext

     

    5,Spring的一些小知识

    1)       Spring配置文件不允许出现两个相同id的<bean>,但却可以出现两个相同name的<bean>,如果多个name相同的<bean>通过getBean获取Bean时,将返回后面声明的那个Bean,原因是后面声明的Bean覆盖了前面的同名Bean。

    2)       如果一个Bean的id和name都未指定,Spring将自动将全限定类名作为Bean的名称。

    3)       当两个Bean存在循环依赖的问题时,可以通过修改Bean的代码,将构造函数注入的方式调整为属性注入的方式就行了。

    4)       Spring的XML属性注入时,设置null值一定要用<null/>标签。

    5)       在Spring环境下,对于所有的Dao类都可以采用单实例模式,因为Spring利用AOP和LocalThread的功能,对非线程安全的变量进行了特殊的处理,使这些非线程安全的类变成了线程安全的类。

    6)       当一个request作用域的car Bean被一个singleton作用域的boss Bean引用时,为了让boss能够从适当作用域中获取的car Bean的引用,需要使用Spring AOP的语法为car Bean配置一个代理类。

    7)       Java语言智能对接口提供自动代理,如果需要对类进行动态代理,就需要使用CGLib为类生成动态代理的子类。

    转载请注明原文地址: https://ju.6miu.com/read-1311449.html
    最新回复(0)