spring aop 的几种实现方式

博主只用过或者了解过三种用法

1.其于代理实现

2.原生的<aop:config> 切面

3.@AspectJ注解驱动的切面


个人感觉第一种用起来比较简单。也比较好理解, 主要有以下的配置文件

<!-- appUser登录拦截 -->
<bean id="appUserLoginInterceptor"
class="com.*.service.*.AppUserLoginInterceptor">
<property name="pool" ref="jedisSentinelPool"></property>
<!-- <property name="passwordHashMatcher" ref="passwordHashMatcher"></property> -->
</bean>
<bean id="appUserLoginPointCut"
class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
<property name="advice" ref="appUserLoginInterceptor" />
<!-- pattern必须是实现类,如果是接口,会拦截两次【和主数据实现的服务类一致】 -->
<property name="pattern"

value="*.AppUserLoginServiceImpl.login" />

</bean>

需要加上代理的基类

<bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"/> 

<property name="advice" ref="appUserLoginInterceptor" />:是一个连接点,就是在调用到一个指定的类时。引入的方法

<property name="pattern" value="*.AppUserLoginServiceImpl.login" /> :是切入点

这样就可以简单的完成一个AOP 的实现代码了

第二种 是基于在原始的<aop:fonfig>标签在配置的AOP

    <!-- 定义通知内容,也就是切入点执行前后需要做的事情 -->  
    <bean id="sleepHelper" class="com.springAOP.bean.SleepHelper"></bean>  
    <!-- 定义被代理者 -->  

    <bean id="me" class="com.springAOP.bean.Me"></bean>  //就是注入到SPRING容器中了

  
    <aop:config>  
        <aop:aspect ref="sleepHelper">  
            <aop:before method="beforeSleep" pointcut="execution(* *.sleep(..))" />  
            <aop:after method="afterSleep" pointcut="execution(* *.sleep(..))" />  
        </aop:aspect>  

    </aop:config>  

网上的另一中写法

  1. <aop:config>  
  2.     <aop:aspect ref="sleepHelper">  
  3.            <aop:pointcut id="sleepHelpers" expression="execution(* *.sleep(..))" />  
  4.            <aop:before pointcut-ref="sleepHelpers" method="beforeSleep" />  
  5.            <aop:after pointcut-ref="sleepHelpers" method="afterSleep" />            
  6.        </aop:aspect>  
  7. </aop:config> 

第三种是基于@AspectJ注解实现的AOP

@Aspect  
public class tryHelper{  
  
    public tryHelper(){  
          
    }  
      
    @Pointcut("execution(* *.sleep())")  //定义切点
    public void sleeppoint(){}  
      
    @Before("sleeppoint()")  //调用前
    public void beforeSleep(){  
        System.out.println("之前!");  
    }  
      
    @AfterReturning("sleeppoint()")  //调用后
    public void afterSleep(){  
        System.out.println("之后!");  
    }  
      
}  

猜你喜欢

转载自blog.csdn.net/aa6751789079/article/details/80599567
今日推荐