博主只用过或者了解过三种用法
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>
网上的另一中写法
- <aop:config>
- <aop:aspect ref="sleepHelper">
- <aop:pointcut id="sleepHelpers" expression="execution(* *.sleep(..))" />
- <aop:before pointcut-ref="sleepHelpers" method="beforeSleep" />
- <aop:after pointcut-ref="sleepHelpers" method="afterSleep" />
- </aop:aspect>
- </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("之后!");
}
}