该用户从未签到
|
Aop 面向切面、面向方面、面向接口- U- o$ k# J) K+ ~( i( b
程序中涉及到公共问题,集中解决
: i0 c; d& a/ I+ T8 J6 nspring Aop中使用就动态代理4 u- u2 r& } G0 g% g+ W$ F8 i
1、实现InvocationHandler) o* a% P, O: X& g. _
2、生成代理对象
/ b, K$ W) w# _9 m Proxy.newProxyInstance(objectTarget.getClass().getClassLoader(),
, r7 n) T/ ~( R) t8 b' j objectTarget.getClass().getInterfaces(),( f0 Z9 j1 A% E! K y5 V
this)
5 w0 F: U* ?* [# G& z( d2 J! d b 3、编写invoke方法& b! B/ z# H% c5 z% ?
执行newProxy自动执行invoke
% _6 @$ k! j) U! d# j1 {6 I
! U" P r0 F6 i, e6 o
8 r, Y2 i3 {* A7 s; OAOP相关概念 7 C! I* }. M/ M) F+ q+ f
1、关注点(concern)
3 K I$ g, i9 t 一个关注点可以是一个特定的问题,概念、或者应用程序的兴趣点。总而言之,应用程序必须达到一个目标
& D { c( u; p2 T" ]" M 安全验证、日志记录、事务管理都是一个关注点* s4 j: [) W: _
在oop应用程序中,关注点可能已经被代码模块化了还可能散落在整个对象模型中
1 k g! `; S$ p/ l2、横切关注点(crosscutting concern)- h8 q, K; m7 G( n- N
一个关注点的实现代码散落在多个类中或方法中
Q4 [3 u4 R/ Y( g3 D- _( t' {3、方面(aspect)
, U) @" {/ J9 U4 b" ^+ q5 C4 q 一个方面是对一个横切关注点模块化,它将那些原本散落在各处的,
6 {- ?* R% U3 ?$ N( o$ J 用于实现这个关注点的代码规整在一处
" W3 W, w( T) `9 G4、建议(通知)(advice)
b( z6 R: e* q5 m( X4 Y advice是point cut执行代码,是方面执行的具体实现: \8 Q' q4 E4 l: x. C: A+ z7 d
前置、后置、环绕、异常通知# G/ |6 R" m. V }, Q
5、切入点(pointcut) add*
6 e! u# D" s1 p! ~% r) k 用于指定某个建议用到何处
& `" K% f4 _: E1 Z& y4 l1 z) \/ o6、织入(weaving)5 N5 Q& y; ?5 J2 j
将aspect(方面)运用到目标对象的过程
& s( K0 U8 e/ d) {7、连接点(join point)# q5 l5 C4 r s) e
程序执行过程中的一个点
7 z# K: C" f0 P. F5 h( M" u& `% N, d* ?# ]& M
8、targetObject 目标对象
! o, P- y, c, y7 ~9、proxyObject 代理对象
1 N' M4 Y5 K( v+ J5 f. Z" b1 `7 |$ h2 |$ l# h5 R% R& e
spring AOP主要是使用是动态代理机制 9 w2 ]5 N0 H1 w# X4 v w
spring AOP 完成日志输出, v: Q3 L! s0 z8 u4 t- g8 O
前置通知
8 W0 D+ g; C) w* b" R- }- S (1)创建目标对象
/ {/ c1 ]3 D5 S/ ]) f (2)创建前置通知9 T# Q, P3 Y. U3 o1 V4 [
实现MethodBeforeAdvice
" D, _7 g0 a1 n/ ?5 n0 ?, U% \3 X 完成before处理4 s0 j$ S3 R O
(3)完成代理工厂类装配
. D) F. `* g& a; [ (a)代理类接口" e7 [: ~7 }+ `
(b)通知
& ?: l7 [+ T+ O. l7 G$ l (c)目标对象% Z# B3 u) U+ w
; G! H; C) R) Q
|
|