Bean

bean的scope:

由于Application或者BeanFactory默认每一个Bean只能维持一个实例。而当scope为singleton,每一次通过bean的名字取得的都是同一个对象。在单线程的时候是不会有任何问题的。但是在多线程时就说不定了。就存在Thread-safe的问题。这时就需要将scope设置成为prototype的模式。其意义在于为每次指定名称取得bean时,都会产生一个新的实例。通常也有另一种写法:singleton="true"或者false。

scope还可以为request、session、globalSession,分别对应请求阶段、回话阶段和基于Portlet的web应用程序阶段。


lazy-init属性的作用:可以让该bean不用在开始时就被实例化。当使用到BeanFactory的getBean()方法时才会实例化。lazy-init="true"


Bean一样可以像java那样定义继承。原理和java差不多。当有很多相同时,可以抽象出来。不同的是如果几乎完全相同,可以直接继承,然后再修改属性的值。这时那个抽象的bean就设置abstract="true";然后继承了他的bean就parent="bean名称";


Bean也可以设置构造函数的参数:需要用上contructor,如:

<bean id = "helloWorld" class = "onlyfun.caterprillar.HelloBean">
     <contructor-arg index="0">
         <value>Justin</value>
     </contructor-arg>
     <contructor-arg index="1">
         <value>Hello</value>
     </contructor-arg>
</bean>
这里需要注意的是构造函数中有的有>1的参数,所以要给个索引。

当构造方法参数数目相同时,这时spring会自动匹配。


<lookup-method>,此标签可以解决一种问题,将方法的返回值直接通过spring来进行设置了。



你可能感兴趣的:(Bean)