package com.elf.spring.aop.aspectj;
public interface UsbInterface {public void work();
}
package com.elf.spring.aop.aspectj;
import org.springframework.stereotype.Component;
@Component
public class Phone implements UsbInterface{@Overridepublic void work() {System.out.println("手机开始工作了....");}
}
package com.elf.spring.aop.aspectj;
import org.springframework.stereotype.Component;
@Component
public class Camera implements UsbInterface {@Overridepublic void work() {System.out.println("相机开始工作...");}
}
package com.elf.spring.aop.aspectj;import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.*;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;import java.util.Arrays;
@Order(value = 2)
@Aspect
@Component
public class SmartAnimalAspect {@Pointcut(value = "execution(public float com.elf.spring.aop.aspectj.SmartDog.getSum(float, float)))")public void myPointCut() {}@Before(value = "myPointCut()")public void showBeginLog(JoinPoint joinPoint) {Signature signature = joinPoint.getSignature();System.out.println("SmartAnimalAspect-切面类showBeginLog()[使用的myPointCut()]-方法执行前-日志-方法名-" + signature.getName() + "-参数 "+ Arrays.asList(joinPoint.getArgs()));}@AfterReturning(value = "myPointCut()", returning = "res")public void showSuccessEndLog(JoinPoint joinPoint, Object res) {Signature signature = joinPoint.getSignature();System.out.println("SmartAnimalAspect-切面类showSuccessEndLog()-方法执行正常结束-日志-方法名-" + signature.getName() + " 返回的结果是=" + res);}@AfterThrowing(value = "myPointCut()", throwing = "throwable")public void showExceptionLog(JoinPoint joinPoint, Throwable throwable) {Signature signature = joinPoint.getSignature();System.out.println("SmartAnimalAspect-切面类showExceptionLog()-方法执行异常-日志-方法名-" + signature.getName() + " 异常信息=" + throwable);}@After(value = "myPointCut()")public void showFinallyEndLog(JoinPoint joinPoint) {Signature signature = joinPoint.getSignature();System.out.println("SmartAnimalAspect-切面类showFinallyEndLog()-方法最终执行完毕-日志-方法名-" + signature.getName());}@Before(value = "execution(public void com.elf.spring.aop.aspectj.UsbInterface.work())")public void hi(JoinPoint joinPoint) {Signature signature = joinPoint.getSignature();System.out.println("切面类的hi()-执行的目标方法-" + signature.getName());}@Before(value = "execution(public void Car.run())")public void ok1(JoinPoint joinPoint) {Signature signature = joinPoint.getSignature();System.out.println("切面类的ok1()-执行的目标方法-" + signature.getName());}@AfterReturning(value = "execution(public void Car.run())")public void ok2(JoinPoint joinPoint) {Signature signature = joinPoint.getSignature();System.out.println("切面类的ok2()-执行的目标方法-" + signature.getName());}@AfterThrowing(value = "execution(public void Car.run())")public void ok3(JoinPoint joinPoint) {Signature signature = joinPoint.getSignature();System.out.println("切面类的ok3()-执行的目标方法-" + signature.getName());}@After(value = "execution(public void Car.run())")public void ok4(JoinPoint joinPoint) {Signature signature = joinPoint.getSignature();System.out.println("切面类的ok4()-执行的目标方法-" + signature.getName());joinPoint.getSignature().getName(); joinPoint.getSignature().getDeclaringType().getSimpleName(); joinPoint.getSignature().getDeclaringTypeName(); joinPoint.getSignature().getModifiers(); Object[] args = joinPoint.getArgs(); joinPoint.getTarget(); joinPoint.getThis(); }
}
package com.elf.spring.aop.aspectj;
import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class AopAspectjTest {@Testpublic void smartDogTestByProxy() {ApplicationContext ioc =new ClassPathXmlApplicationContext("beans08.xml");SmartAnimalable smartAnimalable =ioc.getBean(SmartAnimalable.class);smartAnimalable.getSum(10, 2);System.out.println("smartAnimalable运行类型="+ smartAnimalable.getClass());System.out.println("=============================");}@Testpublic void smartDogTestByProxy2() {ApplicationContext ioc =new ClassPathXmlApplicationContext("beans08.xml");UsbInterface phone = (UsbInterface) ioc.getBean("phone");UsbInterface camera = (UsbInterface) ioc.getBean("camera");phone.work();System.out.println("==================");camera.work();}@Testpublic void test3() {ApplicationContext ioc =new ClassPathXmlApplicationContext("beans08.xml");Car car = ioc.getBean(Car.class);System.out.println("car的运行类型=" + car.getClass());car.run();}@Testpublic void testDoAround() {ApplicationContext ioc =new ClassPathXmlApplicationContext("beans08.xml");SmartAnimalable smartAnimalable =ioc.getBean(SmartAnimalable.class);smartAnimalable.getSum(10, 2);}}