该用户从未签到
|
Aop 面向切面、面向方面、面向接口( V' A% b/ w5 g! Z% r$ g0 J5 V* y+ O
程序中涉及到公共问题,集中解决
5 {0 \3 U7 \, F& Ispring Aop中使用就动态代理
# E" ?* j! H* h3 u- m- W 1、实现InvocationHandler
0 N0 m* ~& f# h" G$ D 2、生成代理对象3 w, f/ F! p4 C9 g2 M7 W
Proxy.newProxyInstance(objectTarget.getClass().getClassLoader(),6 `5 j2 ^" E% P2 E' d: S5 ~
objectTarget.getClass().getInterfaces(),/ p% E: x: L6 Z+ R% X4 A
this)
6 m+ {; f( j6 `- E: H9 ^# `* Z 3、编写invoke方法
% q+ C; g5 ?: D( N4 I 执行newProxy自动执行invoke7 B9 q$ ^ U( p& H
: E" Q7 w& {. S- @1 w# }
- Z5 y! b: m5 J rAOP相关概念 8 h2 V. e$ u: f$ `. M! X
1、关注点(concern)
7 H% z& t) P; I2 k1 x% r/ U 一个关注点可以是一个特定的问题,概念、或者应用程序的兴趣点。总而言之,应用程序必须达到一个目标
2 n! N& I3 |3 A/ E; t; W 安全验证、日志记录、事务管理都是一个关注点
5 ?. W0 v0 m/ Q+ P# \7 F9 d 在oop应用程序中,关注点可能已经被代码模块化了还可能散落在整个对象模型中9 ]. j. Q! Q* B" l3 p
2、横切关注点(crosscutting concern)
3 k# l! Q3 C: U$ }2 E 一个关注点的实现代码散落在多个类中或方法中. a9 X+ q m" C0 {5 X$ H; ]) o# v
3、方面(aspect)$ [8 w: k$ @! p, G7 s
一个方面是对一个横切关注点模块化,它将那些原本散落在各处的,
9 b7 {/ u q2 i# a- T% I 用于实现这个关注点的代码规整在一处
) y1 Q' U$ j2 s$ G4 ^* s4、建议(通知)(advice)
; E$ q* R: Z" R* M advice是point cut执行代码,是方面执行的具体实现' x! x5 |. y+ [
前置、后置、环绕、异常通知4 l; ]8 _& d5 I- L. f1 @
5、切入点(pointcut) add*
3 | j$ @( p+ q+ B: a3 l( H# A { 用于指定某个建议用到何处6 c3 V6 _0 r4 u7 V) b
6、织入(weaving)/ z' `! ?0 K; {$ ?/ ~ w
将aspect(方面)运用到目标对象的过程
8 j$ i+ I9 Y- [8 r+ D( y D7、连接点(join point)
5 }3 @& M. y1 m2 p/ t 程序执行过程中的一个点* |# a' T X6 Q5 E, T
0 A! a) s$ b" k" d* q) E, d. C
8、targetObject 目标对象
8 \+ c8 s" Q7 g9、proxyObject 代理对象
q8 H, B* p3 m! a) N( U
9 a; i9 o5 ]1 E4 I: Xspring AOP主要是使用是动态代理机制
! F0 `$ r* P5 N3 t& Ispring AOP 完成日志输出
' @9 y7 q: { {8 W }: w 前置通知. ^) g6 |" E% u% [+ x' c/ H& }) A
(1)创建目标对象! D4 c2 j6 i" V9 S5 N9 {% _% \! H/ @
(2)创建前置通知
( M- m/ q& Y( _% K 实现MethodBeforeAdvice4 \0 G3 @- u9 [" b2 Z
完成before处理/ g* h2 d3 ?& X
(3)完成代理工厂类装配: v; K0 @ k" d. q6 l7 v
(a)代理类接口4 M% j2 U2 W/ I; n
(b)通知
7 w! P* Y) Q4 T7 f' F (c)目标对象
, c5 Y/ k" R( i0 A2 E
7 [0 t$ K, _( I, t' K |
|