spring 配置文件属性

来源:互联网 发布:nginx 配置ssl模块 编辑:程序博客网 时间:2024/06/05 20:53


首先 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 是默认值 

首先 bean 属性内容:

scope 属性是干吗用的? 

spring中  beanfactory或者 applicationContext 取得的实例 被默认为singleton,也就是默认每一个bean名称维持一个实例。
scope=singleton 是默认值,通过设置scope=prototype 每次指定名称取得bean时 都会产生一个新得实例。
 singleton="true"
可以利用容器的scope="prototype"来保证每一个请求有一个单独的Action来处理,避免struts中Action的线程安全问题。这句话怎么理解呢如果用单例方式会有什么样的结果呢???
spring 默认scope 是单例模式
这样只会创建一个Action对象,每次访问都是同一个Action对象,数据不安全
struts2 是要求 每次次访问 都对应不同的Action , scope="prototype" 可以保证 当有请求的时候 都创建一个Action对象


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 是默认值 

0 0
原创粉丝点击