该用户从未签到
|
Aop 面向切面、面向方面、面向接口
. d1 N; s* s+ B 程序中涉及到公共问题,集中解决 s6 ?2 ?0 X; I `. ~
spring Aop中使用就动态代理, O. r, i {: f3 b8 I, Y6 L7 f; e
1、实现InvocationHandler/ a8 W* Z; G: E) t! R; Q7 V/ w$ c
2、生成代理对象4 d% I/ H( O7 S9 @. G
Proxy.newProxyInstance(objectTarget.getClass().getClassLoader(),
5 K4 |2 I5 b6 h( k, O objectTarget.getClass().getInterfaces(),( I& z! q3 t( e! \; i8 W
this)
, L. k; ?( ` }! `. ]: D: u 3、编写invoke方法# [( c- V; _) g6 l4 V+ b6 R8 [
执行newProxy自动执行invoke# p6 X! t! I3 q6 S; |
6 L* ~- H% k4 F) }
; y1 v& t; ~, R! HAOP相关概念 / O% Z8 H9 _ _2 `9 p3 d2 D! n
1、关注点(concern), |! H( X$ }; h& D$ _0 ^2 l
一个关注点可以是一个特定的问题,概念、或者应用程序的兴趣点。总而言之,应用程序必须达到一个目标5 m. |4 Y8 l1 n# x, l: T- m
安全验证、日志记录、事务管理都是一个关注点+ d/ |' K. m: e: j
在oop应用程序中,关注点可能已经被代码模块化了还可能散落在整个对象模型中! u" u( t2 O% f9 j7 O% ^
2、横切关注点(crosscutting concern)4 b& W( U v5 f% S. s
一个关注点的实现代码散落在多个类中或方法中
4 n# h9 @: k$ A7 F. T! j3、方面(aspect)
7 j- A% p- K+ K# ^" Z$ w8 `+ ^( j 一个方面是对一个横切关注点模块化,它将那些原本散落在各处的,- S) y X5 E; D
用于实现这个关注点的代码规整在一处
$ d3 p( [; _. H( p4、建议(通知)(advice)6 Q [1 p; ^' K9 G/ S( _
advice是point cut执行代码,是方面执行的具体实现
, S4 n6 M1 V) Z9 `& X8 g 前置、后置、环绕、异常通知" M: L- L+ Q6 Y6 V
5、切入点(pointcut) add*/ F' r) m/ U# `
用于指定某个建议用到何处
" T4 Q4 V5 x# F0 S/ p/ c( T' I2 d6、织入(weaving)* l0 e: a0 {; e$ Y+ o [ a
将aspect(方面)运用到目标对象的过程
3 {; }/ l8 T. e; M( Q0 P7、连接点(join point). h. h* _/ G( Q9 M, a% e6 ?
程序执行过程中的一个点
* J! ]; w* k; E
+ u& V. Q7 u/ H; X$ A: J8、targetObject 目标对象
/ B S+ p$ T. q8 C9、proxyObject 代理对象- C0 H% W: ?# t* L: M8 J) Q
! z" M6 Z5 M8 ~. M* }7 B9 Rspring AOP主要是使用是动态代理机制 8 S8 d" U. n+ y4 v. Z' p% h+ H2 M
spring AOP 完成日志输出- O6 Q Z9 A) i+ v- c& O
前置通知& Y$ E s1 W7 v. P7 H$ M! S
(1)创建目标对象% ^) k! K' B' y3 s, p' p+ M
(2)创建前置通知. C2 ^9 j' Q1 t$ m5 i9 M7 b
实现MethodBeforeAdvice5 L# N y9 S+ v4 y% {+ ~/ y
完成before处理
+ A/ a' V4 h+ t/ H+ }) y (3)完成代理工厂类装配: F9 w9 v9 \9 @! _3 b& j
(a)代理类接口
! u& }3 N. V1 q, a (b)通知& _" X* k- v- l: v. ~$ K) Q
(c)目标对象
7 N8 g4 S! Q/ o* W( O: Y6 Q4 O3 t: O9 e* A% M
|
|