开发者在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或者构造方法的参数,它不能被容器获取。
只有当我们确定我们肯定没有机会去访问这个bean,才可以把它设置为嵌入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");