|
该用户从未签到
|
Aop 面向切面、面向方面、面向接口 ~" ?) T( H( |2 i) I0 v
程序中涉及到公共问题,集中解决! o5 F2 v" K7 Q/ m
spring Aop中使用就动态代理
* F+ v5 u* e5 N$ b6 Q4 u9 ` 1、实现InvocationHandler
* {+ ^: h' y- E( ]6 G }8 {6 |! b5 } 2、生成代理对象2 A/ s" `9 R$ T! ]- B% c+ {. Z
Proxy.newProxyInstance(objectTarget.getClass().getClassLoader(),
5 y, J0 X i8 |- H- e. _7 ] objectTarget.getClass().getInterfaces(),
7 M- Y. S: O+ [( ?* a0 | this)$ }+ K8 W3 T; z) T: [: e; a/ B' }
3、编写invoke方法
/ [% k' _! F' O/ `* J0 X8 X; o3 L" l 执行newProxy自动执行invoke
$ G: C$ {2 V3 d( s* K, }8 w. E : L7 k4 ?# D; Y1 q5 }! A/ U y
6 v' K/ [: N. JAOP相关概念
4 I4 j9 g2 B8 J3 H6 E 1、关注点(concern)- A ~9 N N1 i7 x4 p$ E h
一个关注点可以是一个特定的问题,概念、或者应用程序的兴趣点。总而言之,应用程序必须达到一个目标
+ S4 @6 X0 |- y; d( Z 安全验证、日志记录、事务管理都是一个关注点
5 B0 h3 f# l$ S) i! L* B: P5 a6 T 在oop应用程序中,关注点可能已经被代码模块化了还可能散落在整个对象模型中: U ^2 i+ Y+ S$ `9 b
2、横切关注点(crosscutting concern)7 Z- {- C, r1 P% h3 O& v
一个关注点的实现代码散落在多个类中或方法中
) J8 c: j1 d' c# Q' I/ m( u3 D( j3 H7 m3、方面(aspect)% h5 ^: q9 h7 K8 v
一个方面是对一个横切关注点模块化,它将那些原本散落在各处的,( e+ s; F$ y2 V: w
用于实现这个关注点的代码规整在一处5 W) `0 S" X; T4 J; j' ]$ Q
4、建议(通知)(advice)
2 t) c2 ~& c: u( S; J+ x8 X+ ^# @" P advice是point cut执行代码,是方面执行的具体实现
+ }" b# g4 a6 `" U; R8 e, F5 J 前置、后置、环绕、异常通知! B Z4 T' w1 z
5、切入点(pointcut) add*
% J; P0 ~! o$ l, J x 用于指定某个建议用到何处1 r: |2 H7 o/ ?2 x6 a) s
6、织入(weaving)2 i2 ?8 z* ~9 m/ h3 g
将aspect(方面)运用到目标对象的过程2 S+ r9 b5 g' P. c! I3 _
7、连接点(join point)) r1 ?& q) U7 @$ k1 _
程序执行过程中的一个点4 g" I2 p1 ?8 |1 d- o
( G, W7 b$ W; t+ r6 }3 B9 y5 J; N9 n9 S
8、targetObject 目标对象. D" u' P' p0 X- d: W# D6 O
9、proxyObject 代理对象
" z( M6 n8 g: c9 j) ? l
. J% i, O. @% t: Q2 E7 ^spring AOP主要是使用是动态代理机制
% g! e, X+ a" Q% }/ s* h9 g7 Sspring AOP 完成日志输出
% S s8 }# A+ y+ c; U 前置通知
7 t! }; _- U5 l- |. m5 T! q (1)创建目标对象5 p1 A8 y: {: b5 D9 h" E
(2)创建前置通知
+ J) p2 e& [$ o! `9 y2 e' q6 e 实现MethodBeforeAdvice
8 J( ^! M- n7 L 完成before处理
) t6 ?* |' l8 z* I) }* j (3)完成代理工厂类装配' X( o+ b3 w. @/ s; w0 P
(a)代理类接口
2 h& P( U9 U3 @% T7 d (b)通知* f4 }6 _/ z2 X# p9 ?
(c)目标对象% v9 b% S+ E5 N3 G
# W+ }9 _+ D- [8 W
|
|