需要注意的是springMvc中使用的是父子容器,所以需要在applicationContext-springMvcConfig.xml中添加,而不是在applicationContext-server.xml中,这一点很重要
<!-- 打开注解支持--> <context:annotation-config/> <!-- 扫描插件包内的监控模块 --> <context:component-scan base-package="aop切面类的包名"/> <!-- 激活自动代理功能 --> <aop:aspectj-autoproxy proxy-target-class="true"/>了解过spring源码的应该对AbstractApplicationContext中的refresh很熟悉,找到这个方法,我们在finishBeanFactoryInitialization(beanFactory);这行打一个断点,当程序允许到此处执行beanFactory.getBeanDefinition(‘切面的beanId’) 如果能够获取到对象则说明切面类已经被容器加载,需要注意一点,如果该切面类注入到了springIoc中,也就是springMvc的父容器中,那么此处也可以拿到切面对象,但是controller并不会得到增强
springAop 用起来还是很方便的,编写切面代码对原有功能的侵扰性很低,可以实现插拔式插件,灵活开启关闭。
缺点: 调试起来很麻烦,第一次配置的时候因为aop切面类没有被spring加载而纠结很久,需要耐下心来查找原因。
