[6455] 2020-01-26_手写AOP理解springaop原理

文档创建者:s7ckTeam
浏览次数:3
最后更新:2025-01-17
2020-01-26_手写AOP理解springaop原理 A O P s p r i n g   a o p E   2 0 2 0 - 0 1 - 2 6   D e m o n N o . 1 N o . 1 使 N o . 2 N o . 2 使 S y s t e m . c u r r e n t T i m e M i l l i s ( ) a o p s p r i n g a o p a o p s p r i n g a o p a o p @ D a t a p u b l i c   c l a s s   U s e r   {         p r i v a t e   S t r i n g   u s e r N a m e ;         p r i v a t e   S t r i n g   p a s s w o r d ; } p u b l i c   i n t e r f a c e   U s e r S e r v i c e   {         U s e r   g e t U s e r 1 ( ) ;         U s e r   g e t U s e r 2 ( ) ; }   .
p u b l i c   c l a s s   U s e r S e r v i c e I m p l   i m p l e m e n t s   U s e r S e r v i c e   {         p r i v a t e   R a n d o m   r a n d o m   =   n e w   R a n d o m ( ) ;         p u b l i c   U s e r   g e t U s e r 1 ( )   {                 t r y   {                       T h r e a d . s l e e p ( r a n d o m . n e x t I n t ( 1 0 0 0 ) ) ;               }   c a t c h   ( I n t e r r u p t e d E x c e p t i o n   e )   {                       e . p r i n t S t a c k T r a c e ( ) ;               }               U s e r   u s e r   =   n e w   U s e r ( ) ;               u s e r . s e t U s e r N a m e ( " u s e r 1 " ) ;               u s e r . s e t P a s s w o r d ( " 1 1 1 1 1 1 " ) ;                 r e t u r n   u s e r ;       }         p u b l i c   U s e r   g e t U s e r 2 ( )   {                 t r y   {                       T h r e a d . s l e e p ( r a n d o m . n e x t I n t ( 1 0 0 0 ) ) ;               }   c a t c h   ( I n t e r r u p t e d E x c e p t i o n   e )   {                       e . p r i n t S t a c k T r a c e ( ) ;               }               U s e r   u s e r   =   n e w   U s e r ( ) ;               u s e r . s e t U s e r N a m e ( " u s e r 2 " ) ;               u s e r . s e t P a s s w o r d ( " 2 2 2 2 2 2 " ) ;                 r e t u r n   u s e r ;       } } p u b l i c   c l a s s   A o p T e s t   {         @ T e s t       p u b l i c   v o i d   t e s t ( )   t h r o w s   E x c e p t i o n   {               U s e r S e r v i c e   u s e r S e r v i c e   =   n e w   U s e r S e r v i c e I m p l ( ) ;               S y s t e m . o u t . p r i n t l n ( u s e r S e r v i c e . g e t U s e r 1 ( ) ) ;               S y s t e m . o u t . p r i n t l n ( u s e r S e r v i c e . g e t U s e r 2 ( ) ) ;       } } N o . 3 N o . 3 a o p a o p a o p a o p a o p a o p a o p a o p a o p a o p a o p a o p a o p a o p a o p a o p a o p a o p a o p a o p a o p a o p a o p a o p a o p a o p a o p a o p a o p a o p a o p a o p a o p a o p a o p 1 .
  2 .   3 .   4 .   5 .   6 . a o p 1 . + 2 . 3 . p o i n t c u t 4 . a d v i c e 5 . s p r i n g a s p e c t 6 . N o . 4 N o . 4 a o p a o p a o p a o p a o p a o p a o p a o p a o p a o p a o p a o p a o p a o p a o p a o p a o p a o p a o p a o p a o p a o p a o p a o p a o p a o p a o p a o p a o p a o p a o p a o p a o p a o p 使 s p r i n g a o p * * p o i n t c u t a d v i c e * * a o p 1 . A P I     A d v i c e
p u b l i c   i n t e r f a c e   A d v i c e   {         / * *         *           *         *   @ p a r a m   t a r g e t           *   @ p a r a m   m e t h o d           *   @ p a r a m   a r g s               * /       O b j e c t   i n v o k e ( O b j e c t   t a r g e t ,   M e t h o d   m e t h o d ,   O b j e c t [ ]   a r g s )   t h r o w s   E x c e p t i o n ; } 2 . @ D a t a @ A l l A r g s C o n s t r u c t o r p u b l i c   c l a s s   P o i n t C u t   {         / /       / * *         *           * /       p r i v a t e   S t r i n g   c l a s s N a m e ;         / * *         *           * /       p r i v a t e   S t r i n g   m e t h o r N a m e ; } a o p A O P A s p e c t @ D a t a @ A l l A r g s C o n s t r u c t o r p u b l i c   c l a s s   A s p e c t   {         / * *         *           * /       p r i v a t e   A d v i c e   a d v i c e ;         / * *         *           * /       p r i v a t e   P o i n t C u t   p o i n t C u t ; } a o p s p r i n g   i o c i o c I o c C o n t a i n e r i o c b e a n i o c b e a n g e t B e a n ( ) b e a n 使 j d k A o p I n v o c a t i o n H a n d l e r
p u b l i c   c l a s s   I o c C o n t a i n e r   {         p r i v a t e   M a p < S t r i n g ,   C l a s s < ? > >   b e a n D e f i n i t i o n M a p   =   n e w   H a s h M a p < > ( ) ;         / * *         *   a o p         * /       @ G e t t e r       @ S e t t e r       p r i v a t e   A s p e c t   a s p e c t ;         / * *         *   b e a n         * /       p u b l i c   v o i d   a d d B e a n D e f i n i t i o n ( S t r i n g   b e a n N a m e ,   C l a s s < ? >   c l a z z )   {               b e a n D e f i n i t i o n M a p . p u t ( b e a n N a m e ,   c l a z z ) ;       }         / / b e a n       p u b l i c   O b j e c t   g e t B e a n ( S t r i n g   b e a n N a m e )   t h r o w s   E x c e p t i o n   {               O b j e c t   o b j e c t   =   c r e a t e I n s t a n c e ( b e a n N a m e ) ;               o b j e c t   =   p r o x y E n h a n c e ( o b j e c t ) ;                 r e t u r n   o b j e c t ;       }         / * *         *           * /       p r i v a t e   O b j e c t   p r o x y E n h a n c e ( O b j e c t   b e a n )   {                 i f   ( b e a n . g e t C l a s s ( ) . g e t N a m e ( ) . m a t c h e s ( a s p e c t . g e t P o i n t C u t ( ) . g e t C l a s s N a m e ( ) ) )   {                         r e t u r n P r o x y . n e w P r o x y I n s t a n c e ( b e a n . g e t C l a s s ( ) . g e t C l a s s L o a d e r ( ) ,   b e a n . g e t C l a s s ( ) . g e t I n t e r f a c e s ( ) ,                                         n e w   A o p I n v o c a t i o n H a n d l e r ( b e a n ,   a s p e c t ) ) ;               }                 r e t u r n   b e a n ;       }         / * *         *           * /       p r i v a t e   O b j e c t   c r e a t e I n s t a n c e ( S t r i n g   b e a n N a m e )   t h r o w s   E x c e p t i o n   {                 r e t u r n   b e a n D e f i n i t i o n M a p . g e t ( b e a n N a m e ) . n e w I n s t a n c e ( ) ;       } } @ D a t a @ A l l A r g s C o n s t r u c t o r p u b l i c   c l a s s   A o p I n v o c a t i o n H a n d l e r   i m p l e m e n t s   I n v o c a t i o n H a n d l e r   {         / /       p r i v a t e   O b j e c t   t a r g e t ;         / / a o p       p r i v a t e   A s p e c t   a s p e c t ;         @ O v e r r i d e       p u b l i c   O b j e c t   i n v o k e ( O b j e c t   p r o x y ,   M e t h o d   m e t h o d ,   O b j e c t [ ]   a r g s )   t h r o w s   T h r o w a b l e   {                 / /               i f   ( m e t h o d . g e t N a m e ( ) . m a t c h e s ( a s p e c t . g e t P o i n t C u t ( ) . g e t M e t h o r N a m e ( ) ) )   {                         r e t u r n   a s p e c t . g e t A d v i c e ( ) . i n v o k e ( t a r g e t ,   m e t h o d ,   a r g s ) ;               }                 r e t u r n   m e t h o d . i n v o k e ( t a r g e t ,   a r g s ) ;       } } a o p T i m e C s A d v i c e
@ S l f 4 j p u b l i c   c l a s s   T i m e C s A d v i c e   i m p l e m e n t s   A d v i c e   {         @ O v e r r i d e       p u b l i c   O b j e c t   i n v o k e ( O b j e c t   t a r g e t ,   M e t h o d   m e t h o d ,   O b j e c t [ ]   a r g s )   t h r o w s   E x c e p t i o n   {                 l o n g   s t a r t   =   S y s t e m . c u r r e n t T i m e M i l l i s ( ) ;               O b j e c t   r e s   =   m e t h o d . i n v o k e ( t a r g e t ,   a r g s ) ;                 l o n g   u s e   =   S y s t e m . c u r r e n t T i m e M i l l i s ( )   -   s t a r t ;               l o g . i n f o ( " { } { } { } " ,   t a r g e t . g e t C l a s s ( ) . g e t N a m e ( ) ,   m e t h o d . g e t N a m e ( ) ,   u s e ) ;                 r e t u r n   r e s ;       } } p u b l i c   c l a s s   A o p T e s t   {         @ T e s t       p u b l i c   v o i d   t e s t ( )   t h r o w s   E x c e p t i o n   {                 / /   a o p               A d v i c e   a d v i c e   =   n e w   T i m e C s A d v i c e ( ) ;                 / / o r g . d e m o n . s e r v i c e . i m p l               P o i n t C u t   p o i n t C u t   =   n e w   P o i n t C u t ( " o r g . d e m o n . s e r v i c e . i m p l . . * " ,   " . * " ) ;               A s p e c t   a s p e c t   =   n e w   A s p e c t ( a d v i c e ,   p o i n t C u t ) ;                 / /               I o c C o n t a i n e r   i o c   =   n e w   I o c C o n t a i n e r ( ) ;               i o c . s e t A s p e c t ( a s p e c t ) ;               i o c . a d d B e a n D e f i n i t i o n ( " u s e r S e r v i c e " ,   U s e r S e r v i c e I m p l . c l a s s ) ;               U s e r S e r v i c e   u s e r S e r v i c e   =   ( U s e r S e r v i c e )   i o c . g e t B e a n ( " u s e r S e r v i c e " ) ;               S y s t e m . o u t . p r i n t l n ( u s e r S e r v i c e . g e t U s e r 1 ( ) ) ;               S y s t e m . o u t . p r i n t l n ( u s e r S e r v i c e . g e t U s e r 2 ( ) ) ;       } } N o . 5 N o . 5 使 使 使 使 使 使 使 使 使 使 使 使 使 使 使 使 使 使 使 使 使 使 使 使 使 使 使 使 使 使 使 使 使 使 使 使 使 使 使 使 使 使 使 使 使 使 使 使 使 使 使 使 使 使 使 使 使 使 使 使 使 使 使 使 使 使 使 使 使 a o p                         N o . 6 N o . 6 a o p A d v i c e P o i n t C u t
A o p A s p e c t I o c     E   h t t p s : / / w w w . e a s y a q . c o m         F B I   西 P N     E
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则