package com.aspectJ.user;
public interface Iuser {
void printone();
void printtwo();
void printthree();
}
package com.aspectJ.user;
import org.springframework.stereotype.Component;
⭐@Component
public class IuserImpl implements Iuser {
@Override
public void printone() {
System.out.println("hello world1");
}
@Override
public void printtwo() {
System.out.println("hello world2");
}
@Override
public void printthree() {
System.out.println(10/0);
System.out.println("出现异常了");
}
}
package com.aspectJ.advice;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
⭐@Component
⭐@Aspect
public class Advice {
@Pointcut("execution(* com.aspectJ.user.*.*(..))")
private void myPointCut() {
}
@Before(value="myPointCut()")
public void before(JoinPoint joinPoint) {
System.out.println("前置通知:"+joinPoint.getSignature().getName());
}
@AfterReturning(value="myPointCut()",returning="obj")
public void after(JoinPoint joinPoint,Object obj) {
System.out.println("后置通知:"+joinPoint.getSignature().getName()+obj);
}
@AfterThrowing(value="myPointCut()",throwing="e")
public void afterThrowing(JoinPoint jp1,Throwable e){
System.out.println("抛出异常通知:"+e.getMessage());
}
@After(value="myPointCut()")
public void lastafter(JoinPoint jP2) {
System.out.println("最终通知:s"+jP2.getClass().getName());
}
}
<?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"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:lang="http://www.springframework.org/schema/lang"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:mvc="http://www.springframework.org/schema/mvc"
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
http://www.springframework.org/schema/jee
http://www.springframework.org/schema/jee/spring-jee.xsd
http://www.springframework.org/schema/lang
http://www.springframework.org/schema/lang/spring-lang.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 1.扫描 注解类-->
<context:component-scan base-package="com.aspectJ.user,com.aspectJ.advice"></context:component-scan>
<!-- 2.确定aop注解生效 -->
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
</beans>
package com.aspectJ.user;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class AspectJTest {
@Test
public void test() {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
Iuser user = context.getBean("iuserImpl",Iuser.class);
user.printone();
user.printtwo();
}
}