注解spring AOP Advisor
1.第一步
1.导入jar包
2.编写目标方法
@Service
public class StudentService {
public boolean save(String name) {
System.out.println("StudentService...save");
return true;
}
}
3.配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.1.xsd"
default-autowire="byName">
<!-- 扫描注解的基包 -->
<context:component-scan base-package="cn.wang"/>
<aop:config>
<aop:pointcut expression="execution(* cn.wang.service..*(..))" id="servicePointCut"/>
<aop:advisor advice-ref="myAopAdvice" pointcut-ref="servicePointCut"/>
<aop:advisor advice-ref="myAroundAdvice" pointcut-ref="servicePointCut"/>
</aop:config>
</beans>
4.使用注解配置前置,后置,异常增强处理 实现接口
@Component
public class MyAopAdvice implements MethodBeforeAdvice,AfterReturningAdvice,AfterAdvice,ThrowsAdvice{
//前置
@Override
public void before(Method arg0, Object[] arg1, Object arg2) throws Throwable {
System.out.println("前置增强:"+arg2.getClass().getSimpleName()+"------"+arg0.getName()+"---"+Arrays.toString(arg1));
}
//后置增强
@Override
public void afterReturning(Object arg0, Method arg1, Object[] arg2, Object arg3) throws Throwable {
System.out.println("后置增强:"+arg0+arg2+arg3);
}
public void after(Method arg0, Object[] arg1, Object arg2) throws Throwable {
System.out.println("最终增强:"+arg2.getClass().getSimpleName()+"------"+arg0.getName()+"---"+Arrays.toString(arg1));
}
//异常增强
public void afterThrowing(Method method,Object[] args,Object target,Exception ex) {
System.out.println("异常增强:"+ex.getMessage()+"---");
}
}
5.使用注解配置环绕增强处理 实现接口
@Component
public class MyAroundAdvice implements MethodInterceptor{
//环绕增强
@Override
public Object invoke(MethodInvocation invocation) throws Throwable {
System.out.println("环绕前");
Object[] objects = invocation.getArguments();
Object result = invocation.proceed();
System.out.println(objects);
System.out.println("环绕后");
return result;
}
}
6.测试
public class TestStudent {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
StudentService bean = (StudentService) context.getBean("studentService");
bean.save("张三");
}
}