首先 bean 属性内容:
scope 属性是干吗用的?
spring中 beanfactory或者 applicationContext 取得的实例 被默认为singleton,也就是默认每一个bean名称维持一个实例。
scope=singleton 是默认值,通过设置scope=prototype 每次指定名称取得bean时 都会产生一个新得实例。
singleton="true"
factory-method: bean的实例化中 ,默认情况下调用的是 类的默认构造方法,即无参数的构造方法。
例如
<bean id='test' class='dxm.com.test.TestUser'> 这种方式采用的是默认的构造方法,构造TestUser对象
<bean id='test' class='dxm.com.test.TestUser' factory-method=‘CreateUser’> 这种方式采用的是CreateUser 方法,构造TestUser对象
init-method: bean 对象得初始化方法名称
destroy-method: bean 对象的销毁方法名称
如果所有对象都有相同的 初始化名称,或者销毁名称 ,则可以再 <beans> 上定义 default-init-method="init" default-destroy-method="destroy"
lazy-init="default" :
lazy-init
<beans>
<bean id="service1" type="bean路径" lazy-init="true"/>
<bean id="service2" type="bean路径" lazy-init="false">
<property name="service1" ref="service1"/>
</bean>
</beans>
以上两个bean,一个lazy-init属性为true,一个为false,由什么区别呢
当 IoC容器启动时,service2会实例化,而service1则不会;但是但容器实例化service2时,service1也被实例化了,为什么呢,因为service2需要它。也就是说lazy-init="true"的bean,IoC容器启动时不会实例化该bean,只有当容器需要用到时才实例化它。lazy-init有利于容器效率,对于不需要的bean可以先不管。
abstract="true"
<bean id="baseTxService"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
abstract="true">
……
</bean>
bean abstract="true"时,该bean不会被实例化,上面的bean是个模板
default-lazy-init="true": spring的容器是提供了lazy-load的,即默认的缺省设置是bean没有lazy-load,该属性处于false状态,这样导致spring在启动过程导致在启动时候,会默认加载整个对象实例图,从初始化ACTION配置、到service配置到dao配置、乃至到数据库连接、事务等等。
这么庞大的规模,难怪spring的启动时间要花将近1分钟。尝试了一下,把beans的default-lazy-init改为true就,再次启动,速度从原来的55秒,降到8秒钟!!Great!虽然是非常小一个改动,但是影响确实非常大。
这样做只是为了在开发过程中节约启动时间,在部署到实际环境中,倒是没必要设置default-lazy-init为true。毕竟部署到实际环境中不是经常的事,每次启动1分钟倒不是大问题,而且可以提高服务器效率。
parent="TestUser" :表示继承,继承父类的设置
depends-on="TestUser": 在实例化bean之前 如果依赖于另一个bean ,那么spring就会先去实例化被依赖的bean 并进行依赖注入,如果某个bean在生成之前要求另外一个bean先被实例,则可以指定depends-on 属性来设置 ,如果有两个以上的bean 要设置在depends-on中 用逗号隔开。
l例如:<bean id="service1" type="bean路径" depends-on="TestUser"/>
autowire="byType": 表示属性内容自动绑定,根据属性类型来绑定默认值
autowire="autodetect"
autowire="constructor"
dependency-check="default": 检查某些依赖关系是否确立。
dependency-check="simple"
dependency-check="objects"
dependency-check="all"
dependency-check="none" : none 是默认值