初学AOP

srcdaydayCount.java

package dayday;

import org.springframework.stereotype.Component;

/**
* Created by I am master on 2016/12/3.
*/
@Component
public interface Count {
int add(int i, int j);
int mul(int i, int j);
int div(int i, int j);
int sub(int i, int j);
}

srcdaydayCountImpl.java

package dayday;

import dayday.Count;
import org.springframework.stereotype.Component;

/**
* Created by I am master on 2016/12/3.
*/
@Component
public class CountImpl implements Count {
public int add(int i,int j){
int result=i+j;
return result;
}
public int sub(int i,int j){
int result=i-j;
return result;
}
public int mul(int i,int j){
int result=i*j;
return result;
}
public int div(int i,int j){
int result=i/j;
return result;
}
}

srcdaydayLogginAspect.java

package dayday;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;

import org.springframework.stereotype.Component;

import java.util.Arrays;
import java.util.List;

/**
* Created by I am master on 2016/12/3.
*/
@Aspect
@Component
public class LogginAspect {
@Before("execution(public int dayday.Count.add(int,int))")
public void beforeMethod(JoinPoint joinpoint){
String methodName=joinpoint.getSignature().getName();
List<Object>args= Arrays.asList(joinpoint.getArgs());
System.out.println("method is "+methodName+" begins with "+args);
}
@After("execution(public int dayday.Count.add(int,int))")
public void afterMethod(){
System.out.println("After...");
}
@AfterReturning(value="execution(public int dayday.Count.add(int,int))",returning = "result")
public void afterReturning(JoinPoint joinpoint,Object result){
String methodName=joinpoint.getSignature().getName();
System.out.println("method is "+methodName+" result is "+result);
}
@AfterThrowing(value="execution(public int dayday.Count.div(int,int))",throwing ="exception")
public void afterThrowing(JoinPoint joinpoint,Exception exception){
String methodName=joinpoint.getSignature().getName();
System.out.println("method is "+methodName+" occurs "+exception);
}
@Around("execution(public int dayday.Count.add(int,int))")
public Object aroundMethod(ProceedingJoinPoint pjd){

Object result = null;
String methodName = pjd.getSignature().getName();

try {
//前置通知
System.out.println("The method " + methodName + " begins with " + Arrays.asList(pjd.getArgs()));
//执行目标方法
result = pjd.proceed();
//返回通知
System.out.println("The method " + methodName + " ends with " + result);
} catch (Throwable e) {
//异常通知
System.out.println("The method " + methodName + " occurs exception:" + e);
throw new RuntimeException(e);
}
//后置通知
System.out.println("The method " + methodName + " ends");
return result;
}
}

srcdaydayMain.java

package dayday;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
* Created by I am master on 2016/12/3.
*/
public class Main {
public static void main(String[] args){
ApplicationContext ctx=new ClassPathXmlApplicationContext("beans.xml");
Count c = ctx.getBean(Count.class);
int result=c.add(8,3);
}
}

srceans.xml

<?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: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.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
<context:component-scan base-package="dayday"/>
<!--使AspectJ注释起作用,自动为匹配的类生成代理对象-->
<aop:aspectj-autoproxy/>
</beans>

基于xml配置切面
srcdaydayeans-xml.xml
<?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:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
<!--配置Bean-->
<bean id="countimpl" class="dayday.CountImpl"></bean>

<!--配置切面的Bean-->
<bean id="logginaspect" class="dayday.LogginAspect"></bean>

<!--配置AOP-->
<aop:config>
<!--配置切点的bean-->
<aop:pointcut expression="execution(* dayday.Count.*(int, int))" id="pointcut"/>
<!-- 配置切面及通知 -->
<aop:aspect ref="logginaspect">
<aop:before method="beforeMethod" pointcut-ref="pointcut"></aop:before>
<aop:after method="afterMethod" pointcut-ref="pointcut"></aop:after>
<aop:after-returning method="afterReturning" returning="result" pointcut-ref="pointcut"></aop:after-returning>
<aop:after-throwing method="afterThrowing" throwing="exception" pointcut-ref="pointcut"></aop:after-throwing>
</aop:aspect>
</aop:config>
</beans>
 
原文地址:https://www.cnblogs.com/Hdaydayup/p/6130389.html