该用户从未签到
|
Aop 面向切面、面向方面、面向接口3 d" ]& W d1 n
程序中涉及到公共问题,集中解决) O$ l1 ^7 A) s5 ~6 W8 R7 d" z
spring Aop中使用就动态代理
. U5 A/ p4 \0 }! r! F& X% t 1、实现InvocationHandler# D. W+ f4 l, _. Z0 h$ _0 D" {
2、生成代理对象
' o: s7 K& g5 G5 [0 s, j Proxy.newProxyInstance(objectTarget.getClass().getClassLoader(),
; q+ A, p) r5 O# R objectTarget.getClass().getInterfaces(),
?# k' V" v" w- i( q this)
3 d9 ?2 ?3 E/ C5 q 3、编写invoke方法
% S# K' |- B) w0 L" z$ d/ a Q 执行newProxy自动执行invoke
: g4 v& R8 o. B1 @; ? . u: Q) \& j K3 y6 F
# Q! c/ q7 i( ]+ z; r7 LAOP相关概念 - o9 u) C$ j! g4 X3 F. N# D
1、关注点(concern)
$ E0 E" X6 E p; f 一个关注点可以是一个特定的问题,概念、或者应用程序的兴趣点。总而言之,应用程序必须达到一个目标# k O- k% I4 t5 Y% D5 x
安全验证、日志记录、事务管理都是一个关注点
8 w! Z, {# B2 `7 }' S 在oop应用程序中,关注点可能已经被代码模块化了还可能散落在整个对象模型中
; ~0 n1 ]% G; g2、横切关注点(crosscutting concern)- Y: [! v# Z U9 T$ @$ X% e# K
一个关注点的实现代码散落在多个类中或方法中3 D& D. s: \7 s
3、方面(aspect)5 G( o! u: g# m$ C9 o }: }* j- p
一个方面是对一个横切关注点模块化,它将那些原本散落在各处的,
7 K0 Q5 o) ]3 X4 Q# @" F 用于实现这个关注点的代码规整在一处
- j( P$ N- d8 s+ `0 h, L7 p4、建议(通知)(advice)0 p Z+ M0 Z& Z7 M) e. {
advice是point cut执行代码,是方面执行的具体实现# s, o, |8 I& _8 Q3 z; `) P2 y+ \
前置、后置、环绕、异常通知- W; Z( F" |7 n$ q- T: g
5、切入点(pointcut) add*" J+ T6 R- @0 b8 }8 x4 G2 A
用于指定某个建议用到何处
+ m4 S8 V2 i/ G4 ~: R+ ]' V6、织入(weaving)
6 W! K3 ~! {$ `7 O/ h. Y1 o 将aspect(方面)运用到目标对象的过程
6 Y7 `4 p8 ~7 W' i& l* j4 t7、连接点(join point)3 h3 ]# W8 h- J: s/ P1 h8 D
程序执行过程中的一个点
$ B* W" z5 H6 b1 ]. X. p0 \% C+ q7 B! q) u; C. k
8、targetObject 目标对象
4 O, N6 }/ C, L, `- L9、proxyObject 代理对象) q4 ~# m# `; x2 T
5 |# U4 u& X* m4 q8 K6 C: k3 A
spring AOP主要是使用是动态代理机制 + g- l' n9 E# D0 G7 i
spring AOP 完成日志输出
7 k( x$ b' v7 K 前置通知
+ U( M% j4 b& a. L6 K+ ? (1)创建目标对象/ S$ }1 D4 j- T+ V
(2)创建前置通知. [, F v0 X* U2 f( M H) ~
实现MethodBeforeAdvice7 w) u9 ^0 a4 @2 f$ n: @4 n/ l
完成before处理
. `4 Y; U5 z5 X2 U" N# g1 [ (3)完成代理工厂类装配
- @5 \ B3 `2 F" m( O/ Q6 _3 Z2 f (a)代理类接口; B" _: i+ \: O6 L! U* r! v
(b)通知7 b( V B0 H: f. g7 d3 ]" y2 G
(c)目标对象
3 @+ _2 f4 A ^. j8 P) B- H, _2 t0 e2 ~2 M: p
|
|