Spring笔记――3.容器中的Bean

开发者在Spring框架下只需要做两件事:开发bean,配置bean。所以我们要做到:眼中看的是xml,戏中想的是java类代码,因为Srping本质就是通过xml来驱动java代码,每段xml都对应一段java代码。


bean的作用域

通过scope属性可以为bean设置如下作用域。

singleton:永远都只有一个实例。默认的是单例。创建后架构会持续跟踪维护。

prototype:每次get都是一个新的实例。new后就不管了。

request:同一个request中得到的总是同一个,请求结束,实例才消失。需要在web.xml中增加代码使之生效。

<listener>
    <listener-class>
    org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>

session:对话中总是同一个。

global session:每个全局HTTP Session中对应同一个实例。

在web中如果使用JavaScript脚本获得容器,应该这样写:

WebApplicationContext ctx=WebApplicationContextUtils.getWebApplicationContext(application);
Person p=(Person)ctx.getBean("person");


配置依赖

依赖要么是个确定的值,要么是另一个bean的引用。BeanFactory是在创建完容器后,需要bean才创建bean。ApplicationContext是一开始就创建所偶单例bean。记得之前我们使用ref来指定一个已经在容器中的bean的引用。如果我们给beans设置default-autowire属性,则架构可以自动的按照bean的需要加载它所依赖的对象。属性值有no、byName、byType。byType中如果正好有一个bean的类型符合set方法需要的类型,那就是它了!如果多于一个符合条件的bean,异常!byName中,如果set方法的名字与某个bean的名字一样,那就是他了!如果没找到,什么也不注入。还有constructor与autodetect决策。


注入嵌套bean

嵌套bean是指在property或者constructor-args下再来一个bean元素,该bean仅仅作为set或者构造方法的参数,它不能被容器获取,也无需id属性。

只有当我们确定我们肯定没有机会去访问这个bean,才可以把它设置为嵌入bean。

<bean id="CustomerBean" class="com.lei.common.Customer">
        <constructor-arg>
            <bean class="com.lei.common.Person">
                <property name="name" value="lei" />
                <property name="address" value="address1" />
                <property name="age" value="28" />
            </bean>
        </constructor-arg>
</bean>


注入集合值

注入集合与普通类型没什么区别,只是说property里面不再用value属性了,取而代之的是各种子元素注入list(list跟数组都用这个)、map、props、set。list下面的子元素是value。map下面有entry子元素,设置key与value(或者是value-ref,用于元素是对象的map)。set里面什么都可以放,value指定基本类型,ref指定其他容器中实例,bean制定一个嵌套bean,list,set,map,props可以再嵌套其他集合。props就是property的意思,里面用<prop key="length">18</prop>的形式指定。集合中的元素类型可以通过泛型确定。


组合属性

所谓组合属性,就是可以在当前bean中给bean的属性的属性赋值,使用类似OGNL表达式的形式。比如在example这个bean中给person实例变量的name赋值,直接如下:

<bean id="example" class="com.cm.example">
    <property name="person.name" value="Alvin"/>
</bean>

既然这样写,那么person就肯定不能为空,否则去哪找那个name呢?这个配置相当于在example类中如下写:

example.getPerson.setName("Alvin");


本文出自 “指尖轻飞” 博客,谢绝转载!

你可能感兴趣的:(spring,bean)