Spring 框架实现AOP 相对比较简单
(1) 定义切面类(通用的操作)
@Component //将对象注入LOC容器 @Aspect //切面类 public class LoggerAspect { //方法执行的位置和时机 @Before("execution(public int com.yk.entity.Iml.CalIml.*(..))") public void methodBefor(JoinPoint joinPoint){ String name=joinPoint.getSignature().getName(); String args= Arrays.toString(joinPoint.getArgs()); System.out.println("方法名字:"+name+"参数:"+args); } @After("execution(public int com.yk.entity.Iml.CalIml.*(..))") public void methodAfter( JoinPoint joinPoint){ String name=joinPoint.getSignature().getName(); System.out.println(name+"执行完毕"); } @AfterReturning(value = "execution(public int com.yk.entity.Iml.CalIml.*(..))",returning = "result") public void methodReturn(JoinPoint joinPoint,Object result){ String name=joinPoint.getSignature().getName(); System.out.println(name+"执行结果"+result); } }
(2)配置bean
<?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" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd "> <!--自动扫描--> <context:component-scan base-package="com.yk.entity"></context:component-scan> <!--aspect注解生效,为目标类自动生成代理对象,Spring 框架结合切面类和目标类自动生成动态代理对象--> <aop:aspectj-autoproxy></aop:aspectj-autoproxy> </beans>
(3)调用
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("spring.xml"); Cal cal=(Cal)applicationContext.getBean("calIml"); cal.add(1,2); cal.sub(1,2); cal.mul(1,2); cal.div(1,2);