通过构造器注入对象引用
保证必须有公开的构造器才能使用这种方法
|
|
通过工厂方法创建Bean
有时候静态工厂方法是唯一实例化对象的方法,Spring支持通过factory-method属性装配工厂创建的Bean.
如下是一个典型的单例类:
bean元素有一个factory-method属性,允许我们调用一个指定的静态方法,从而代替公开的构造方法,创建一个类的实例.
Bean的作用域
Spring默认scope是singleton,在一个Spring容器中,一个Bean定义只有一个对象实例(不同于java中设计模式的单例模式,java设计模式的单例模式是整个jvm中只有一个对象实例,而这里的作用域是指的一个Spring容器,即每个应用上下文中只有一个.)
如果要想每次请求都产生唯一的一个是实例,scope就是prototype.
初始化和销毁bean时,还可以设置init-method, destroy-method.init-method在bean实例化后立即调用,destroy-method在该bean从容器销毁或者移除前立即调用.
如果所有bean都要设置相同的初始化方法和销毁方法,可以设置默认的default-init-method,default-destroy-method.
注入Bean属性
利用类似下面的注入方式注入setter方法的值,
注入简单类型的值,不需要指定类型,spring会根据属性的类型自动判断value的类型.下面的例子就回自动注入string类型的值.
|
|
引用其它bean
引用其它bean时使用ref指定:
内部Bean
内部bean是指定义在其它bean内部的bean
没有定义bean id.不可复用.所以内部Bean仅适用于一次性注入,而且也不能被其它bean所引用.
使用内部bean定义会影响spring xml配置的可读性,尽量避免使用
装配集合
- < list >:装配list类型的值,允许重复.
- < set >:装配set类型的值,不允许重复.
- < map>:装配map类型的值,名称和值可以是任意类型.
- < props>:装配properties类型的值,
名称和值必须是String类型.123456789<bean id="oneMenBand" class="com.mj.springAction.chapter2.SpringIdo1.OneMenBand"><property name="instruments"><list><ref bean="guitar" /><ref bean="piano" /><ref bean="cymbal" /></list></property></bean>
只要是集合类型都可以用list或者set表示,只不过set要求不能重复.
装配map:
装配properties(key -value都必须是String类型):
装配空值
如果有默认值,我们不能完全保证属性值是null,可以显示为该属性装配一个null值.