1.aop 实现
MyAdvise.java
package com.spring.aop;
import java.lang.reflect.Method;
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
import org.aspectj.lang.annotation.AfterReturning;
import org.springframework.aop.AfterReturningAdvice;
import org.springframework.aop.MethodBeforeAdvice;
import org.springframework.stereotype.Component;
@Component
public class MyAdvise implements MethodBeforeAdvice ,AfterReturningAdvice ,MethodInterceptor{
public void before(Method method, Object[] args, Object target)
throws Throwable {
System.out.println("洗手");
}
public void afterReturning(Object returnValue, Method method,
Object[] args, Object target) throws Throwable {
System.out.println("收拾");
}
public Object invoke(MethodInvocation arg0) throws Throwable {
System.out.println("环绕前");
arg0.getMethod().invoke(arg0.getThis(), arg0.getArguments());
System.out.println("环绕后");
return null;
}
}
People.java
package com.spring.aop;
import org.springframework.stereotype.Component;
@Component
public class People {
public void eat(){
System.out.println("吃饭");
}
}
TestAdvise.java
package com.spring.aop;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestAdvise {
public static void main(String[] args) {
ClassPathXmlApplicationContext cpxac
=new ClassPathXmlApplicationContext("classpath:com/spring/aop/applicationContext.xml");
People people = (People) cpxac.getBean("people");
people.eat();
}
}
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns = "http://www.springframework.org/schema/beans"
xmlns:aop = "http://www.springframework.org/schema/aop"
xmlns:c = "http://www.springframework.org/schema/context"
xmlns:be = "http://www.w3.org/2001/XMLSchema-instance"
be:schemaLocation = "http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.1.xsd
"
>
<c:component-scan base-package="com.spring.aop"></c:component-scan>
<aop:config>
<aop:pointcut expression="execution(void com.spring.aop.People.eat(..))" id="peopleCut"/>
<aop:advisor advice-ref="myAdvise" pointcut-ref="peopleCut"/>
</aop:config>
</beans>
2 aspectj 实现
MyAdvise.java
package com.spring.aspectj;
import java.lang.reflect.Method;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.springframework.aop.AfterReturningAdvice;
import org.springframework.aop.MethodBeforeAdvice;
import org.springframework.stereotype.Component;
@Component
public class MyAdvise {
public void before(JoinPoint j){
System.out.println("前置通知");
}
public void after(JoinPoint j) {
System.out.println("后置通知");
}
public void returning(JoinPoint j){
System.out.println("返回通知");
}
public void err(JoinPoint j){
System.out.println("异常通知");
}
public void around(ProceedingJoinPoint pjp) throws Throwable{
System.out.println("环绕通知前");
pjp.proceed(pjp.getArgs());
System.out.println("环绕通知后");
}
}
People.java
package com.spring.aspectj;
import org.springframework.stereotype.Component;
@Component
public class People {
public void eat() {
System.out.println("吃饭");
}
public void sleep() {
System.out.println("睡觉");
}
}
TestAdvise.java
package com.spring.aspectj;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestAdvise {
public static void main(String[] args) {
ClassPathXmlApplicationContext cpxac
=new ClassPathXmlApplicationContext("classpath:com/spring/aspectj/applicationContext.xml");
People people = (People) cpxac.getBean("people");
people.eat();
people.sleep();
}
}
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns = "http://www.springframework.org/schema/beans"
xmlns:aop = "http://www.springframework.org/schema/aop"
xmlns:c = "http://www.springframework.org/schema/context"
xmlns:be = "http://www.w3.org/2001/XMLSchema-instance"
be:schemaLocation = "http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.1.xsd
"
>
<c:component-scan base-package="com.spring.aspectj"></c:component-scan>
<aop:config>
<aop:pointcut expression="execution(* com.spring.aspectj.People.eat(..))" id="peopleCut"/>
<aop:aspect ref="myAdvise" >
<aop:before method="before" pointcut-ref="peopleCut"/>
<aop:after method="after" pointcut-ref="peopleCut"/>
<aop:after-returning method="returning" pointcut="execution(* com.spring.aspectj.People.eat(..))"/>
<aop:after-throwing method="err" pointcut-ref="peopleCut"/>
<aop:around method="around" pointcut-ref="peopleCut" />
</aop:aspect>
</aop:config>
</beans>