需要的包
Maven 依赖
<dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.8.0</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjrt</artifactId> <version>1.9.4</version> </dependency> <dependency> <groupId>aopalliance</groupId> <artifactId>aopalliance</artifactId> <version>1.0</version> </dependency>
定义拦截四个接口
前置拦截继承
MethodBeforeAdvice
环绕拦截继承
MethodInterceptor
后置拦截继承
AfterReturningAdvice
异常拦截继承
ThrowsAdvice
方式一:sping-AP接口
不需要切面,只需要定义一个类,实现接口。就知道在哪执行了
//前置拦截通知
public class log implements MethodBeforeAdvice {
/**
*
* @param method 要执行的目标对象方法
* @param args 参数
* @param target 目标对象
*/
@Override
public void before(Method method, Object[] args, Object target) throws Throwable
{
System.out.println(target.getClass().getName()+"的 " +method.getName()+"被执行了");
}
}
//后置拦截通知
public class AfterLog implements AfterReturningAdvice
{
@Override
public void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable
{
System.out.println("执行了"+method.getName()+"方法的返回结果"+returnValue);
}
}
//环绕拦截通知
public class Befor implements MethodInterceptor
{
@Override
public Object invoke(MethodInvocation invocation) throws Throwable
{
System.out.println("环绕");
return null;
}
}
<!--被执行的实现类-->
<bean id="use" class="com.kjc.service.serviceimpl.Serviceimpl"/>
<!--AOP实现接口的通知类-->
<bean id="log" class="com.kjc.Log.log"/>
<bean id="after" class="com.kjc.Log.AfterLog"/>
<bean id="befor" class="com.kjc.Log.Befor"/>
<aop:config>
<aop:pointcut id="point" expression="execution(* com.kjc.service.serviceimpl.Serviceimpl.*(..))"/>
<aop:advisor advice-ref="log" pointcut-ref="point"/>
<aop:advisor advice-ref="after" pointcut-ref="point"/>
<aop:advisor advice-ref="befor" pointcut-ref="point"/>
</aop:config>
方式二:自定义通知类
//自定义通知类
public class loginform {
public void before()
{
System.out.println("before方法...");
}
public void after()
{
System.out.println("after方法...");
}
}
<!--被执行的实现类-->
<bean id="use" class="com.kjc.service.serviceimpl.Serviceimpl"/>
<!--自定义的AOP通知类-->
<bean id="loginform" class="com.kjc.Log.loginform"/>
<aop:config>
<!--切入点-->
<aop:pointcut id="point" expression="execution(* com.kjc.service.serviceimpl.Serviceimpl.*(..))"/>
<!--aop:aspect 自定义切面 ref 引用的自定义通知类-->
<aop:aspect ref="loginform">
<!--mtehod 自定义通知类 中 的方法 pointcut-ref 切入点-->
<aop:before method="before" pointcut-ref="point"/>
<aop:after method="after" pointcut-ref="point"/>
</aop:aspect>
</aop:config>
方式三:注解实现
//注解实现AOP
@Aspect //标记这个类是一个 切面
public class CommentAOP
{
@Before("execution(* com.kjc.service.serviceimpl.Serviceimpl.*(..))")
public void before()
{
System.out.println("before...");
}
@After("execution(* com.kjc.service.serviceimpl.Serviceimpl.*(..))")
public void after()
{
System.out.println("after.......");
}
}
<!--被执行的实现类-->
<bean id="use" class="com.kjc.service.serviceimpl.Serviceimpl"/>
<!--注册到 bean ,如果不注册bean也可以直接使用注解@-->
<bean id="commentAOP" class="com.kjc.Log.CommentAOP"/>
<!--开启注解-->
<aop:aspectj-autoproxy/>
版权声明:本文为weixin_43031259原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。