spring3: schema的aop与Aspectj的aop的区别
AOP 区别 Schema AspectJ spring3
2023-09-14 08:57:51 时间
schema的aop如下:
接口:
package chapter6.service; public interface IHelloAroundService { public void sayAround(String param); }
接口的实现:
package chapter6.service.impl; import chapter6.service.IHelloAroundService; public class HelloAroundService implements IHelloAroundService { public void sayAround(String param) { // TODO Auto-generated method stub System.out.println("========= say around param: " + param); } }
aop程序
package chapter6.aop; import org.aspectj.lang.ProceedingJoinPoint; public class HelloAroundAspect { public Object sayAroundAdvice(ProceedingJoinPoint pjp) throws Throwable { System.out.println("============= before around advice"); Object retVal = pjp.proceed(new Object[] {"replace"}); System.out.println("============= after around advice"); return retVal; } }
配置文件说明:
<!-- 接口的实现 --> <bean id="HelloAroundService" class="chapter6.service.impl.HelloAroundService" /> <!-- 切面程序 --> <bean id="aspect" class="chapter6.aop.HelloAroundAspect" /> <aop:config> <!-- 定义插入点 --> <aop:pointcut expression="execution(* chapter6..*.sayAround(..))" id="pointcut"/> <!-- 通知 --> <aop:aspect ref="aspect"> <aop:around pointcut-ref="pointcut" method="sayAroundAdvice"/> </aop:aspect> </aop:config>
测试程序大同小异不做展示
Aspectj的aop如下:
接口 :
package chapter1.server; public interface IHelloService { public void sayAdvisorBefore(String param) ; }
接口实现:
package chapter1.service.impl; import chapter1.server.IHelloService; public class HelloService implements IHelloService { public void sayAdvisorBefore(String param) { // TODO Auto-generated method stub System.out.println("============say " + param); } }
aop程序:
package chapter1.aop; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; @Aspect public class HelloAspect { //定义切入点 @Pointcut(value="execution(* chapter1..*.sayAdvisorBefore(java.lang.String)) && args(param)", argNames = "param") public void beforePointcut(String param) {} //定义通知 @Before(value = "beforePointcut(param)", argNames = "param") public void beforeAdvice(String param) { System.out.println("===========before advice param:" + param); } }
配置文件:
<!-- 启动对Aspectj的支持 --> <aop:aspectj-autoproxy/> <bean id="helloService" class="chapter1.service.impl.HelloService" /> <bean id="aspect" class="chapter1.aop.HelloAspect"/>
测试程序:
@Test public void testAspectj() { ApplicationContext context = new ClassPathXmlApplicationContext("chapter1/aspectj.xml"); IHelloService hello = context.getBean("helloService", IHelloService.class); hello.sayAdvisorBefore("before"); }
结果:
===========before advice param:before
============say before