<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd">
<!-- 读取资源文件 -->
<!-- <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:jdbc.properties" /> </bean> -->
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<!-- <value>file:${configPath}/dataSource.properties</value> -->
<value>classpath:dataSource.properties</value>
<!-- <value>/WEB-INF/config/dataSource.properties</value> -->
</list>
</property>
</bean>
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>${driverClassName}</value>
</property>
<property name="password">
<value>${password}</value>
</property>
<property name="username">
<value>${username}</value>
</property>
<property name="url">
<value>${url}</value>
</property>
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="classpath:mybatis-config.xml" />
<property name="dataSource" ref="dataSource" />
</bean>
<!-- spring 事物管理针对anotation的问题 <tx:annotation-driven transaction-manager="transactionManager"
proxy-target-class="true" /> 只能针对Web层Service,DAO层不能包含在里面. 如果有多个package,使用","分隔即可.
2.在XML中需要声明service的名字与class <context:component-scan base-package="com.tanghsk.mock.admin.right.action"/>
<bean id="examRightService" class="com.tanghsk.mock.admin.right.service.ExamRightService"></bean> -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.tanghsk.mock.admin" />
</bean>
<bean id="passwordEncoder" class="org.springframework.security.authentication.encoding.Md5PasswordEncoder" />
<!-- 启用用户的缓存功能 -->
<!--
<bean id="userCache" class="org.springframework.security.core.userdetails.cache.EhCacheBasedUserCache">
<property name="cache" ref="userEhCache" />
</bean>
<bean id="userEhCache" class="org.springframework.cache.ehcache.EhCacheFactoryBean">
<property name="cacheName" value="userCache" />
<property name="cacheManager" ref="cacheManager" />
</bean>
<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" />
spring security自带的与权限有关的数据读写Jdbc模板
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource" />
</bean>
在这个类中,你就可以从数据库中读入用户的密码,角色信息,是否锁定,账号是否过期等
用户详细信息管理:数据源、用户缓存(通过数据库管理用户、角色、权限、资源)。
<bean id="userDetailsManager" class="avatar.base.security.MyUserDetailsService">
<property name="pubUsersHome" ref="pubUsersHome" />
<property name="pubAuthoritiesResourcesHome" ref="pubAuthoritiesResourcesHome" />
<property name="dataSource" ref="dataSource" />
<property name="userCache" ref="userCache" />
</bean>
-->
<!-- <bean id="exceptionHandler" class="com.tanghsk.util.MyException"></bean> -->
<!-- 事务配置 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="logs" class="com.tanghsk.mock.admin.interceptor.LogInterceptor"></bean>
<!--事务拦截器 xml schema配置方法 注解的配置与此不同-->
<!-- 以下为spring 事务设置 -->
<!-- 拦截代理对象,为了给业务逻辑对象增加事务处理 -->
<!--
transactionAttributes属性可以设置事务处理的方式,事务隔离级别,是否只读三个属性,用逗号隔开 事务隔离级别各数据库系统不完全支持,
一般不设置,用默认的即可 。
事务处理选项有如下几个:
(前面2个常用)
PROPAGATION_REQUIRED - 需要事务处理。如果当前不存在事务环境,则创建一个 PROPAGATION_SUPPORTS
- 如果当前存在事务环境,则作为其中的一部分。如果不存在,则按非事务方式执行 PROPAGATION_REQUIRES_NEW - 需要事务处理。
并总是开启一个新事务。如果已经存在事务环境,则挂起之
PROPAGATION_MANDATORY - 执行到指定方法时,必须已经存在事务环境,否则出错 PROPAGATION_NEVER - 不支持事务操作,如果存在事务环境会出错
PROPAGATION_NOT_SUPPORTED - 不支持事务操作。如果存在事务,则挂起
-->
<bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
<property name="transactionAttributes">
<props>
<!-- key表示匹配DAO中的方法名,例如:save*表示所有前缀为save的方法 -->
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="del*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<!-- 自动代理 xml schema的配置方式-->
<!--
自动代理 非AspectJ切面,非注解的方式
产生代理的是类,不能是接口 Spring代理有两种方式,一种时对接口的代理,另一种是用CGLIB代理方式,对接口的代理是JDK采用的代理方式,
但在没有接口的情况下Srping通过设置proxyTargetClass等于 true来使用CGLIB代理,CGLIB是一种面向继承的代理方式。
同时还有一个proxyTarget属性用来指定代理的目标对象类。
-->
<bean id="autoproxy" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="proxyTargetClass">
<value>true</value>
</property>
<!-- 可以是Service或DAO层(最好是针对业务层*Service) -->
<property name="beanNames">
<list>
<value>*Service</value>
</list>
</property>
<property name="interceptorNames">
<list>
<value>logs</value>
<value>transactionInterceptor</value>
</list>
</property>
</bean>
<!-- 基于@Transactional注解方式的事务管理
必要条件:1.须在×Service类里加上@Transactional注解
2.还需要在spring配置文件中加入下面这段
对标注了@Transactional注解的bean进行加工,织入事务管理切面
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>
加入了此配置,spring就会自动装载那些使用了service等注解的bean,并为其设置属性
<context:component-scan base-package="com.maxjay.bank.service"/>
// @Transactional可以使用在类和方法上,其默认的事务传播行为是REQUIRED,隔离级别为ISOLATION_DEFAULT,读写事务属性为读/写事务
// 该注解的属性有 propagation:事务传播行为;isolation:事务隔离级别,可以通过Isolation枚举类来设置;
// readOnly:事务读写性;timeout:超时时间,int型,单位秒;
// rollbackFor:定义需要进行回滚的异常类,如@Transactional(rollBackForClassName={SQLException.class,..});
// noRollBackFor:定义遇到时不回滚的类
-->
<tx:annotation-driven proxy-target-class="true" transaction-manager="transactionManager"/>
<!-- aspect 的声明 注解方式-->
<!--
自动代理AspectJ切面,两种方法
1、在配置文件里声明AnnotationAwareAspectJAutoProxyCreator进行自动代理。
<bean class="org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator" />
2、也可以使用<aop:aspectj-autoproxy />标签自动代理。
-->
<aop:aspectj-autoproxy proxy-target-class="true" />
<bean id="myAspect" class="com.tanghsk.mock.admin.aop.LogsAspect"></bean>
<!-- spring context配置文件 -->
<!-- 先排除*action$的扫描,因为程序里spring和springmvc的配置文件分开导入的,当spring-application加载时,spring-servlet还没完成加载,
所以扫描*action$里springmvc注解时会发生错误 -->
<context:component-scan base-package="com.tanghsk.mock.admin">
<context:exclude-filter type="regex" expression=".*action$" />
</context:component-scan>
<bean id="rightServiceCreat" class="com.tanghsk.mock.admin.right.service.ExamRightService"></bean>
<!-- <bean id="RoleService" class="com.tanghsk.mock.admin.right.service.ExamRightService"></bean> -->
</beans>