|
该用户从未签到
|
Aop 面向切面、面向方面、面向接口
2 {/ h$ l, u7 e0 z. Z 程序中涉及到公共问题,集中解决- U- ~* j5 |5 o' u) E. ]* N& c
spring Aop中使用就动态代理
' L2 |- I9 x& w& ` 1、实现InvocationHandler
* Q/ z7 [! |- Y+ p 2、生成代理对象; O0 g3 r3 A" F8 h
Proxy.newProxyInstance(objectTarget.getClass().getClassLoader(),
8 M2 _ G; ?9 O. b objectTarget.getClass().getInterfaces(),' [1 q- y$ j6 h. Q! V% E `. H2 h! k/ T
this)* {! }! r; j5 g6 v
3、编写invoke方法
" {2 p) D) g$ C# u& q 执行newProxy自动执行invoke
7 R& T3 T* y3 p& I6 U9 s0 n, F9 f9 J ) R4 D$ N% v% M- P1 ~4 A
! N% r3 }7 Q0 D3 I5 yAOP相关概念
# b4 I S1 Q1 W+ ^, }8 G) ^ 1、关注点(concern)" R! C( F" I3 P7 ^# R) P8 b
一个关注点可以是一个特定的问题,概念、或者应用程序的兴趣点。总而言之,应用程序必须达到一个目标5 _% Q# e7 Q; K6 _' x6 |
安全验证、日志记录、事务管理都是一个关注点. y3 m8 c( P) }( q: f
在oop应用程序中,关注点可能已经被代码模块化了还可能散落在整个对象模型中2 Z, G" a; m9 C+ T" ?+ u9 K
2、横切关注点(crosscutting concern)1 F: p% F- J3 m- [2 B2 Z- i* }
一个关注点的实现代码散落在多个类中或方法中& ^5 F9 q. u4 Y* _* R3 _0 h
3、方面(aspect)
/ f c7 b& h# H& s 一个方面是对一个横切关注点模块化,它将那些原本散落在各处的,
/ ^+ H; _* Y9 Q$ |7 u1 P& Z. ]: f 用于实现这个关注点的代码规整在一处
* Q9 p/ C9 A6 z1 z; E" U& t; j4、建议(通知)(advice)) Q r7 L9 V- q5 W
advice是point cut执行代码,是方面执行的具体实现
6 D0 I: ` \& q$ u% n& P8 P 前置、后置、环绕、异常通知
6 R6 n) ~9 Q. n! t% p. o' A5、切入点(pointcut) add*! s4 i+ o0 N+ j" A$ B( E
用于指定某个建议用到何处. x) C( P) d* x( ]; d+ |
6、织入(weaving). }6 ]- S$ v$ D+ e( _
将aspect(方面)运用到目标对象的过程
! r) H% R, `$ f# ^: O* g7、连接点(join point)
& M+ O6 g9 t3 h 程序执行过程中的一个点2 d7 o" I e1 ]4 E
- P( G& r* W J" c" e; D8、targetObject 目标对象' h- n- x m1 B) x" e9 @
9、proxyObject 代理对象* `3 C) W; u4 d+ G+ w
! {- C" W6 n4 z2 lspring AOP主要是使用是动态代理机制
4 L) y* _3 O/ {' ]6 e: i) Hspring AOP 完成日志输出( }1 J" }; R: E5 l0 o
前置通知+ b. O: b$ Z- @ T
(1)创建目标对象# ]. C& | J _8 K
(2)创建前置通知% S5 J$ D& t6 D9 o/ l' I
实现MethodBeforeAdvice( U* `% B2 h% Q" n& [
完成before处理
# I/ C; w/ j. j* r0 `; G8 N (3)完成代理工厂类装配! e( Z4 v l8 W4 e8 {
(a)代理类接口
; l* S R3 M9 J% F; G1 `5 `+ N (b)通知/ @' ?3 D. h4 r# W( g/ Y
(c)目标对象
6 y; V! F( l! ]& w, O4 K. _" p6 {! h
|
|