参考书籍《Spring 3.x企业应用开发与实践》
-
Bean配置信息是Bean的元数据信息,由以下4个方面组成
- Bean的实现类
- Bean的属性信息,如数据库的连接数、用户名、密码
- Bean的依赖关系,Spring根据依赖关系配置完成Bean之间的装配
- Bean的行为配置,如生命周期范围及生命周期各过程的回调函数。
-
Spring通过一个配置文件描述Bean及Bean之间的依赖关系,利用Java反射功能实例化Bean并建立Bean之间的依赖关系。Spring的Ioc容器在完成这些底层工作的基础上,还提供了Bean实例缓存、生命周期管理、Bean实例代理、事件发布、资源装载等高级服务。
- BeanFactory是Spring框架最核心的接口,它提供了高级Ioc的配置机制。
- ApplicationContext建立在BeanFactory之上,面向开发者,一般称为Spring容器。
在IoC容器中装配Bean
- JavaBean属性名命名规范:变量前两个字母要么全小写,要么全大写。
- Bean作用域:在Spring环境下,对于所有的Dao类都可以采用单例模式,因为Spring利用AOP和LocalThread的功能,对非线程安全的变量(或称状态量)进行了特殊的处理,使这些非线程安全的类变成了线程安全的类。
-
Web相关的作用域的Bean注入到singleton或prototype的Bean时存在作用域依赖的问题,此时通过Spring AOP创建动态代理,这个动态代理是Car类的子类,Spring给它添加一段逻辑,通过判断当前Boss位于哪个线程中,让Boss Bean引用到对应线程HTTP请求的car Bean。
【图aop】
<bean id="car" class="com.baobaotao.scope.Car" scope="request" >
<aop:scoped-proxy/>
</bean>
<bean id="boss" class="com.baobaotao.scope.Boss" p:car-ref="car" >
<prototype name="car" ref="car"/>
</bean>
<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" />
<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" />
<bean id="boss3" class="com.baobaotao.scope.Boss" p:car-ref="car" />
-
各种配置方式比较
版权声明:本文为qq_24145735原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。