Spring学习笔记——Spring中lazy-init与abstract具体解释
Spring的懒载入的作用是为了避免无谓的性能开销,就是当真正须要数据的时候才去运行数据的载入操作。不只在Spring中。我们在实际的编码过程中也应该借鉴这种思想,来提高我们程序的效率。
首先我们看一段配置文件:
<beans>
<bean>
<bean id="creditService" type="com.jader.service.CreditServiceImpl" lazy-init="true"/>
<bean id="lendService" type="com.jader.service.LendServiceImpl" lazy-init="false"/>
</bean>
</beans>
当IOC容器启动时,createService不会被实例化,而lendService会被实例化,可是有以下一种情况
<beans>
<bean>
<bean id="creditService" type="com.jader.service.CreditServiceImpl" lazy-init="true"/>
<bean id="lendService" type="com.jader.service.LendServiceImpl" lazy-init="false">
<property name="creditService" ref="creditService"/>
</bean>
</bean>
</beans>
当容器启动时,lendService会被实例化。可是lendService持有对creditService的引用,此时。creditService也会被实例化。正如開始说的那样。懒载入就是当真正须要数据的时候才去运行数据的载入。
讲到这里,我们顺便说说一个lazy-init相似的属性abstract,当某个bean的class被设置为abstract=”true”时。这个class始终不会被实例化。而充当一个模板的作用,以下我们详细分析一个样例:
<!-- 配置daoTemplate,作为全部DAO组件的模板 -->
<bean id="daoTemplate" abstract="true">
这个bean非常明显没有配置class属性,当没有配置class属性时,我们必须显式的将abstract标记为true。子bean能够继承父bean属性,也能够覆盖。
一个子bean定义能够从父bean继承构造器參数值、属性值以及覆盖父bean的方法,并且能够有选择地添加新的值。
假设指定了init-method,destroy-method和/或静态factory-method,它们就会覆盖父bean对应的设置。剩余的设置将总是从子bean定义处得到:依赖、自己主动装配模式、依赖检查、singleton、作用域和延迟初始化。
<bean id="inheritedTestBeanWithoutClass" abstract="true">
<property name="name" value="parent"/>
<property name="age" value="1"/>
</bean>
<bean id="inheritsWithClass" class="org.springframework.beans.DerivedTestBean"
parent="inheritedTestBeanWithoutClass" init-method="initialize">
<property name="name" value="override"/>
<!-- age will inherit the value of 1 from the parent bean definition-->
</bean>
因为这种父bean是不完整的,并且还被显式标记为抽象的,因而它无法得到自己的实例。抽象bean定义可作为子bean定义的模板。若要尝试单独使用这种父bean(比方将它作为其它bean的ref属性而引用。或者直接使用这个父bean的id作为參数调用getBean()方法)。将会导致错误。相同地。容器内部的preInstantiateSingletons()方法会全然忽略abstract的bean定义。
假设你有一个(父)bean定义你希望只作为模版使用,而这个定义说明了一个类,你必须把abstract參数设置为true,否则应用程序上下文将试图预先初始化它
Spring学习笔记——Spring中lazy-init与abstract具体解释的更多相关文章
- Spring学习笔记--spring+mybatis集成
前言: 技术的发展, 真的是日新月异. 作为javaer, 都不约而同地抛弃裸写jdbc代码, 而用各种持久化框架. 从hibernate, Spring的JDBCTemplate, 到ibatis, ...
- Spring学习笔记--Spring IOC
沿着我们上一篇的学习笔记,我们继续通过代码学习IOC这一设计思想. 6.Hello类 第一步:首先创建一个类Hello package cn.sxt.bean; public class Hello ...
- Spring学习笔记—Spring之旅
1.Spring简介 Spring是一个开源框架,最早由Rod Johnson创建,并在<Expert One-on-One:J2EE Design and Development> ...
- Spring学习笔记——Spring中的BeanFactory与FactoryBean
BeanFactory BeanFactory是Spring的org.springframework.beans.factory下的一个接口,是Spring IOC所遵守的基本编程规范.他的实现类有D ...
- Spring学习笔记--Spring配置文件和依赖注入
Spring配置文件 1.alias:设置别名,为bean设置别名,并且可以设置多个别名; <!-- 设置别名 --> <alias name="user" al ...
- Spring学习笔记--Spring简介
1.spring:给软件行业带来了春天; 2.spring的理念:spring框架的初衷是使的现有的更加实用,spring不是创造轮子(技术或框架),而是使现有的轮子更好的运转;spring本身是一个 ...
- Spring学习笔记——Spring依赖注入原理分析
我们知道Spring的依赖注入有四种方式,各自是get/set方法注入.构造器注入.静态工厂方法注入.实例工厂方法注入 以下我们先分析下这几种注入方式 1.get/set方法注入 public cla ...
- Spring学习笔记--Spring表达式语言SpEL
Spring3引入了Spring表达式语言(Spring Expression Language,SpEL).SpEL是一种强大的.简洁的装配Bean的方式,它通过运行期执行的表达式将值装配到Bean ...
- 转:Spring学习笔记---Spring Security登录页
转:http://axuebin.com/blog/2016/06/21/spring-security/?utm_source=tuicool&utm_medium=referral. 提示 ...
随机推荐
- “xxxx”表 - 无法修改表。 不能将值 NULL 插入列 'xxxx'
问题 向已有表增加字段 执行下面sql,sql执行增加两个字段分别: articleTitle 正标题 [nvarchar](200) articleSubTitle 副标题 [nvarchar](2 ...
- 2015 提高组 信息传递--tarjan找最小环
P2661 信息传递 题目描述 有 n 个同学(编号为 1 到 n )正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为 i 的同学的信息传递对象是编号为 Ti 的同学. ...
- luogu P1618 三连击(升级版)
题目描述 将1,2,…,9共9个数分成三组,分别组成三个三位数,且使这三个三位数的比例是A:B:C,试求出所有满足条件的三个三位数,若无解,输出“No!!!”. //感谢黄小U饮品完善题意 输入输出格 ...
- 离散数学-集合的交并差集运算--STL-set类
代码其实很简单,我们只需要知道set类的使用方法就可以了,比如迭代器的定义( set<T>::iterator it=a.begin() ),和简单的insert函数插入,以及find函数 ...
- jdk环境变量配置至第一个简单程序运行成功
桌面右键单击我的电脑,属性,高级,环境变量,然后再系统变量中配置(也可在用户变量中配置) 在配置环境变量时限查看是否已存在变量名称,有则添加路径,没有则创建再添加路径 /* JAVA_HOME% C: ...
- (14) openssl x509(签署和自签署)
主要用于输出证书信息,也能够签署证书请求文件.自签署.转换证书格式等. openssl x509工具不会使用openssl配置文件中的设定,而是完全需要自行设定或者使用该伪命令的默认值,它就像是一个完 ...
- tornado框架基础05-模板继承、UImodul和UImethods
01 模板继承 父模板 <html lang="en"> <head> <meta charset="UTF-8"> ...
- 【URAL 1486】Equal Squares(二维哈希+二分)
Description During a discussion of problems at the Petrozavodsk Training Camp, Vova and Sasha argued ...
- angularjs ng-repeat下验证问题
angularjs验证要求name唯一,repeat情况,name 等通过${index}等绑定,也无法获取值 通过ng-from的方法,这样验证name重复也可以了. <ng-form nam ...
- 【ITOO 1】SQLBulkCopy实现不同数据库服务器之间的批量导入
导读:在做项目的时候,当实现了动态建库后,需要实现从本地服务器上获取数据,批量导入到新建库的服务器中的一个表中去.之前是用了一个SQL脚本文件实现,但那时候没能实现不同的数据库服务器,现在用了SqlB ...