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 { @Override public void work ( ) { System . out. println ( "手机开始工作了...." ) ; }
}
package com. elf. spring. aop. aspectj ;
import org. springframework. stereotype. Component ;
@Component
public class Camera implements UsbInterface { @Override public 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 { @Test public 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 ( "=============================" ) ; } @Test public 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 ( ) ; } @Test public void test3 ( ) { ApplicationContext ioc = new ClassPathXmlApplicationContext ( "beans08.xml" ) ; Car car = ioc. getBean ( Car . class ) ; System . out. println ( "car的运行类型=" + car. getClass ( ) ) ; car. run ( ) ; } @Test public void testDoAround ( ) { ApplicationContext ioc = new ClassPathXmlApplicationContext ( "beans08.xml" ) ; SmartAnimalable smartAnimalable = ioc. getBean ( SmartAnimalable . class ) ; smartAnimalable. getSum ( 10 , 2 ) ; } }