该用户从未签到
|
Aop 面向切面、面向方面、面向接口
0 k1 M! C: N6 {9 K$ P 程序中涉及到公共问题,集中解决( m# w5 l$ S4 k) l0 Y( p
spring Aop中使用就动态代理
( d5 \1 B, {: t- U/ `$ z+ x2 H/ } 1、实现InvocationHandler( e, i* l! ~! z% V
2、生成代理对象
; F" }' t4 s# e, T/ C7 V0 i8 l Proxy.newProxyInstance(objectTarget.getClass().getClassLoader(),
" k* @% I4 ^+ f) v, x objectTarget.getClass().getInterfaces(),; F, G. I7 b) {, k- x6 u# k1 b
this)
8 j3 t& j+ Q7 M7 k1 m 3、编写invoke方法
9 {7 Q4 f9 U9 q- J 执行newProxy自动执行invoke/ r2 o4 L* O$ g/ n4 t! z
# I6 p( P; B% L" {* _) y# H, @! y3 F 7 I& V) l: z5 V: O
AOP相关概念
* W4 p7 V- X1 G% j 1、关注点(concern)
! i) n& e- v5 i+ M 一个关注点可以是一个特定的问题,概念、或者应用程序的兴趣点。总而言之,应用程序必须达到一个目标; h/ w7 e3 R1 f+ d
安全验证、日志记录、事务管理都是一个关注点
+ r5 z8 V4 P3 V0 z( u W 在oop应用程序中,关注点可能已经被代码模块化了还可能散落在整个对象模型中5 ~2 P- `; B3 S2 g; n5 ]
2、横切关注点(crosscutting concern)
! _0 A/ W9 b+ X 一个关注点的实现代码散落在多个类中或方法中
' u, ~! w" _: P! q3、方面(aspect)
6 B; ?9 U& O% }4 O4 c 一个方面是对一个横切关注点模块化,它将那些原本散落在各处的,) d( I' @" ?, e' R+ z
用于实现这个关注点的代码规整在一处
) H% U' ~$ T; K" P5 R4、建议(通知)(advice)
- H; t/ Z3 \5 k- N/ ]6 J8 v advice是point cut执行代码,是方面执行的具体实现
) o1 `2 T- a7 n7 w 前置、后置、环绕、异常通知
% R7 I' S2 |: P8 B* R5 Z/ J% l3 [5、切入点(pointcut) add*1 ]6 f) l8 G4 r: |: a$ f+ y
用于指定某个建议用到何处
6 o# f: }0 r: E/ _ U5 G' P3 D6、织入(weaving)7 T$ ^9 f9 E5 w( `
将aspect(方面)运用到目标对象的过程& D+ c- n4 Y9 L6 V, v3 m3 e6 n" `
7、连接点(join point)
& b; \, x$ z, I 程序执行过程中的一个点" _: U; k' f3 o
/ g9 S6 f" X; m- m( z8、targetObject 目标对象$ s1 i. W& y3 D0 |% Q, A
9、proxyObject 代理对象 m5 A+ e6 F o! B0 A
4 H) s# m9 V2 I2 g9 w$ f
spring AOP主要是使用是动态代理机制 : J9 W, N( U0 L @ ]2 J: J6 y% ]
spring AOP 完成日志输出
. C1 v0 z9 w7 z. F: v 前置通知
: ]0 p- ?+ _* h' @4 q/ l( C (1)创建目标对象
& {0 p9 u8 O; @+ {& X (2)创建前置通知! o6 n. _! P/ F4 U/ H
实现MethodBeforeAdvice9 ~$ P* p' A! U8 a5 P1 O
完成before处理, t ?! ?' `! J! p
(3)完成代理工厂类装配
& K4 [# s6 l+ v P- }& T" R (a)代理类接口& v, f* Q# n9 A( r* D. I
(b)通知' c' M7 |4 F! p: b9 @9 I3 r
(c)目标对象
/ K" T3 Z( j$ W( c, Q7 q" z3 P: q. _: `5 M9 m2 Q( r' A
|
|