<!-- 整篇系列内容都是根据郭峰大大的Spring从入门到精通学习整理的-->
SPRING配置文件详解
概念、用途:
Spring配置文件是用于指导spring工厂进行bean生产、依赖注入(装配)及Bean实例分发的”图纸”。
Spring配置文件是一个或多个标准的XML文档,applicationContext.xml是spring的默认配置文件,当容器启动时找不到指定的配置文档时,将会尝试加载这个默认的配置文件。
<?xml version=”1.0” encoding=”UTF-8”?> | 定义xml文件的版本为1.0编码格式为UTF-8 |
<beans | 整个配置文件的根节点,包含一个或多个Bean元素。 |
Xmlns=”http://www.springframework.org/schema/beans” Xmlns:xsi=”http:www.w3.org/2001/XMLSchema-instance” | 最基本的命名空间定义 |
xmlns:context="http://www.springframework.org/schema/context" | 启动自动扫描或注解装配时的命名空间 |
xmlns:aop="http://www.springframework.org/schema/aop" | 启用AOP功能时的命名空间 |
xmlns:aop="http://www.springframework.org/schema/tx" | 启用声明事务时的命名空间 |
xsi:schemaLocation=” …” <!— 同命名空间定义相对应的schema定义文件的装载路径 --> | Xsi:schemaLocation属性的值有一个URI引用对组成,两个URI之间以空白符分隔,第一个URI是命名空间的名称,第二个URI给出模式文档的位置,模式处理器将从这个位置读取模式文档,该模式文档的目标名称空间必须与第一个URI相匹配。 |
<context:annotion-config/> | 开启注解处理器 |
<context:compoment-scan base-package=”test.spring”> | 开启组件自动扫描,扫描路径由base-package指定 |
<aop:aspectj-autoproxy/> | 开启基于@Aspectj切面的注解处理器 |
<bean id=”Bean实例名称” class=”Bean类的全限定路径” > | 使用class属性指定的类的默认构造方法创建一个单实例Bean,名称由ID属性指定。 |
<bean id=”Bean实例名称” class=”Bean类的全限定路径” scope=”prototype” > | Scope属性为prototype时表示每次将生成新的实例,即原型模式。 |
<bean id=”Bean实例名称” class=”Bean类的全限定路径” init-method=”初始化时调用的方法” desctory-method=”对象销毁时调用的方法” > | Init-method属性用于指定对象实例化后要调用的初始化方法。 Destory-method属性用于指定对象在销毁时要调用的方法。 |
<bean …> <property name=”Bean类中的属性名称” ref=“要引用的Bean名称”/> <property name=”Bean类中的属性名称” value=“直接指定属性值”/> <property name=”Bean类中的属性名称” > <bean class=”Bean类全限定路径”/> </propertype>
| Property标签用于对Bean实例中的属性进行赋值,对于基本数据类型的值可以直接用value属性指定,而其他bean引用则可以使用ref。
创建一个内部匿名Bean实例赋值给指定的属性,该匿名实例无法被外界访问。 |
<bean …> <property name=”Bean类中的Set属性名称” <set> <value>set中的元素</value> <refbean=”要引用的Bean名称”/> </set> </property> </bean> | Set标签用于创建一个Set类型的实例赋值给指定的Set类型属性,Set实例中的元素通过Value或者ref子标签指定,对于基本数据类型可以使用value标签,如果是其他的Bean类实例作为Set元素则需要使用ref标签指定。 同理LIST就不在做演示了。 |
<property name=”Bean类中的Map类型属性名称”> <map> <entry key=”map元素的key”> <value>map元素的value</value> … </map> </property>
| Map标签用于创建一个map类型的实例赋值给指定的额Map类型属性,Map实例中的元素通过entry子标签来指定,Map元素的键由entry标签的key属性指定,值由value或者ref来指定。 |
<property name=”Bean类中的Proiperties类型的属性名称”> <props> <prop key=”properties元素的key”> Properties元素的value </prop> </props> </property> | 创建一个properties类型的实例赋值给指定的Properties类型属性, Properties实例中属性项由prop标签生成,属性项元素的键由key属性指定,属性项元素的值可直接放置在prop标签体中。
|
<property name=”…”> <null/> </property> | Null标签用于给需要赋null值的属性进行赋null值。 |
<construct-arg index=”从0开始的序号” type=”构造参数的类型” value=”构造参数的值”/> … </bean>
| 通过传入相应的构造参数进行Bean实例化,constructor-arg标签用于制定一个构造参数,其index属性表明当前是第几个构造参数。 Type属性声明构造参数的类型,构造参数的值如果是基本类型可由vlue直接指定,如果是对象的引用,则由ref指定。 |
<bean id=”目标对象名称” class=”目标对象类全限定名称”/> <bean id=”切面实例名称” class=”切面类全名”/> <aop:config> <aop:aspect id=”切面ID” ref=”要引用的切面实例名称”> <aop:pointcutid=”切入点名称” expression=”切入点正则表达式”/> <aop:before pointcut-ref=”切入点名称” method=”切面类中用作前置通知的方法名”/> <aop:after-returning pointcut-ref=”切入点名称” method=”切面类中用作后置通知的方法名”/> <aop:after-throwing pointcut-ref=”切入点名称” method=”切面类中用作异常通知的方法名”/> <aop:after pointcut-ref=”切入点名称” method=”切面类中用作最终通知的方法名”/> <aop:around pointcut-ref=”切入点名称” mthod=”切面类中用作环绕通知的方法名”/> </aop:aspect> </aop:config> | 配置AOP |
<bean id=”事务管理器实例名称” class=”事务管理器的全限定名称”》 <property name=”数据源属性名称” ref=”要引用的数据源实例名称”/> </bean> | 配置事务管理器 |
<tx:advice id=”事务通知名称” transaction-manager=”事务管理器实例名称”> <tx:attributes> <tx:method name=”get*” read-only=”true” propagation=”NOT_SUPPORTED”/> <tx:method name=”*”/> </tx:attributes> </tx:advice>
| 配置一个事务通知
方法以get开头的,不使用事务。
其他方法以默认事务进行。 |
<aop:config> <aop:pointcut id=”事务切入点名称” expression=”事务切入点正则表达式”/> <aop:advisor advice-ref=”事务通知名称” pointcut-ref=”事务切入点名称”/> </aop:config> | 使用AOP技术实现事务管理 |
本文学习过程中根据的是http://blog.csdn.net/zzjjiandan/article/details/22922847这篇博客,其实具体应该算是转载吧。