Aop 几种应用实例

来源:互联网 发布:ipad淘宝微淘在哪查看 编辑:程序博客网 时间:2024/06/04 18:03

实例一  ProxyFactoryBean

 

 <bean id="usermanager" class="com.book.service.UserManager" />

  <bean id="beforeadvice" class="com.common.bean.Before"></bean>   
  <bean id="beforeadvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
     <property name="advice">
      <ref local="beforeadvice"/>
     </property>
     <property name="pattern">
      <value>com/.book/.service/.UserManager/.findUser</value>
     </property>
   </bean>

//另一个事务拦截 

<bean id="transactionInterceptor"
  class="org.springframework.transaction.interceptor.TransactionInterceptor">
  <!-- 事务拦截器bean需要依赖注入一个事务管理器 -->
  <property name="transactionManager" ref="transactionManager"/>
  <property name="transactionAttributes">
   <!-- 下面定义事务传播属性 -->
   <props>
    <prop key="insert*">PROPAGATION_REQUIRED</prop>
    <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
    <prop key="*">PROPAGATION_REQUIRED</prop>
   </props>
  </property>
 </bean>

 

调用1

<bean id="logic2Proxy" class="org.springframework.aop.framework.ProxyFactoryBean">
       <property name="proxyTargetClass"><value>true</value></property>
       <property name="target"><ref bean="usermanager"/></property>
       <property name="interceptorNames">
          <list>
             <value>beforeadvisor</value>
          </list>
       </property>
     </bean>

 调用二

 

<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
 <!-- 指定对满足哪些Bean name的Bean自动生成业务代理 -->
     <property name="beanNames">
            <!-- 下面是所有需要自动创建事务代理的Bean-->
            <list>
                   <value>userManager</value> 
            </list>
            <!-- 此处可增加其他需要自动创建事务代理的Bean-->
     </property>
        <!-- 下面定义BeanNameAutoProxyCreator所需的事务拦截器-->
        <property name="interceptorNames">
            <list>
                <value>transactionInterceptor</value>
                <value>beforeadvisor</value>
                  <!--  此处可增加其他新的Interceptor -->
            </list>
        </property>
    </bean>

 

注:调用一 和 调用二不可同时存在

实例二 aspectj

package com.common.bean;

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
@Aspect
public class UserInterceptor {
 @Before ("execution(* com.book.service.UserManager.*(..))")
 public void userinter(){
  System.out.println("拦截器运作开始!");
 }
}

调用三

<aop:aspectj-autoproxy />
 <bean id="userInterceptor" class="com.common.bean.UserInterceptor"/>

 

注意:对于同一个类例如UserManager 调用一,调用二,调用三 不可同时应用。

原创粉丝点击