spring AOP进行自动拦截,常用的比如事务处理。代码如下
<bean id="BeanProxy" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<!-- 对类名以Dao结尾的类进行代理 -->
<value>*Dao</value>
</property>
<!-- 对代理类进行加载拦截器(实现通知的过程) -->
<property name="interceptorNames">
<list>
<value>transactionInterceptor</value>
</list>
</property>
</bean>
再比如eHcache缓存AOP拦截:
<!-- Bean自动代理处理器配置 -->
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<list>
<!-- 配置需要进行日志记录的Service和Dao <value>*Dao</value> -->
<!-- 配置所有Service结尾命名的Bean,即所有Service层的类都要 经过exceptionHandler异常处理类 -->
<value>*Dao</value> <!-- Service层的Bean ID 命名要以Service 结尾 -->
</list>
</property>
<property name="interceptorNames">
<list>
<value>methodCachePointCut</value>
<value>methodCacheDestory</value>
</list>
</property>
</bean>
这两个例子其实是一样的,第一个属性beanNames是对需要的地方进行配置,第二个属性interceptorNames是拦截器的名称,比如说transactionInterceptor的配置如下:
<bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager" ref="transactionManager"></property>
<property name="transactionAttributes">
<props>
<!-- PROPAGATION_SUPPORTS: 如果已经存在事务,则加入事务;如果没有事务,则以非事务的方式执行;
PROPAGATION_MANDATORY: 使用当前事务, 如果没有, 则抛出异常;
PROPAGATION_REQUIRED: 新建事务,如果当前有事务, 则挂起; P
ROPAGATION_NOT_SUPPORTED:以非事务的方式执行, 如果当前有事务, 则挂起;
PROPAGATION_NEVER:以非事务的方式执行, 如果当前有事务,则抛出异常;
+/-Exception</prop> + 表示异常出现时事物提交 - 表示异常出现时事务回滚 -->
<prop key="find*">PROPAGATION_SUPPORTS,readOnly</prop>
<prop key="del*"> PROPAGATION_SUPPORTS</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="save*">PROPAGATION_REQUIRED,-Exception</prop>
</props>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
很好理解的。
本文介绍了如何使用 Spring AOP 进行自动拦截操作,包括事务处理及 eHcache 缓存管理。通过 BeanNameAutoProxyCreator 配置,实现对指定类的代理,并加载拦截器。文中还详细展示了 transactionInterceptor 的配置示例。
942

被折叠的 条评论
为什么被折叠?



