spring aop xml实例

    xiaoxiao2021-03-25  101

    pom.xml

    <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjrt</artifactId> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> </dependency>

    beans.xml

    <bean id="aopBean" class="com.xxx.spring.aop.aop.AopMethod"/> <bean id="callService" class="com.xxx.spring.aop.service.impl.CallServiceImpl" /> <aop:config> <aop:pointcut expression="execution(* com.xxx.spring.aop.service.i.*.say*(..))" id="testPointCut"/> <aop:aspect id="testAOP" ref="aopBean"> <!-- 此处around顺序重要,不要乱换,还有在around方法中,记得call.proceed(); --> <aop:before method="before" pointcut-ref="testPointCut"/> <aop:around method="around" pointcut-ref="testPointCut"/> <aop:after method="after" pointcut-ref="testPointCut"/> <aop:after-returning method="afterReturn" pointcut-ref="testPointCut"/> </aop:aspect> </aop:config>

    AopMethod.java

    public void before() { System.out.println("before"); } public void after() { System.out.println("after"); } public void afterReturn() { System.out.println("afterReturn"); } public Object around(ProceedingJoinPoint pjp) { Object result = null; // this.before(call);// 相当于前置通知 try { System.out.println("around before"); //获取对应的处理方法 //参照http://blog.csdn.net/meiyang1990/article/details/50562046 // Signature sig = pjp.getSignature(); // MethodSignature msig = null; // if (!(sig instanceof MethodSignature)) { // throw new IllegalArgumentException("该注解只能用于方法"); // } // msig = (MethodSignature) sig; // Object target = pjp.getTarget(); // Method currentMethod = target.getClass().getMethod(msig.getName(), msig.getParameterTypes()); result = pjp.proceed(); System.out.println("around after"); // this.afterReturn(); // 相当于后置通知 } catch (Throwable e) { // this.afterThrowing(); // 相当于异常抛出后通知 // throw e; } finally { // this.after(); // 相当于最终通知 } return result; }

    ICallService.java

    java public interface ICallService { void sayHello(); void doNotSayHello(); } 之后提供注解版

    转载请注明原文地址: https://ju.6miu.com/read-26366.html

    最新回复(0)