应用Spring AOP(五)-------XML配置方式
?和前面的工程相比,前置通知,后置通知那几个通知类没有了,所有的通知逻辑直接放到了AllLogAdvice类的方法里:
?
?4种通知功能用4个方法来完成了。aop.xml配置文件内容:?
?定义pointcut的这句:
?expression里的写法参考官网解释的
6.2.3.4节:http://docs.spring.io/spring/docs/2.0.8/reference/aop.html
除了用execution外,还可以用within,this等。
这篇文章解释也不错:http://blog.csdn.net/kkdelta/article/details/7441829
这儿第一个*通配符代表所有的返回值,第二个*代表所有方法,(..)表示任意的参数类型。也就是说com.service.UserService类下面的所有任意返回值,任意参数类型的方法都会被拦截。
?
再看看主测试类MainTest:
package com.test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.service.IUserService;public class MainTest {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("aop.xml");IUserService userService = (IUserService) context.getBean("myUserService");userService.addUser("ton", 56);userService.deleteUser("ton");}}?这儿得到UserService的bean不再需要一个代理,而是直接用UserService定义的bean。这样的好处就是如果下次要删除通知里的逻辑,不再需要日志的功能了,我不再需要改java文件,直接在配置文件里的有关切面的配置段去掉就可以了,很好的做到了为代码解耦。
?
工程代码文件在附件中。。。。