aop 入门
aop概念不多说了,先接触到的是intercept拦截器,在spring中需要继承自HandlerInterceptor。
这两天看了很多例子,做个备份做下记录,希望看官能一起交流,加深理解。
aop的实现一般分为2种:
1、jdk自动代理。
2、cglib代理。
面向切面编程在我看来常用于不需要更改主逻辑,但是需要在Controller执行前后需要完成的工作。
这种思想不需要在主逻辑类上更改流程,而是在主逻辑的某个特定方法,或者全部方法的前后或执行时,进行一些逻辑操作。
有个园友的比喻很贴切:就好像一个人去打酱油,忽然你半路跳出来,打了他一顿,他无须知道你为什么打他,他被打后还是需要继续去打酱油;
回来后你又打了他一顿,打完后你完成任务了,他继续把酱油送回去。甚至在他打完酱油回来的路上,你可以操作他的酱油,把酱油倒出来一半,或者往里撒把盐。
他无须管你做了什么,继续把酱油送回去就好了。你们各干各的,你打不打他,他依然要打酱油,不急不慢;你倒不倒酱油,他依然要送回去,不疾不徐。
1、先说自动代理,必须操作接口实现类
一般需要4个类
(1)接口&实现类。打酱油的类
(2)aop切面类。打手
(3)配置类。让打手打打酱油的
(4)调用类。main主环境
具体代码不写了,抄别人的还不如直接看原帖,原帖地址:
http://blog.csdn.net/fyduan/article/details/50389130
代码都能跑通,作者蛮不错。
2、cglib代理
需要引入两个包,用maven直接引入,pom.xml依赖如下:
<!-- aop --> <dependency> <groupId>cglib</groupId> <artifactId>cglib</artifactId> <version>3.1</version> </dependency>
参考博客:http://blog.csdn.net/xiaohai0504/article/details/6832990
这篇博客思路很清晰,细节代码有bug。
也是需要:
(1)实体类 打酱油的
(2)cglib代理类 打手操作步骤
(3)工厂类 指定打手打指定打酱油的
(4)场景 main
朋友说aop很重要,在此做个学习记录,希望能抛砖引玉得到大家指点。
说个问题,为什么我在项目中自动代理时候,例子代码可以运行无误,但是操作我的具体serviceImpl类时候提示注入错误?
我在serviceImpl中操作了mybatis的mapper接口。spring逻辑没问题,换个类名就出注入错误了?