|
该用户从未签到
|
Aop 面向切面、面向方面、面向接口. \9 X* @% w. U3 N
程序中涉及到公共问题,集中解决1 g& o& L& Q+ p! J, H
spring Aop中使用就动态代理0 T( [2 ?; i+ r7 \
1、实现InvocationHandler# R+ P2 E# z+ K, s4 G3 u& m- P. u
2、生成代理对象3 R4 `% t( N# \: z3 a/ k
Proxy.newProxyInstance(objectTarget.getClass().getClassLoader(),4 T8 e8 W5 E. x+ t! S) I
objectTarget.getClass().getInterfaces(),# e& r* V3 i2 w% \% q1 Z
this)) z& f3 |! Y; t) w, n* ]
3、编写invoke方法
- `' J' L$ r9 S 执行newProxy自动执行invoke
5 c$ o8 s6 c0 v" h- a! m: J * s/ h1 A. @5 d: P
7 a w3 b6 o# v. {) I$ O) p
AOP相关概念
0 e* R8 S9 U$ a; Q/ J 1、关注点(concern)* N9 F8 `6 c! Q
一个关注点可以是一个特定的问题,概念、或者应用程序的兴趣点。总而言之,应用程序必须达到一个目标; [- M7 e3 C' g* e! R
安全验证、日志记录、事务管理都是一个关注点
7 T. z8 Z* p% y/ Z, T0 X 在oop应用程序中,关注点可能已经被代码模块化了还可能散落在整个对象模型中
* Y9 m; w( K5 M2、横切关注点(crosscutting concern)- n: u1 w2 j- m. I8 Y& w
一个关注点的实现代码散落在多个类中或方法中
4 M# h1 i& u6 _) \- t9 `' f1 G8 l7 V" d3、方面(aspect)% s) ?; L: q* Z: u
一个方面是对一个横切关注点模块化,它将那些原本散落在各处的,
7 |5 A' W% r; a) W 用于实现这个关注点的代码规整在一处
5 m A* V# z2 m; S4、建议(通知)(advice)
8 N- F0 b# G. @ advice是point cut执行代码,是方面执行的具体实现
4 N1 w8 G3 m5 c" d4 L 前置、后置、环绕、异常通知
* R" G6 O- P p: }9 u1 L6 A5、切入点(pointcut) add*& v8 e5 X% S9 X' N s. V- K
用于指定某个建议用到何处
4 e- d6 z% y9 V {6、织入(weaving)
7 E" I( x k' X0 g# Q( A 将aspect(方面)运用到目标对象的过程
1 w) Z. G# }) F7 X" `- P# N$ ^7、连接点(join point)
. J7 x( T9 N- b ~ 程序执行过程中的一个点( q S3 W* b9 ~6 ?9 Z. g
5 U% x6 ?3 X0 a& x4 m" h1 t$ L
8、targetObject 目标对象
, C3 g( ~, K% \8 ~$ T9、proxyObject 代理对象1 [1 w- p% D+ x
! W. g' E8 f) P4 W% A1 t
spring AOP主要是使用是动态代理机制
" {7 z7 b+ K! v- D2 U) Ispring AOP 完成日志输出
C! L0 A/ b$ U 前置通知
. l1 y, G6 c3 d$ ]' C (1)创建目标对象- _1 X* _& \4 p
(2)创建前置通知
- R& |2 X4 h8 {3 ?; \ j/ L4 I, ^ 实现MethodBeforeAdvice" W" Q6 l2 E5 V3 ?2 g0 G9 Y. T
完成before处理3 Q j2 h% E' V5 \& `
(3)完成代理工厂类装配
5 U% }& _: X& h! d (a)代理类接口
" p& ^* H+ {9 E; c3 q; o' P (b)通知
) q1 g: A e- |8 o (c)目标对象
6 ]( @3 Z2 K$ e- q. U$ l2 A8 w2 e
) R2 G2 E. X7 ^' E1 h1 d# H1 \ |
|