配置文件基本BEAN的配置
<!--xml文件的文件头部分,指定xml文件的编码集-->
<?xml version=”1.0” encoding=”gb2312”?>
<!--指定Spring配置文件的dtd-->
<!DOCTYPE beans PUBLIC “-//SPRING//DTD BEAN//EN”
“/dtd/spring-beans.dtd”>
<!--beans元素是Spring配置文件的根元素,所有的Spring的配置文件都应按如下结构书写-->
<beans>
<!--定义第一个JAVA实例bean1,该JAVA实例对应的实现类为lee.Test1-->
<!--spring可以配置多个配置文件,配置文件本身也可以导入其他的配置文件-->
<!--导入第一份配置文件,可以导入多个配置文件-->
<import resource=”配置文件所在的路径/配置文件名.xml”>(可选)
<bean id=”该bean唯一标识符” (必选)
class=”该bean所对应的包名+类名”
singleton=”true/false” ①(可选)
depends-on=”Spring容器中被依赖的Bean的ID名” ②(可选)
autowire=”no/byName/byType/constructor/autodetect” ③(可选)
dependency-check=”none/simple/object/all” ④(可选)
init-method=”设置依赖关系注入后执行的方法名”
destroy-method=”设置Bean在销毁前执行的方法名”
abstract=”true/false”⑥
parent=”父类bean的ID名”>⑦
<lookup-method name=”对应的方法名” bean=”依赖容器内Bean的ID名”>⑤
<proerty name=”对应类中的属性名”> //可以有多个
<!--以下ref ,value,bean,list,set,map,props子元素任选一个,以对应不同的值-->
<ref local=”用于指定属性的值为Spring容器中的其他Bean的ID名”>
<value>字符串和基本数据作为参数</value>//表示空值可以使用<null/>代替
<bean class=”一个嵌套bean的包名+类名,而不是容器中存在的bean”>
<list> //定义了list属性,就要使用list元素
<value>值1</value> <value>值2</value>….. //可以定义多个值
</list>
<map> //定义了map属性,就要使用map元素
<entry key=”键名1”><value>值1</value></entry>
<entry key=”键名2”><value>值2</value></entry>
….. //可以定义多个值
</map>
<props> //定义了properties属性,就要使用props元素
spring怎么读多个文件 <prop key=”键名1”>值1</prop>
<prop key=”键名2”>值2</prop>….. //可以定义多个值
</props>
<set> //定义set属性使用set元素,在set集合中可以包含value,bean,ref元素
<value>值1</value>
<ref local=” 用于指定属性的值为Spring容器中的其他Bean的ID名”/>
<bean class=” 一个嵌套bean的包名+类名,而不是容器中存在的bean”/>
</set>
</proerty>
</bean>
</beans>
注: ①如果一个bean的singleton属性设置成true,表示整个Spring容器里只有一个共享实例存在,如果设置成false,表示每次请求该ID的bean,Spring都会新建一个bean实例.该属性默认值为true.JAVA在创建和销毁JAVA实例时,都会导致系统开销.除非必要,尽量避免将bean的singleton属性设置成no-singleton行为.
②在极端情况下,bean之间的依赖不够直接,可以使用depends-on属性在初始化主调bean之前,强制一个或多个bean初始化
③Spring能自动装配bean与bean之间的依赖关系,也就是无需使用ref显式指定依赖bean,可以通过bean元素的autowire属性指定自动装配,让某些bean使用自动装配,而某些bean不使用。自动装配可以减少配置文件的工作量。
no:不使用自动装配,Bean依赖必须通过ref元素定义。这是默认的配置。
byName:根据属性名自动装配。即到当前bean的属性中有与Spring容器中的bean元素的ID名匹配的。如果有就装配,没有就不装配。
byType:根据属性类型自动装配。Spring容器先查当前类属性的类型与容器中全部bean类型是否有相同的,如果有就自动装配。如果有多个这样的bean就会抛出异常。
constructor:与byType类似,区别是有于构造注入的参数。如果容器中的bean没有与构造方法中的参数类型匹配的,就会抛出异常。
Autodetect:容器根据bean内部结构,来决定使用constructor还是byType.如果到一个默认的不代参数的构造方法,那就会使用byType.
④dependency-check属性用来检查bean的属性的默认值是否有效.
none:不进行依赖检查,没有指定值的bean属性仅仅是没有设值.
simple:仅对基本类型和集合(除了合作者的Bean)进行依赖检查
object:仅对合作者bean进行依赖检查
all:对合作者bean,基本类型和集合全部进行依赖检查.
⑤使用bean元素里的lookup-method子元素是指容器能重写容器中的bean的抽象或具体方法,返回查容器中其他bean的结果,当被依赖的bean的singleton属性为false时,此方法将每次产生一个新的对象.lookup方法注入不仅能用于设置注入,也可用于构造注入.
⑥当bean元素里abstract属性为true时,指明该bean是抽象bean,不能为实例化,因为上抽象bean不能被实例化,因此抽象bean可以没有class属性.因为抽象bean不能实例化,既不能通过getBean获得抽象bean,也不能让其它bean的ref指向该bean.
⑦设置了该bean的parent属性指向该bean的父类的ID,表示该bean继承这个父类.当子类指定了init-method,destroy-method和factory-medthod属性,则它们会覆盖父类的定义.子类无法从父类继承depends-on,autowire,dependency-check,singleton,lazy-init.如果父类定义指定了class属性,子类可以省略class属性.
高级依赖注入的配置
前面的依赖注入,要么是javabean式的值,要么是直接依赖于其它bean.实际应用中,某个实例的属性可能是某个方法的返回值,类的field值,或者者属性值.
属性值的依赖注入:
方法一: 把获得的值注入到其它的Bean里
<beans>
<bean id=” 该bean唯一标识符”
<!--通过PropertyPathFactoryBean可以从别外一个Bean的的属性中获得值-->
Class=”org.springframework..fig.PropertyPathFactoryBean”>
<property name=”targetBeanName”>
<value>该值指定从哪个Bean(容器中的Bean的ID名)中获得值</value>
</property>
<property name=”propertyPath”>
<value>该值指定targetBeanName中指定Bean中的某一属性名</value>
</property>
</beans>
方法二: 用获得的值创建一个新Bean
<beans>
<bean id=”person” class=”lee.Person”>
<property name=”son”>
<bean class=”lee.Son”>
<property name=”age”><value>11</value></property>
</bean>
</property>
</bean>
<bean id=”son2” class=”lee.Son”>
<property name=”age”>
<!--该Bean的age属性是通过上面person.son.age定义的值来获得值的-->
<bean id=”person.son.age”
Class=”org.springframework.fig.PropertyPathFactoryBean”>
</property>
</bean>
</beans>
Field值的依赖注入:
方法一:把获得的值注入到其它的Bean里
<beans>
<bean id=”son3” class=”lee.Son”>
<property name=”age”>
<!--该bean的ID属性确定获取哪个类的哪个field值,class属性值定获得field值的依赖注入-->
<bean id=”java.sql.Connection.TRANSACTION_SERIALIZABLE”
Class=”org.springframework.fig.
FieldRetrievingFactoryBean”>
</property>
</bean>
</beans>
方法二:用获得的值创建一个新Bean
<beans>
<bean id=”theAge3” class=” org.springframework.fig.
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论