建立工程,导入jar包
1、首先说一下基于XMl方式的AOP配置,就从helloword开始吧
2、数据访问层省略,直接进到业务层
建立com.springdemo.service包以及他的实现包
建立一个借口
package com.springdemo.service; public interface IHelloworldService { public void sayHello(); }
建立他的实现类
package com.springdemo.service.impl; import com.springdemo.service.IHelloworldService; public class HellowoldService implements IHelloworldService{ public void sayHello() { System.out.println("Hello World"); } }
创建一个切面类
package com.springdemo.aspect; public class HelloAspect { public void beforeAdvice(){ System.out.println("前置增强"); } public void afterAdvice(){ System.out.println("后置增强"); } }
实际也不算是切面类
下面进入到XML的配置
配置一个目标实现类的bean和切面类的bean
<!--配置目标类,配置的是实现方法 --> <bean id="helloworldService" class="com.springdemo.service.impl.HellowoldService"/> <!--配置切面 --> <bean id="helloAspect" class="com.springdemo.aspect.HelloAspect"/>
下面进行切面的配置:
<!--配置切点 --> <aop:config> <aop:pointcut id="pointcut" expression="execution(* com.springdemo.service.impl.*.*(..))"/><!--配置切点 第一个*代表所有的返回值类型,第二个*代表所有的类,第三个*代表类所有方法,最后一个..代表所有的参数。 --> <aop:aspect ref="helloAspect"> <!-- 配置切面,引入切面类的bean--> <aop:before method="beforeAdvice" pointcut-ref="pointcut" /> <aop:after method="afterAdvice" pointcut="execution(* com.springdemo.service.impl.*.*(..))"/><!--在aop的增强中,可以通过pointcut-ref来制定原有的切入点,也可以通过pointcut来定义切入点,二者不能同时使用--> </aop:aspect> </aop:config>
再写个测试类就OK了,效果如下图:
基于XML的简单配置就完成了
下面说一下基于注解的配置:
想要使用注解的方式,就要在配置文件中加入
<!--支持注解方式的aop--> <aop:aspectj-autoproxy/>
这样才能支持注解的方式
业务层的没有任何变化,在切面类中加入一个point方法,用来注入切入点
@Pointcut("execution(* com.springdemo.service.impl.*.*(..))") public void point(){ //声明切入点 ,切入点的表达式 }
把原来XML里的<aop:config/>一段给注释掉,在切面类中的前置增强和后置增强的方法稍作修改,修改如下
@Aspect public class HelloAspect { ...... @Before("point()") public void beforeAdvice(){ System.out.println("前置增强"); } @After("point()") public void afterAdvice(){ System.out.println("后置增强"); } }
再次测试一下,与基于XML的结果一样
简单的注解方式的AOP配置就完成了,比较简单,留下来以后复习,关于带参的@Aspect以及概念,请看http://jinnianshilongnian.iteye.com/blog/1420689 这一系列的文章(感觉太多了,记不住)