5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 1/86
S p r i n g 3
T r a v e r s i S i m o n e
2 9 g e n n a i o 2 0 1 0
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 2/86
I n d i c e
I n t r o d u z i o n e i v
0 . 1 P a n o r a m i c a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . i v
0 . 2 L e i n n o v a z i o n i . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . i v
0 . 3 I m o d u l i . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . v
I C o r e T e c h n o l o g i e s 1
1 I l c o n t e n i t o r e I o C 2
1 . 1 C r e a z i o n e d i u n b e a n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1 . 2 C o n g u r a z i o n e d i u n b e a n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1 . 3 C o s t r u i r e u n a r e t e d i o g g e t t i . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1 . 4 L e c o l l e z i o n i . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1 . 4 . 1 I g e n e r i c s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1 . 5 L a s t r i n g a v u o t a e i l n u l l . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1 . 6 I n i z i a l i z z a z i o n e L a z y . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1 . 7 L o s c o p e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 0
1 . 8 C i c l o d i v i t a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 0
1 . 9 E s t e n s i o n e d e l c o n t a i n e r . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1
1 . 9 . 1 B e a n P o s t P r o c e s s o r . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1
1 . 9 . 2 B e a n F a c t o r y P o s t P r o c e s s o r . . . . . . . . . . . . . . . . . . . . . . . . . 1 2
1 . 9 . 3 B e a n F a c t o r y . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 3
1 . 1 0 E r e d i t a r i e t à . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 3
1 . 1 1 U s a r e i l e . p r o p e r t i e s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 4
1 . 1 2 U s o d e l l e a n n o t a t i o n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 5
1 . 1 2 . 1 @ R e q u i r e d . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 5
1 . 1 2 . 2 @ R e s o u r c e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 5
1 . 1 2 . 3 @ P o s t C o n s t r u c t e @ P r e D e s t r o y . . . . . . . . . . . . . . . . . . . . . . 1 6
1 . 1 3 R i l e v a z i o n e a u t o m a t i c a d e i c o m p o n e n t i . . . . . . . . . . . . . . . . . . . . . . 1 6
1 . 1 3 . 1 U s o d e i l t r i p e r u n o s c a n n i n g c u s t o m i z z a t o . . . . . . . . . . . . . . . 1 7
1 . 1 4 I n t e r n a z i o n a l i z z a z i o n e c o n M e s s a g e S o u r c e . . . . . . . . . . . . . . . . . . . . 1 8
2 V a l i d a z i o n e 2 0
2 . 1 I n t r o d u z i o n e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 0
2 . 2 L ' i n t e r f a c c i a V a l i d a t o r . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 0
2 . 2 . 1 G e s t i o n e d i c o n t r o l l i p i ù c o m p l e s s i . . . . . . . . . . . . . . . . . . . . 2 3
2 . 2 . 2 G e s t i o n e d e i m e s s a g g i d ' e r r o r e t r a m i t e m e s s a g e S o u r c e . . . . . . . . . 2 3
2 . 3 V a l i d a z i o n e d i u n a r e t e d i b e a n . . . . . . . . . . . . . . . . . . . . . . . . . . 2 4
i
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 3/86
I N D I C E i i
3 S p r i n g E x p r e s s i o n L a n g u a g e ( S p E L ) 2 8
3 . 1 I n t r o d u z i o n e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 8
3 . 2 P a n o r a m i c a s u l l e c a r a t t e r i s t i c h e . . . . . . . . . . . . . . . . . . . . . . . . . . 2 8
3 . 3 V a l u t a z i o n e d e l l e e s p r e s s i o n i u s a n d o l ' i n t e r f a c c i a E x p r e s s i o n d i S p r i n g . . . . 2 9
3 . 3 . 1 L ' i n t e r f a c c i a E v a l u a t i o n C o n t e x t . . . . . . . . . . . . . . . . . . . . . . 3 1
3 . 4 S u p p o r t o d e l l e e s p r e s s i o n i a l l a d e n i z i o n e d e i b e a n . . . . . . . . . . . . . . . 3 1
3 . 5 R e f e r e n c e d e l l i n g u a g g i o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2
4 S p r i n g A O P 3 3
4 . 1 I n t r o d u z i o n e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 3
4 . 1 . 1 C o n c e t t i d e l l ' A O P . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 3
4 . 1 . 2 C a p a c i t à e o b i e t t i v i d i S p r i n g A O P . . . . . . . . . . . . . . . . . . . . 3 4
4 . 1 . 3 A O P P r o x i e s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 5
4 . 2 A O P c o n @ A s p e c t J . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 5
4 . 2 . 1 A b i l i t a r e i l s u p p o r t o a @ A s p e c t J . . . . . . . . . . . . . . . . . . . . . 3 5
4 . 2 . 2 D i c h i a r a r e u n a s p e t t o . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 6
4 . 2 . 3 D i c h i a r a r e u n p o i n t c u t . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 6
4 . 2 . 3 . 1 I n d i c a t o r i s u p p o r t a t i p e r i P o i n t c u t . . . . . . . . . . . . . . 3 7
4 . 2 . 3 . 2 C o m b i n a r e l e e s p r e s s i o n i d e i p o i n t c u t . . . . . . . . . . . . . 3 8
4 . 2 . 3 . 3 C o n d i v i d e r e l e d e n i z i o n i d e i p o i n t c u t i n c o m u n e . . . . . . . 3 9
4 . 2 . 3 . 4 A l c u n i e s e m p i . . . . . . . . . . . . . . . . . . . . . . . . . . 4 0
4 . 2 . 4 D i c h i a r a r e u n a d v i c e . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2
4 . 2 . 4 . 1 B e f o r e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2
4 . 2 . 4 . 2 A f t e r r e t u r n i n g . . . . . . . . . . . . . . . . . . . . . . . . . . 4 3
4 . 2 . 4 . 3 A f t e r t h r o w i n g . . . . . . . . . . . . . . . . . . . . . . . . . . 4 3
4 . 2 . 4 . 4 A f t e r ( n a l l y ) . . . . . . . . . . . . . . . . . . . . . . . . . . 4 4
4 . 2 . 4 . 5 A r o u n d . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 4
4 . 2 . 4 . 6 G e s t i o n e d e i p a r a m e t r i . . . . . . . . . . . . . . . . . . . . . 4 5
4 . 2 . 4 . 7 P r i o r i t à . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 6
4 . 2 . 5 I n t r o d u c t i o n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 6
4 . 2 . 6 M o d e l l o d i i n s t a n z i a z i o n e d i u n a s p e t t o . . . . . . . . . . . . . . . . . 4 7
4 . 2 . 7 E s e m p i o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 7
4 . 3 A O P c o n X M L . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 9
4 . 3 . 1 D i c h i a r a r e u n a s p e t t o . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 0
4 . 3 . 2 D i c h i a r a r e u n p o i n t c u t . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 0
4 . 3 . 3 D i c h i a r a r e u n a d v i c e . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1
4 . 3 . 3 . 1 B e f o r e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1
4 . 3 . 3 . 2 A f t e r r e t u r n i n g . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1
4 . 3 . 3 . 3 A f t e r t h r o w i n g . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2
4 . 3 . 3 . 4 A f t e r ( n a l l y ) . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2
4 . 3 . 3 . 5 A r o u n d . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2
4 . 3 . 3 . 6 G e s t i o n e d e i p a r a m e t r i . . . . . . . . . . . . . . . . . . . . . 5 2
4 . 3 . 4 I n t r o d u z i o n i . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 3
4 . 3 . 5 M o d e l l o d i i n s t a n z i a z i o n e d i u n a s p e t t o . . . . . . . . . . . . . . . . . 5 3
4 . 3 . 6 A d v i s o r s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 3
4 . 3 . 7 E s e m p i o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 4
4 . 4 S c e g l i e r e l o s t r u m e n t o p e r g e s t i r e l ' A O P . . . . . . . . . . . . . . . . . . . . . 5 5
4 . 4 . 1 S p r i n g A O P o A s p e c t J ? . . . . . . . . . . . . . . . . . . . . . . . . . . 5 5
4 . 4 . 2 @ A s p e c t J o X M L ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 6
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 4/86
I N D I C E i i i
4 . 5 I l m e c c a n i s m o d e i p r o x y . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 7
4 . 5 . 1 C a p i r e i p r o x y A O P . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 7
4 . 6 C r e a z i o n e p r o g r a m m a t i c a d e i p r o x y @ A s p e c t J . . . . . . . . . . . . . . . . . . 6 0
I I D a t a A c c e s s 6 1
5 G e s t i o n e d e l l e t r a n s a z i o n i 6 2
5 . 1 V a n t a g g i d e l s u p p o r t o d i S p r i n g a l l a g e s t i o n e d e l l e t r a n s a z i o n i . . . . . . . . . 6 2
5 . 1 . 1 T r a n s a z i o n i g l o b a l i . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2
5 . 1 . 2 T r a n s a z i o n i l o c a l i . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2
5 . 1 . 3 M o d e l l o d i p r o g r a m m a z i o n e d i S p r i n g . . . . . . . . . . . . . . . . . . 6 3
5 . 2 C o m p r e n d e r e l ' a s t r a z i o n e d e l l e t r a n s a z i o n i d i S p r i n g . . . . . . . . . . . . . . 6 3
5 . 3 G e s t i o n e d i c h i a r a t i v a d e l l e t r a n s a z i o n i . . . . . . . . . . . . . . . . . . . . . . 6 5
5 . 3 . 1 C o m p r e n d e r e l ' a p p r o c c i o d i c h i a r a t i v o . . . . . . . . . . . . . . . . . . . 6 6
5 . 3 . 2 E s e m p i o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 6
5 . 3 . 3 R o l l b a c k . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 9
5 . 3 . 4 C o n g u r a z i o n e d i e r e n t i p e r b e a n d i e r e n t i . . . . . . . . . . . . . . . 6 9
5 . 3 . 5 < t x : a d v i c e / > . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1
5 . 3 . 6 @ T r a n s a c t i o n a l . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1
5 . 3 . 6 . 1 C o n g u r a z i o n e d i @ T r a n s a c t i o n a l . . . . . . . . . . . . . . . 7 3
5 . 3 . 7 P r o p a g a z i o n e d e l l e t r a n s a z i o n i . . . . . . . . . . . . . . . . . . . . . . . 7 3
5 . 3 . 7 . 1 R e q u i r e d . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 3
5 . 3 . 7 . 2 R e q u i r e s N e w . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 4
5 . 3 . 7 . 3 N e s t e d . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 4
5 . 3 . 8 A d v i s e p e r l e t r a n s a z i o n i . . . . . . . . . . . . . . . . . . . . . . . . . . 7 4
5 . 4 G e s t i o n e p r o g r a m m a t i c a d e l l e t r a n s a z i o n i . . . . . . . . . . . . . . . . . . . . 7 7
5 . 4 . 1 U s a r e i l P l a t f o r m T r a n s a c t i o n M a n a g e r . . . . . . . . . . . . . . . . . . 7 7
5 . 5 G e s t i o n e d i c h i a r a t i v a V s g e s t i o n e p r o g r a m m a t i c a . . . . . . . . . . . . . . . . 7 8
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 5/86
I n t r o d u z i o n e
Q u e s t o d o c u m e n t o h a l o s c o p o d i f o r n i r e u n a g u i d a s e m p l i c e e i m m e d i a t a , m a n o n e s a u s t i v a ,
a l l ' u t i l i z z o d e l f r a m e w o r k S p r i n g .
I l m o t i v o c h e m i h a s p i n t o a l l a c o m p o s i z i o n e d i q u e s t o d o c u m e n t o r i s i e d e n e l l a s c a r s i s s i m a
p r e s e n z a d i m a t e r i a l e i n i t a l i a n o s u l l ' a r g o m e n t o .
C i t e n g o a p r e c i s a r e c h e q u e s t a g u i d a n o n p r e s e n t a t u t t i g l i a r g o m e n t i p r e s e n t i s u l l e r e f e r -
e n c e u c i a l i , m a s o l o u n a s e l e z i o n e , e e t t u a t a s u l l a b a s e d e l l ' e e t t i v a u t i l i t à c h e i o h o r i l e v a t o
s u c e r t e f u n z i o n a l i t à . T a n t o p e r c i t a r e u n o d e i g r a n d i e s c l u s i , l a f u n z i o n a l i t à d e l l ' a u t o w i r i n g
n o n s a r à t r a t t a t a , p o i c h è l a r i t e n g o u n a f u n z i o n a l i t à c h e s e d a u n a p a r t e s e m p l i c a u n p o c h i n o
i l l e d i c o n g u r a z i o n e d i S p r i n g , d a l l ' a l t r a r i s c h i a d i i n t r o d u r r e i m p r e c i s i o n e n e l l a s t r u t t u r a
d e l l ' a p p l i c a z i o n e c h e s i r e a l i z z a . T a l e i m p r e c i s i o n e , s e n o n b e n c o n t r o l l a t a , p u ò p o r t a r e a u n
c a t t i v o f u n z i o n a m e n t o . T u t t a v i a , s a l t a r e q u e s t o a r g o m e n t o n o n t o g l i e n u l l a a l l o s t u d i o d e l
f r a m e w o r k , p o i c h è l o s t e s s o t i p o d i f u n z i o n a l i t à ( m a s e n z a i m p r e c i s i o n i ) p u ò e s s e r e o t t e n u t a
c o n a l t r i s t r u m e n t i c h e i n v e c e s a r a n n o t r a t t a t i .
I n o g n i c a s o , p e r q u a l s i a s i a p p r o f o n d i m e n t o s i c o n s i g l i a d i u t i l i z z a r e l a d o c u m e n t a z i o n e
u c i a l e i n l i n g u a i n g l e s e , d i s p o n i b i l e a l l ' i n d i r i z z o :
h t t p : / / w w w . s p r i n g s o u r c e . o r g / d o c u m e n t a t i o n
L a v e r s i o n e a c u i q u e s t o d o c u m e n t o s i r i f e r i s c e è l a 3 .
0 . 1 P a n o r a m i c a
S p r i n g è u n f r a m e w o r k o p e n s o u r c e p e r l o s v i l u p p o d i a p p l i c a z i o n i s u p i a t t a f o r m a J a v a [ W i k i p e d i a ] .
I l s u o s c o p o è q u e l l o d i r e n d e r e l o s v i l u p p o d i a p p l i c a z i o n i e n t e r p r i s e p i ù s e m p l i c e e p i ù
v e l o c e , a b b a t t e n d o q u i n d i i c o s t i d i p r o d u z i o n e .
L a p r i m a v e r s i o n e v e n n e s c r i t t a d a R o d J o h n s o n , n e l G i u g n o 2 0 0 3 e s o t t o L i c e n z a A p a c h e .
I l p r i m o r i l a s c i o , l a v e r s i o n e 1 . 0 , r i s a l e a l M a r z o 2 0 0 4 .
S p r i n g n a s c e p e r f o r n i r e a g l i s v i l u p p a t o r i u n ' a l t e r n a t i v a p i ù s e m p l i c e a g l i E J B 2 . 0 , l a s c i a n -
d o a l t e m p o s t e s s o u n a m a g g i o r e l i b e r t à . I n q u e s t o è s t a t o a m p i a m e n t e r i c o n o s c i u t o c o m e u n
o t t i m o r i s u l t a t o .
0 . 2 L e i n n o v a z i o n i
U n o d e i m e r i t i d i q u e s t o f r a m e w o r k è s t a t o q u e l l o d i r e n d e r e p o p o l a r i a l c u n e t e c n i c h e p r i m a
d i e s s o p o c o n o t e , c o m e l ' I n v e r s i o n O f C o n t r o l e i l p a r a d i g m a d i p r o g r a m m a z i o n e
o r i e n t a t a a g l i a s p e t t i .
T i p i c a m e n t e u n ' a p p l i c a z i o n e J a v a è c o m p o s t a d a u n c e r t o n u m e r o d i c o m p o n e n t i , g l i
o g g e t t i , c h e c o l l a b o r a n o l ' u n o c o n l ' a l t r o p e r o t t e n e r e i l c o m p o r t a m e n t o d e s i d e r a t o . T a l i
o g g e t t i s o n o p e r t a n t o l e g a t i d a d i p e n d e n z e .
I l l i n g u a g g i o J a v a h a s e m p r e l a s c i a t o g l i s v i l u p p a t o r i m o l t o l i b e r i d i p r o g e t t a r e l ' a r c h i t e t -
t u r a d e l l e a p p l i c a z i o n i c o n a s s o l u t a ( f o r s e t r o p p a ) l i b e r t à . P e r q u e s t o m o t i v o n e l c o r s o d e l
i v
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 6/86
I N T R O D U Z I O N E v
t e m p o s o n o n a t i u n a v a s t a g a m m a d i p a t t e r n s ( F a c t o r y , B u i l d e r , A b s t r a c t F a c t o r y , D e c o r a t o r ,
S e r v i c e L o c a t o r ) c o m u n e m e n t e r i c o n o s c i u t i e d a c c e t t a t i d a l l ' i n d u s t r i a d e l s o f t w a r e . Q u e s t o è
s t a t o s i c u r a m e n t e u n b e n e , m a i p a t t e r n s o n o s o l o q u e s t o : d e i b e s t p r a t i c e s .
I l m o d u l o d e l l ' I o C ( I n v e r s i o n o f C o n t r o l ) , c o m e s i v e d r à i n s e g u i t o , f o r m a l i z z a q u e s t i c o n -
c e t t i , f o r n e n d o u n a i n f r a s t r u t t u r a c h e g u i d a l o s v i l u p p a t o r e n e l l a c o s t r u z i o n e d e l l ' a p p l i c a z i o n e ,
f o r n e n d o g l i t u t t i g l i s t r u m e n t i n e c e s s a r i p e r p o t e r a p p l i c a r e i s u d d e t t i p a t t e r n s .
L a p r o g r a m m a z i o n e o r i e n t a t a a g l i a s p e t t i è u n p a r a d i g m a d i p r o g r a m m a z i o n e b a s a t o s u l l a
c r e a z i o n e d i e n t i t à s o f t w a r e , g l i a s p e t t i , c h e s o v r i n t e n d o n o a l l e i n t e r a z i o n i f r a o g g e t t i n a l i z z a t e
a d e s e g u i r e u n c o m p i t o c o m u n e . I l v a n t a g g i o r i s p e t t o a l l ' a p p r o c c i o t r a d i z i o n a l e a d o g g e t t i
c o n s i s t e n e l n o n d o v e r i m p l e m e n t a r e s e p a r a t a m e n t e i n c i a s c u n o g g e t t o i l c o d i c e n e c e s s a r i o a d
e s e g u i r e q u e s t o c o m p i t o c o m u n e [ W i k i p e d i a ] .
T i p i c i e s e m p i d i r e s p o n s a b i l i t à ' s p a l m a t e ' s u m o l t e p l i c i o g g e t t i s o n o i l l o g d e l l e o p e r a z i o n i
o l a g e s t i o n e d e l l a p r o l a z i o n e .
E n t r a m b i q u e s t i c o n c e t t i s a r a n n o a p p r o f o n d i t i p i ù a v a n t i .
0 . 3 I m o d u l i
I n r e a l t à c h i a m a r l o f r a m e w o r k è f o r s e r i d u t t i v o , p o i c h è S p r i n g è c o m p o s t o d a u n a v a s t a g a m m a
d i m o d u l i , o g n u n o d e i q u a l i è u n f r a m e w o r k a s e s t a n t e . L ' a s p e t t o i n t e r e s s a n t e è c h e o g n u n o
d i q u e s t i m o d u l i l a v o r a i n m a n i e r a i n d i p e n d e n t e d a g l i a l t r i . Q u e s t o p e r m e t t e d i i n t e g r a r e
n e l l a p r o p r i a a p p l i c a z i o n e t u t t i e s o l i i m o d u l i d i i n t e r e s s e . N o n s i a m o q u i n d i c o s t r e t t i a d u n
a p p r o c c i o d e l t i p o o t u t t o o n i e n t e .
T a l i m o d u l i s i p o s s o n o r a g g r u p p a r e i n b a s e a l l e l o r o c a r a t t e r i s t i c h e p r i n c i p a l i : C o r e C o n -
t a i n e r , D a t a A c c e s s / I n t e g r a t i o n , W e b , A O P , I n s t r u m e n t a t i o n , T e s t . L ' o r g a n i z z a z i o n e d i t a l i
g r u p p i è v i s i b i l e c h i a r a m e n t e n e l l a g u r a 1 .
F i g u r a 1 : A r c h i t e t t u r a d i S p r i n g
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 7/86
I N T R O D U Z I O N E v i
N e i c a p i t o l i c h e s e g u i r a n n o v e r r a n o d e s c r i t t i q u e s t i m o d u l i u n o p e r u n o .
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 8/86
P a r t e I
C o r e T e c h n o l o g i e s
1
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 9/86
C a p i t o l o 1
I l c o n t e n i t o r e I o C
E ' p r o b a b i l m e n t e u n o d e g l i a s p e t t i i n c u i S p r i n g s i è m o s t r a t o v e r a m e n t e i n n o v a t i v o .
P e r u s u f r u i r e d i t a l e s e r v i z i o è n e c e s s a r i o i m p o r t a r e n e l p r o p r i o p r o g e t t o i d u e l e s j a r
o r g . s p r i n g f r a m e w o r k . b e a n s e o r g . s p r i n g f r a m e w o r k . c o n t e x t .
M o l t o s p e s s o n e l l e n o s t r e a p p l i c a z i o n i , c a p i t a c h e u n o g g e t t o A d e b b a u s a r e i l m e t o d o d i
u n o g g e t t o B . Q u a n d o q u e s t o s u c c e d e , t i p i c a m e n t e l ' o g g e t t o A d e v e p r i m a d i t u t t o c r e a r e
u n ' i s t a n z a d i B . Q u e s t a o p e r a z i o n e è p o s s i b i l e t r a m i t e l ' u s o d e l l ' o p e r a t o r e n e w :
/ / c l a s s e B
p u b l i c c l a s s B {
p u b l i c v o i d e s e g u i ( ) {
S y s t e m . o u t . p r i n t l n ( " C i a o M o n d o ! " ) ;
}
}
/ / c l a s s e A
p u b l i c c l a s s A {
p u b l i c s t a t i c v o i d m a i n ( S t r i n g [ ] a r g s ) {
B b = n e w B ( ) ;
b . e s e g u i ( ) ;
}
}
C o n l ' o p e r a t o r e n e w n o i s t i a m o c h i e d e n d o l ' i s t a n z i a z i o n e d e l l a c l a s s e B . O v v e r o l a c l a s s e
A c h i e d e a l l a J V M u n ' i s t a n z a d e l l a c l a s s e B , c o m e r a p p r e s e n t a t o i n g u r a 1 . 1 .
A JVM
n e w
F i g u r a 1 . 1 : C r e a z i o n e d i u n b e a n
L ' I o C p a r t e d a l l ' i d e a d i i n f r a m e z z a r e t r a l a c l a s s e A e l a J V M u n t e r z o c o m p o n e n t e , c h e
c h i a m e r e m o I O C , c h e s i p r o p o n e c o m e i n t e r m e d i a r i o . I l p a s s a g g i o , c o m ' è v i s i b i l e i n g u r a 1 . 2 ,
s a r à q u i n d i : A c h i e d e a I O C d i c h i e d e r e a J V M u n ' i s t a n z a d e l l a c l a s s e B .
2
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 10/86
C A P I T O L O 1 . I L C O N T E N I T O R E I O C 3
F i g u r a 1 . 2 : I n v e r s i o n o f C o n t r o l
D a q u i , i l c o n c e t t o d i ' i n v e r s i o n e d e l c o n t r o l l o ' : n o n s i a m o p i ù ' n o i ' a c h i e d e r e u n ' i s t a n z a ,
m a è q u a l c u n a l t r o c h e l a c h i e d e ( c e r t o , s u l l a b a s e c o m u n q u e d e l l e n o s t r e i s t r u z i o n i ) e c e l a
r e s t i t u i s c e .
M a p e r c h è i n t r o d u r r e u n ' i n d i r e z i o n e ?
L ' i d e a d i i n t r o d u r r e u n i n t e r m e d i a r i o , i n r e a l t à , n o n è p o i c o s i s t r a n a . I n e e t t i , n e l l e
a t t u a l i a p p l i c a z i o n i , m o l t o s p e s s o l a c r e a z i o n e d e i b e a n s è a d a t a a c l a s s i ( d i s o l i t o s t a t i c h e )
p r e p o s t e a q u e s t o c o m p i t o , n e l r i s p e t t o d e l p a t t e r n f a c t o r y . N e l l ' e s e m p i o i n g u r a 1 . 3 l e
c l a s s i d e l b u s i n e s s c h e h a n n o b i s o g n o d i u t i l i z z a r e c l a s s i d a o , n e c h i e d o n o l e i s t a n z e a l m o d u l o
S e r v i c e F a c t o r y .
I l v a n t a g g i o è q u e l l o d i c e n t r a l i z z a r e i l c o n c e t t o d i c r e a z i o n e ( e s o p r a t t u t t o c o n g u r a z i o n e )
d e i b e a n s a l l ' i n t e r n o d i u n ' u n i c a c l a s s e , a n c h è i l p r o b l e m a p o s s a e s s e r e g e s t i t o p i ù a g i l m e n t e .
I v a n t a g g i d i q u e s t o a p p r o c c i o s a r a n n o m e g l i o e v i d e n z i a t i p i ù a v a n t i .
Business DAO
ServiceFactory
F i g u r a 1 . 3 : E s e m p i o d i i m p l e m e n t a z i o n e d e l p a t t e r n f a c t o r y
S u p p o n e n d o d i a d o t t a r e u n a s o l u z i o n e d i q u e s t o t i p o , i l n o s t r o c o d i c e d i v e n t e r e b b e :
/ / F a c t o r y
p u b l i c a b s t r a c t c l a s s B e a n s F a c t o r y {
p u b l i c s t a t i c B g e t B ( ) {
r e t u r n n e w B ( ) ;
}
}
/ / c l a s s e A
p u b l i c c l a s s A {
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 11/86
C A P I T O L O 1 . I L C O N T E N I T O R E I O C 4
p u b l i c s t a t i c v o i d m a i n ( S t r i n g [ ] a r g s ) {
B b = B e a n s F a c t o r y . g e t B ( ) ;
b . e s e g u i ( ) ;
}
}
1 . 1 C r e a z i o n e d i u n b e a n
L ' i d e a d i I o C è q u i n d i u n a f o r m a l i z z a z i o n e d i u n a t e c n i c a g i à p r e s e n t e d a d i v e r s i a n n i n e l -
l ' i n g e g n e r i a d e l s o f t w a r e . T a l e m o d u l o c i m e t t e q u i n d i a d i s p o s i z i o n e u n a f a c t o r y g i à p r o n t a
p e r l ' u s o a l l a q u a l e d o b b i a m o s o l o d a r e l e i s t r u z i o n i p e r l a c r e a z i o n e d e i b e a n s . C o m e i n t u t t i
i f r a m e w o r k , t a l e c o n g u r a z i o n e a v v i e n e t r a m i t e l e x m l .
Q u e l l o c h e s e g u e è i l c o d i c e d ' e s e m p i o d e l l e s p r i n g - c o n g . x m l :
< ? x m l v e r s i o n = " 1 . 0 " e n c o d i n g = " U T F - 8 " ? >
< b e a n s x m l n s = " h t t p : / / w w w . s p r i n g f r a m e w o r k . o r g / s c h e m a / b e a n s "
x m l n s : x s i = " h t t p : / / w w w . w 3 . o r g / 2 0 0 1 / X M L S c h e m a - i n s t a n c e "
x s i : s c h e m a L o c a t i o n = " h t t p : / / w w w . s p r i n g f r a m e w o r k . o r g / s c h e m a / b e a n s
h t t p : / / w w w . s p r i n g f r a m e w o r k . o r g / s c h e m a / b e a n s / s p r i n g - b e a n s - 3 . 0 . x s d " >
< ! - - D e f i n i z i o n e d e i b e a n s - - >
< b e a n i d = " p i p p o " c l a s s = " e s e m p i o . B " / >
< / b e a n s >
I l t a g u s a t o p e r l a d e n i z i o n e d e i b e a n s è < b e a n > . O g n i b e a n s a n d r à d e n i t o d e n t r o u n
p r o p r i o t a g d i q u e s t o t i p o . T r a i v a r i a t t r i b u t i c h e è p o s s i b i l e s e t t a r e , d u e s o n o o b b l i g a t o r i : i d ,
c o n i l q u a l e d e n i a m o i l n o m e c h e d e c i d i a m o d i a s s e g n a r e a l b e a n i n q u e s t i o n e ( i n q u e s t o c a s o
p i p p o ) ; c l a s s , c o n i l q u a l e s p e c i c h i a m o a l c o n t a i n e r q u a l è , a l l ' i n t e r n o d e l n o s t r o p r o g e t t o , l a
c l a s s e c h e d o v r à e s s e r e u t i l i z z a t a p e r l ' i m p l e m e n t a z i o n e d i p i p p o , c o m p l e t a d i p a c k a g e i n c u i
t a l e c l a s s e s i t r o v a .
V e d i a m o a q u e s t o p u n t o c o m e c a m b i a i l c o d i c e a l l ' i n t e r n o d e l l a n o s t r a c l a s s e A .
/ / c l a s s e A
p u b l i c c l a s s A {
p u b l i c s t a t i c v o i d m a i n ( S t r i n g [ ] a r g s ) {
A p p l i c a t i o n C o n t e x t c o n t e x t =
n e w C l a s s P a t h X m l A p p l i c a t i o n C o n t e x t ( n e w S t r i n g [ ] { " s p r i n g - c o n f i g . x m l " } ) ;
B b = ( B ) c o n t e x t . g e t B e a n ( " p i p p o " ) ;
b . e s e g u i ( ) ;
}
}
A p p l i c a t i o n C o n t e x t è l ' i n t e r f a c c i a c h e c i p e r m e t t e d i c o m u n i c a r e c o n i l c o n t a i n e r I o C e
u t i l i z z a r e i s e r v i z i c h e m e t t e a d i s p o s i z i o n e . P e r p o t e r u s u f r u i r e d i t a l i s e r v i z i c r e i a m o l ' o g g e t t o
c o n t e x t ( c h e q u i n d i è d i t i p o A p p l i c a t i o n C o n t e x t ) , p a s s a n d o g l i i l l e d i c o n g u r a z i o n e a c u i
d e v e f a r e r i f e r i m e n t o , e i n c u i n e l l o s p e c i c o a b b i a m o d e n i t o i l b e a n p i p p o . L ' a r g o m e n t o
d e l l a f u n z i o n e C l a s s P a t h X m l A p p l i c a t i o n C o n t e x t ( ) è u n a r r a y d i s t r i n g h e p o i c h è p o s s o n o e s s e r e
p a s s a t i p i ù l e . x m l .
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 12/86
C A P I T O L O 1 . I L C O N T E N I T O R E I O C 5
A q u e s t o p u n t o p o s s i a m o c h i e d e r e a l c o n t a i n e r d i r e s t i t u i r c i u n ' i s t a n z a d e l b e a n c h e a b b i -
a m o c h i a m a t o ' p i p p o ' , t r a m i t e i l m e t o d o g e t B e a n ( S t r i n g n o m e ) . T a l e m e t o d o è s o v r a c c a r i c o .
I n q u e s t a s p e c i c a d e n i z i o n e , a c c e t t a c o m e p a r a m e t r o u n a s t r i n g a ( i l n o m e d e l b e a n c h e
v o g l i a m o ) . R e s t i t u i s c e u n o b j e c t , e q u e s t o c i c o s t r i n g e a d u n c a s t .
S e v o g l i a m o e v i t a r e i l c a s t p o s s i a m o a n c h e s c r i v e r e :
B b = c o n t e x t . g e t B e a n ( " p i p p o " , B . c l a s s ) ;
A v e n d o p a s s a t o l a c l a s s e B t r a i p a r a m e t r i , i l c a s t n o n è n e c e s s a r i o .
1 . 2 C o n g u r a z i o n e d i u n b e a n
N a t u r a l m e n t e , s e i l r u o l o d e l l ' i n t e r m e d i a r i o f o s s e s o l o q u e l l o d i c r e a r e o g g e t t i , s a r e b b e p i u t -
t o s t o c o m p l i c a t o c a p i r n e l ' u t i l i t à .
M o l t o s p e s s o c a p i t a c h e u n b e a n , p r i m a d i e s s e r e u s a t o , d e b b a e s s e r e c o n g u r a t o . P o t r e b b e
e s s e r e i l c a s o d i u n D A O , c h e p r i m a d i e s s e r e u s a t o d e v o n o e s s e r e s e t t a t i i s u o i p a r a m e t r i p e r
l a c o n n e s s i o n e a d u n d b . I n g e n e r a l e , o g n i o g g e t t o i l c u i c o m p o r t a m e n t o è d e t e r m i n a t o d a l
v a l o r e d e i s u o i a t t r i b u t i , d e v e e s s e r e c o n g u r a t o p r i m a d i e s s e r e u s a t o .
I n u n c a s o c o m e q u e l l o s o p r a d e s c r i t t o , a l l a c r e a z i o n e d i u n b e a n , d o v r e b b e r o s e g u i r e u n
e l e n c o d i c h i a m a t e a i s u o i m e t o d i s e t ( ) p e r s e t t a r e t u t t i g l i a t t r i b u t i d e l b e a n , o i n a l t e r n a t i v a ,
c r e a r e u n c o s t r u t t o r e a d h o c p e r p o t e r l o f a r e .
I l m o d u l o I o C d i S p r i n g , c o n s e n t e d i s e t t a r e i p a r a m e t r i d i c o n g u r a z i o n e d i r e t t a m e n t e
d e n t r o i l l e d i c o n g u r a z i o n e .
S u p p o n i a m o c h e l a c l a s s e B s i a f a t t a c o s i :
/ / c l a s s e B
p u b l i c c l a s s B {
p r i v a t e S t r i n g s t r i n g a ;
p u b l i c v o i d e s e g u i ( ) {
S y s t e m . o u t . p r i n t l n ( t h i s . s t r i n g a ) ;
}
/ / m e t o d i s e t ( ) e g e t ( ) . . .
}
I n q u e s t o m o d o , i l m e t o d o e s e g u i ( ) s c r i v e s u l l a c o n s o l e l a s t r i n g a c o n c u i i n q u e l m o m e n t o
è s t a t o s e t t a t o l ' o g g e t t o . I l l e d i c o n g u r a z i o n e d i S p r i n g a q u e s t o p u n t o p o t r e b b e d i v e n t a r e
q u e s t o :
< ? x m l v e r s i o n = " 1 . 0 " e n c o d i n g = " U T F - 8 " ? >
< b e a n s x m l n s = " h t t p : / / w w w . s p r i n g f r a m e w o r k . o r g / s c h e m a / b e a n s "
x m l n s : x s i = " h t t p : / / w w w . w 3 . o r g / 2 0 0 1 / X M L S c h e m a - i n s t a n c e "
x s i : s c h e m a L o c a t i o n = " h t t p : / / w w w . s p r i n g f r a m e w o r k . o r g / s c h e m a / b e a n s
h t t p : / / w w w . s p r i n g f r a m e w o r k . o r g / s c h e m a / b e a n s / s p r i n g - b e a n s - 3 . 0 . x s d " >
< ! - - D e f i n i z i o n e d e i b e a n s - - >
< b e a n i d = " p i p p o " c l a s s = " e s e m p i o . B " >
< p r o p e r t y n a m e = " s t r i n g a " v a l u e = " C i a o M o n d o ! " / >
< / b e a n >
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 13/86
C A P I T O L O 1 . I L C O N T E N I T O R E I O C 6
< / b e a n s >
E ' s t a t o a g g i u n t o u n n u o v o n o d o , i n t e r n o a < b e a n > c h e è < p r o p e r t y > . C o n q u e s t o
t a g è p o s s i b i l e e l e n c a r e t u t t i g l i a t t r i b u t i c h e s i v o g l i o n o c o n g u r a r e c o n t e s t u a l m e n t e a l l a
c r e a z i o n e d e l b e a n . O g n i a t t r i b u t o v i e n e i d e n t i c a t o c o n l ' a t t r i b u t o n a m e , v a l o r i z z a t o c o n
i l n o m e c o n c u i è s t a t o c h i a m a t o a l l ' i n t e r n o d e l l a c l a s s e B . I l s u o v a l o r e v i e n e s e t t a t o c o n
l ' a t t r i b u t o v a l u e .
Q u e s t a d e n i z i o n e è a n c h e d o t a t a d i u n m e c c a n i s m o a u t o m a t i c o d i c o n v e r s i o n e d e i v a l o r i .
S e p e r e s e m p i o s c r i v e s s i m o :
< ! - - b e a n c h e r a p p r e s e n t a u n p u n t o n e l p i a n o - - >
< b e a n i d = " o r i g i n e " c l a s s = " e s e m p i o . P u n t o " >
< p r o p e r t y n a m e = " x " v a l u e = " 0 . 0 " / >
< p r o p e r t y n a m e = " y " v a l u e = " 0 . 0 " / >
< / b e a n >
i l s i s t e m a , c o n o s c e n d o i l t i p o d i x e y , s a i n a u t o m a t i c o c h e i v a l o r i ' 0 . 0 ' s o n o n u m e r i e
c o m e t a l i l i c o n v e r t i r à . S e x f o s s e d i t i p o S t r i n g , t r a t t e r e b b e ' 0 . 0 ' c o m e u n a s t r i n g a .
L a c l a s s e A n o n s u b i s c e a l c u n a m o d i c a . U n a c h i a m a t a d e l t i p o :
B b = c o n t e x t . g e t B e a n ( " p i p p o " , B . c l a s s ) ;
r e s t i t u i r e b b e u n ' i s t a n z a d i B g i à c o n g u r a t a c o s i c o m e s p e c i c a t o n e l l e s p r i n g - c o n g . x m l .
E ' f a c i l e c a p i r e c o m e q u e s t o m e c c a n i s m o r e n d e r e b b e p i ù s e m p l i c e , p e r f a r e u n e s e m p i o ,
l ' u s o d i u n D A O . I l l e s p r i n g - c o n g . x m l p o t r e b b e c o n t e n e r e u n f r a m m e n t o d e l t i p o .
< ! - - d a o - - >
< b e a n i d = " d a o " c l a s s = " e s e m p i o . C l a s s e D A O " >
< p r o p e r t y n a m e = " u r l " v a l u e = " j d b c : m y s q l : / / l o c a l h o s t : 3 3 0 6 / m y d b " / >
< p r o p e r t y n a m e = " d r i v e r " v a l u e = " c o m . m y s q l . j d b c . D r i v e r " / >
< p r o p e r t y n a m e = " u s e r n a m e " v a l u e = " a d m i n " / >
< p r o p e r t y n a m e = " p a s s w o r d " v a l u e = " a d m i n " / >
< / b e a n >
I n q u e s t o m o d o , c h i e d e r e a l c o n t a i n e r u n ' i s t a n z a d i ' d a o ' r e s t i t u i r e b b e u n a d a o g i à c o n g -
u r a t o e p r o n t o a l l ' u s o .
O v v i a m e n t e è p o s s i b i l e d e s c r i v e r e p i ù c o n g u r a z i o n i d i v e r s e p e r l o s t e s s o b e a n . P o t r e i p e r
e s e m p i o c r e a r e p i ù d i u n a c o n g u r a z i o n e d i v e r s a p e r C l a s s e D A O , c h i a m a n d o n e u n a o l ' a l t r a
i n f u n z i o n e d e l l o s p e c i c o D B d a u t i l i z z a r e .
N o n è p o s s i b i l e , p e r ò , a v e r e d u e b e a n c o n l o s t e s s o i d .
A n c h è q u e s t o m e c c a n i s m o p o s s a f u n z i o n a r e , è n e c e s s a r i o c h e s i a n o s t a t i c r e a t i i m e t o d i
s e t ( ) d i t u t t i g l i a t t r i b u t i c h e S p r i n g d o v r à s e t t a r e .
I l f a t t o c h e s i a i l c o n t a i n e r a s e t t a r e d i r e t t a m e n t e g l i a t t r i b u t i , p r e n d e i l n o m e d i D i r e c t
I n j e c t i o n ( i n i e z i o n e d i r e t t a , D I ) .
1 . 3 C o s t r u i r e u n a r e t e d i o g g e t t i
E s e l ' a t t r i b u t o d i u n b e a n è u n r i f e r i m e n t o a d u n a l t r o o g g e t t o ?
U n ' a p p l i c a z i o n e , t i p i c a m e n t e , è s t r u t t u r a t a c o m e u n a r e t e d i o g g e t t i , p i ù o m e n o t t a , c h e
c o l l a b o r a n o t r a l o r o . O g n i o g g e t t o , q u i n d i , s v o l g e i l s u o c o m p i t o u s a n d o n e a l t r i .
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 14/86
C A P I T O L O 1 . I L C O N T E N I T O R E I O C 7
U n o d e g l i a s p e t t i p i ù u t i l i d e l m o d u l o I o C d i S p r i n g è c h e i l m e c c a n i s m o d i D I f u n z i o n a
a n c h e n e l c a s o i n c u i l ' a t t r i b u t o d a s e t t a r e è u n r i f e r i m e n t o a d u n a l t r o o g g e t t o ! V e d i a m o u n
e s e m p i o . . .
S u p p o n i a m o d i a v e r e l a s e g u e n t e s i t u a z o n e :
/ / c l a s s e B
p u b l i c c l a s s B {
p r i v a t e S t r i n g s t r i n g a ;
p u b l i c v o i d e s e g u i ( ) {
S y s t e m . o u t . p r i n t l n ( t h i s . s t r i n g a ) ;
}
}
/ / c l a s s e A
p u b l i c c l a s s A {
p r i v a t e B b ;
p u b l i c v o i d e s e g u i ( ) {
t h i s . b . e s e g u i ( ) ;
}
}
/ / c l a s s e M a i n
p u b l i c c l a s s M a i n {
p u b l i c s t a t i c v o i d m a i n ( S t r i n g [ ] a r g s ) {
A p p l i c a t i o n C o n t e x t c o n t e x t =
n e w C l a s s P a t h X m l A p p l i c a t i o n C o n t e x t (
n e w S t r i n g [ ] { " s p r i n g - c o n f i g . x m l " } ) ;
A a = c o n t e x t . g e t B e a n ( " p i p p o " , A . c l a s s ) ;
a . e s e g u i ( ) ;
}
}
I n q u e s t o e s e m p i o , l ' o g g e t t o A , p e r e s e g u i r e i l m e t o d o e s e g u i ( ) h a b i s o g n o d i u t i l i z z a r e
l ' o g g e t t o B .
I l l e d i c o n g u r a z i o n e d i S p r i n g d i v e n t a :
< ! - - b e a n A - - >
< b e a n i d = " p i p p o " c l a s s = " e s e m p i o . A " >
< p r o p e r t y n a m e = " b " r e f = " p l u t o " / >
< / b e a n >
< ! - - b e a n B - - >
< b e a n i d = " p l u t o " c l a s s = " e s e m p i o . B " >
< p r o p e r t y n a m e = " s t r i n g a " v a l u e = " C i a o M o n d o ! " / >
< / b e a n >
Q u i v e d i a m o u n a l t r o u s o d e l t a g < p r o p e r t y > . P o i c h è l a v a r i a b i l e b è u n r i f e r i m e n t o a d
u n a l t r o o g g e t t o , a l p o s t o d e l l ' a t t r i b u t o v a l u e s i u s a l ' a t t r i b u t o r e f . T a l e a t t r i b u t o p e r m e t t e d i
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 15/86
C A P I T O L O 1 . I L C O N T E N I T O R E I O C 8
d i r e a l c o n t a i n e r c h e q u e l l a v a r i a b i l e v a f a t t a r i f e r i r e a d u n a l t r o b e a n . I l v a l o r e d e l l ' a t t r i b u t o
r e f è l ' i d c h e v i e n e d e n i t o p e r u n b e a n . N e l n o s t r o c a s o s p e c i c o , q u a n d o v e r r à f a t t a l a
c h i a m a t a
A a = c o n t e x t . g e t B e a n ( " p i p p o " , A . c l a s s ) ;
v e r r à c r e a t a u n ' i s t a n z a d i ' p l u t o ' e p o i ' i n i e t t a t a ' n e l l a v a r i a b i l e b d e l b e a n ' p i p p o ' .
E ' f a c i l e i m m a g i n a r e c o m e c o n q u e s t o m e c c a n i s m o s i a p o s s i b i l e t i r a r e s u c o n u n a s e m -
p l i c e i s t r u z i o n e u n a r e t e d i o g g e t t i c o m p l i c a t a q u a n t o s i v u o l e . I l p r o g r a m m a t o r e d e v e s o l o
o p p o r t u n a m e n t e c o n g u r a r l a a l l ' i n t e r n o d e l l e s p r i n g - c o n g . x m l .
1 . 4 L e c o l l e z i o n i
P u ò c a p i t a r e , n a t u r a l m e n t e , c h e u n a t t r i b u t o d i u n o g g e t t o s i a u n a c o l l e z i o n e ( l i s t , m a p , s e t
o p r o p e r t i e s ) . I n t a l c a s o l a s i n t a s s i n e l s p r i n g - c o n g . x m l p u ò e s s e r e l a s e g u e n t e :
< b e a n i d = " o g g e t t o C o m p l i c a t o " c l a s s = " p r o g e t t o . C o m p l e x O b j e c t " >
< ! - - P e r l e l i s t e - - >
< p r o p e r t y n a m e = " l i s t a " >
< l i s t >
< ! - - I n s e r i s c o l ' e l e m e n t o p e r v a l o r e - - >
< v a l u e > e l e m e n t o q u a l u n q u e < / v a l u e >
< ! - - O p p u r e l o i n s e r i s c o p e r r i f e r i m e n t o - - >
< r e f b e a n = " m i o D a t a S o u r c e " / >
< / l i s t >
< / p r o p e r t y >
< ! - - M a p p a - - >
< p r o p e r t y n a m e = " m a p p a " >
< m a p >
< ! - - E l e m e n t o i n s e r i t o p e r v a l o r e - - >
< e n t r y k e y = " e l e m e n t o " v a l u e = " u n a s t r i n g a q u a l u n q u e " / >
< ! - - E l e m e n t o i n s e r i t o p e r r i f e r i m e n t o - - >
< e n t r y k e y = " r i f e r i m e n t o " v a l u e - r e f = " m i o D a t a S o u r c e " / >
< / m a p >
< / p r o p e r t y >
< ! - - S e t - - >
< p r o p e r t y n a m e = " s e t " >
< s e t >
< v a l u e > u n a s t r i n g a q u a l u n q u e < / v a l u e >
< r e f b e a n = " m i o D a t a S o u r c e " / >
< / s e t >
< / p r o p e r t y >
< b e a n >
1 . 4 . 1 I g e n e r i c s
D a l l a J a v a 5 i n p o i , è p o s s i b i l e u t i l i z z a r e l e c o l l e z i o n i t i p i z z a t e . U t i l i z z a n d o i l m e c c a n i s m o d i
D I p e r s e t t a r e u n a c o l l e z i o n e a l l ' i n t e r n o d i u n b e a n , p o s s i a m o t r a r r e v a n t a g g i o d a l m e c c a n i s m o
d i c o n v e r s i o n e d i t i p i d i S p r i n g . A d e s e m p i o :
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 16/86
C A P I T O L O 1 . I L C O N T E N I T O R E I O C 9
p u b l i c c l a s s P i p p o {
p r i v a t e M a p < S t r i n g , F l o a t > c o n t i ;
p u b l i c v o i d s e t C o n t i ( M a p < S t r i n g , F l o a t > c o n t i ) {
t h i s . c o n t i = c o n t i ;
}
}
< b e a n s >
< b e a n i d = " p i p p o " c l a s s = " x . y . P i p p o " >
< p r o p e r t y n a m e = " c o n t i " >
< m a p >
< e n t r y k e y = " u n o " v a l u e = " 9 . 9 9 " / >
< e n t r y k e y = " d u e " v a l u e = " 2 . 7 5 " / >
< e n t r y k e y = " s e i " v a l u e = " 3 . 9 9 " / >
< / m a p >
< / p r o p e r t y >
< / b e a n >
< / b e a n s >
L e s t r i n g h e ' 9 . 9 9 ' , ' 2 . 7 5 ' e ' 3 . 9 9 ' v e r r a n n o a u t o m a t i c a m e n t e c o n v e r t i t e i n F l o a t .
1 . 5 L a s t r i n g a v u o t a e i l n u l l
S p r i n g t r a t t a u n a r g o m e n t o v u o t o c o m e u n a s t r i n g a v u o t a . S c r i v e n d o :
< b e a n i d = " e s e m p i o " c l a s s = " e s e m p i . P r o v a " >
< p r o p e r t y n a m e = " e m a i l " v a l u e = " " / >
< / b e a n >
l ' a t t r i b u t o e m a i l v e r r à s e t t a t o c o m e s e a v e s s i m o l a n c i a t o i l s e g u e n t e c o m a n d o :
s e t E m a i l ( " " ) ;
S e s i v u o l e i n v e c e c o n s i d e r a r e i l v a l o r e n u l l , s i d e v e s c r i v e r e :
< b e a n i d = " e s e m p i o " c l a s s = " e s e m p i . P r o v a " >
< p r o p e r t y n a m e = " e m a i l " > < n u l l / > < / p r o p e r t y >
< / b e a n >
1 . 6 I n i z i a l i z z a z i o n e L a z y
L ' A p p l i c a t i o n C o n t e x t t i p i c a m e n t e e e t t u a u n a p r e - i s t a n z i a z i o n e d e i b e a n s i n g l e t o n s i n f a s e
d i i n i z i a l i z z a z i o n e d e l l ' a p p l i c a z i o n e . Q u e s t o c o m p o r t a m e n t o è m o l t o c o m o d o p e r c h è p e r m e -
t t e d i i n d i v i d u a r e a l c u n i e r r o r i s u b i t o p i u t t o s t o c h e d o p o q u a l c h e o r a o a d d i r i t t u r a d o p o
q u a l c h e g i o r n o . T u t t a v i a , q u a l o r a n o n s i d e s i d e r i q u e s t o c o m p o r t a m e n t o , è p o s s i b i l e c h i e d e r e
e s p l i c i t a m e n t e a l c o n t a i n e r u n ' i n i z i a l i z z a z i o n e d i t i p o l a z y d i u n o o p i ù b e a n .
< b e a n i d = " l a z y " c l a s s = " c o m . f o o . E x p e n s i v e T o C r e a t e B e a n " l a z y - i n i t = " t r u e " / >
< b e a n n a m e = " n o t . l a z y " c l a s s = " c o m . f o o . A n o t h e r B e a n " / >
N e l c a s o d e l b e a n c h i a m a t o l a z y , q u e s t o v e r r à i s t a n z i a t o s o l o q u a n d o v e r r à e s p l i c i t a m e n t e
i n d i c a t o a l c o n t a i n e r .
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 17/86
C A P I T O L O 1 . I L C O N T E N I T O R E I O C 1 0
1 . 7 L o s c o p e
L o s c o p e d i u n b e a n r a p p r e s e n t a l ' a r c o d i t e m p o i n c u i i l b e a n d e v e e s s e r e u t i l i z z a b i l e e a l d i
f u o r i d e l q u a l e n o n l o d e v e e s s e r e . S p r i n g s u p p o r t a c i n q u e d i v e r s i s c o p e , t r e d e i q u a l i s o n o
d i s p o n i b i l i s o l o i n c o n t e s t i W e b . L a t a b e l l a 1 . 1 r i a s s u m e g l i s c o p e d i s p o n i b i l i :
s c o p e d e s c r i z i o n e
s i n g l e t o n i l b e a n è l ' u n i c o d e l s u o t i p o a l l ' i n t e r n o d e l c o n t a i n e r
p r o t o t y p e e s i s t e u n b e a n p e r o g n i i s t a n z a c r e a t a
r e q u e s t i l b e a n e s i s t e s o l o n e l l ' a m b i t o d i u n a s i n g o l a r i c h i e s t a H T T P
s e s s i o n i l b e a n e s i s t e n e l l ' a m b i t o d i u n ' i n t e r a H T T P S e s s i o n
g l o b a l S e s s i o n i l b e a n e s i s t e n e l l ' a m b i t o d i u n a H T T P S e s s i o n g l o b a l e
T a b e l l a 1 . 1 : s c o p e d e i b e a n
P e r l a d e n i z i o n e d e l l o s c o p e d i u n b e a n , s i u t i l i z z a l ' a t t r i b u t o s c o p e d e l t a g < b e a n > :
< b e a n i d = " p i p p o " c l a s s = " e s e m p i . P i p p o " s c o p e = " p r o t o t y p e " / >
I v a l o r i a m m e s s i s o n o q u e l l i e s p r e s s i i n t a b e l l a 1 . 1 .
Q u a n d o l o s c o p e d i u n b e a n v i e n e d e n i t o s i n g l e t o n , i l c o n t a i n e r m e m o r i z z a l ' i s t a n z a
d e l l ' o g g e t t o a l l ' i n t e r n o d i u n a c a c h e . A d o g n i s u c c e s s i v a r i c h i e s t a d i q u e l b e a n , i l c o n t a i n e r
r e s t i t u i r à s e m p r e l a s t e s s a i s t a n z a . Q u e s t o t i p o d i s c o p e v i e n e a d o t t a t o d a S p r i n g d i d e f a u l t .
Q u a n d o i n v e c e l o s c o p e v i e n e d e n i t o p r o t o t y p e , i l c o n t a i n e r a d o g n i r i c h i e s t a d e l b e a n , n e
c r e a u n ' i s t a n z a n u o v a , s o v r a s c r i v e n d o q u e l l a v e c c h i a .
G l i a l t r i t r e s c o p e r i s p o n d o n o a l l e s t e s s e r e g o l e d e l l e w e b a p p l i c a t i o n .
S p r i n g m e t t e i n o l t r e a d i s p o s i z i o n e u n s i s t e m a p e r c r e a r e s c o p e s p e r s o n a l i z z a t i ( v e d i 3 . 5
d e l l e r e f e r e n c e ) .
1 . 8 C i c l o d i v i t a
S p r i n g c o n s e n t e d i s p e c i c a r e q u a l i a z i o n i d e b b a n o e s s e r e s v o l t e d u r a n t e l ' i n i z i a l i z z a z i o n e d i
u n b e a n , c o s i c o m e a n c h e l e p r e c e d u r e d a e s e g u i r e p r i m a d e l l a s u a d i s t r u z i o n e .
P e r q u a n t o r i g u a r d a l ' i n i z i a l i z z a z i o n e , è p o s s i b i l e d e n i r e a l l ' i n t e r n o d e l b e a n i l m e t o d o
i n i t ( ) i n v o c a n d o l o p o i i n f a s e d i c o n g u r a z i o n e c o n l ' a t t r i b u t o i n i t - m e t h o d . A d e s e m p i o :
p u b l i c c l a s s P i p p o {
/ / . . .
p u b l i c v o i d i n i t ( ) {
/ / I n i z i a l i z z a z i o n e d e l l ' o g g e t t o . . .
}
}
< b e a n i d = " p i p p o " c l a s s = " e s e m p i . P i p p o " i n i t - m e t h o d = " i n i t " / >
Q u a n d o a l c o n t a i n e r v i e n e c h i e s t a u n ' i s t a n z a d i p i p p o , s u b i t o d o p o l a s u a c r e a z i o n e v e r r à
i n v o c a t o i l m e t o d o i n i t ( ) .
L o s t e s s o d i s c o r s o v a l e a n c h e p e r l a f a s e d i d i s t r u z i o n e d i u n b e a n . I n q u e s t o c a s o l ' a t t r i b u t o
d a u s a r e è d e s t r o y - m e t h o d . A d e s e m p i o :
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 18/86
C A P I T O L O 1 . I L C O N T E N I T O R E I O C 1 1
p u b l i c c l a s s P i p p o {
/ / . . .
p u b l i c v o i d c l e a n u p ( ) {
/ / D i s t r u z i o n e d e l l ' o g g e t t o . . .
}
}
< b e a n i d = " p i p p o " c l a s s = " e s e m p i . P i p p o " d e s t r o y - m e t h o d = " c l e a n u p " / >
I n q u e s t o m o d o , p r i m a d e l l a d i s t r u z i o n e d e l b e a n p i p p o v e r r a n n o e s e g u i t e t u t t e l e o p -
e r a z i o n i a l l ' i n t e r n o d e l m e t o d o c l e a n u p ( ) ( a d e s e m p i o l a c h i u s u r a d e l l e c o n n e s s i o n i d i u n
d a o ) .
1 . 9 E s t e n s i o n e d e l c o n t a i n e r
V e d i a m o o r a a l c u n e f u n z i o n a l i t à c h e c i p e r m e t t o n o d i e s t e n d e r e l e f u n z i o n a l i t à d e l c o n t a i n e r .
1 . 9 . 1 B e a n P o s t P r o c e s s o r
L ' I o C p e r m e t t e d i p o t e r e s t e n d e r e a l c u n e f u n z i o n a l i t à s u l c o n t r o l l o d e l c i c l o d i v i t a d e i b e a n ,
f a c e n d o u s o d i a p p o s i t e i n t e r f a c c e . U n a d i q u e s t e è l a B e a n P o s t P r o c e s s o r . T a l e i n t e r f a c c i a è
m o s t r a t a d i s e g u i t o :
p u b l i c i n t e r f a c e B e a n P o s t P r o c e s s o r {
O b j e c t p o s t P r o c e s s B e f o r e I n i t i a l i z a t i o n ( O b j e c t b e a n , S t r i n g n a m e )
t h r o w s B e a n s E x c e p t i o n ;
O b j c e t p o s t P r o c e s s A f t e r I n i t i a l i z a t i o n ( O b j e c t b e a n , S t r i n g n a m e )
t h r o w s B e a n s E x c e p t i o n ;
}
E ' s u c i e n t e s c r i v e r e u n a c l a s s e c h e i m p l e m e n t i q u e s t a i n t e r f a c c i a e d i c h i a r a r l a c o m e
b e a n a l l ' i n t e r n o d e l l e d i c o n g u r a z i o n e d i s p r i n g . A q u e s t o p u n t o , p r i m a d e l l a f a s e d i
i n i z i a l i z z a z i o n e d i o g n i b e a n v e r r à r i c h i a m a t o i l m e t o d o p o s t P r o c e s s B e f o r e I n i t i a l i z a t i o n ( . . . ) e
d o p o l ' i n i z i a l i z z a z i o n e i l m e t o d o p o s t P r o c e s s A f t e r I n i t i a l i z a t i o n ( . . . ) .
L ' e s e m p i o m o l t o s e m p l i c e c h e s e g u e m o s t r a u n B e a n P o s t P r o c e s s o r c h e c h i a m a i l m e t o d o
t o S t r i n g ( ) o g n i v o l t a c h e v i e n e c r e a t o u n n u o v o b e a n .
p u b l i c c l a s s M i o B e a n P o s t P r o c e s s o r i m p l e m e n t s B e a n P o s t P r o c e s s o r {
/ / r i t o r n o i l b e a n a p p e n a i s t a n z i a t o c o s ì c o m ' è
p u b l i c O b j e c t p o s t P r o c e s s B e f o r e I n i t i a l i z a t i o n ( O b j e c 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 B e a n s E x c e p t i o n {
r e t u r n b e a n ;
}
p u b l i c O b j e c t p o s t P r o c e s s A f t e r I n i t i a l i z a t i o n ( O b j e c 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 B e a n s E x c e p t i o n {
S y s t e m . o u t . p r i n t l n (
" B e a n ' " + b e a n N a m e + " ' c r e a t o : " + b e a n . t o S t r i n g ( )
) ;
r e t u r n b e a n ;
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 19/86
C A P I T O L O 1 . I L C O N T E N I T O R E I O C 1 2
}
}
A q u e s t o p u n t o è s u c i e n t e d i c h i a r a r l o a l l ' i n t e r n o d e l s p r i n g - c o n g . x m l :
< b e a n c l a s s = " e s e m p i . M i o B e a n P o s t P r o c e s s o r " / >
D a n o t a r e c h e q u e s t o b e a n n o n h a l ' a t t r i b u t o i d .
I m m a g i n a n d o u n a s i t u a z i o n e d e l t i p o
/ / c l a s s e P u n t o
p u b l i c c l a s s P u n t o {
p r i v a t e i n t x ;
p r i v a t e i n t y ;
@ O v e r r i d e
p u b l i c S t r i n g t o S t r i n g ( ) {
r e t u r n " x = " + t h i s . g e t X ( ) + " y = " + t h i s . g e t Y ( ) ;
}
. . .
}
/ / c o n f i g u r a z i o n e p e r S p r i n g
< b e a n i d = " p u n t o " c l a s s = " e s e m p i . P u n t o " >
< p r o p e r t y n a m e = " x " v a l u e = " 1 " / >
< p r o p e r t y n a m e = " y " v a l u e = " 3 " / >
< / b e a n >
i l m e t o d o m a i n s e g u e n t e
p u b l i c s t a t i c v o i d m a i n ( f i n a l S t r i n g [ ] a r g s ) t h r o w s E x c e p t i o n {
A p p l i c a t i o n C o n t e x t c o n t e x t =
n e w C l a s s P a t h X m l A p p l i c a t i o n C o n t e x t (
n e w S t r i n g [ ] { " s p r i n g - c o n f i g . x m l " } ) ;
P u n t o p = c o n t e x t . g e t B e a n ( " p u n t o " ) ;
}
p r o d u r r e b b e u n o u t p u t d e l t i p o
B e a n ' p u n t o ' c r e a t o : x = 1 y = 3
1 . 9 . 2 B e a n F a c t o r y P o s t P r o c e s s o r
E s i s t e a n c h e i l c o n c e t t o d i B e a n F a c t o r y P o s t P r o c e s s o r c h e a t t r a v e r s o i l m e t o d o p o s t P r o c e s s -
B e a n F a c t o r y ( . . . ) p e r m e t t e d i a g g i u n g e r e d e l c o m p o r t a m e n t o d o p o c h e i l c o n t a i n e r h a c a r i c a t o
l e d e n i z i o n i d e i b e a n s , m a p r i m a c h e g l i s t e s s i s i a n o i s t a n z i a t i . N o n v a q u i n d i a i n s e r i r s i n e l
c i c l o d i v i t a d e i b e a n s , m a i n q u e l l o d e l l o s t e s s o c o n t a i n e r . L ' i n t e r f a c c i a è l a s e g u e n t e :
p u b l i c i n t e r f a c e B e a n F a c t o r y P o s t P r o c e s s o r {
p u b l i c v o i d p o s t P r o c e s s B e a n F a c t o r y (
C o n f i g u r a b l e L i s t a b l e B e a n F a c t o r y b e a n F a c t o r y )
t h r o w s B e a n s E x c e p t i o n ;
}
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 20/86
C A P I T O L O 1 . I L C O N T E N I T O R E I O C 1 3
A n c h e i n q u e s t o c a s o è s u c i e n t e c r e a r e u n b e a n c h e i m p l e m e n t i q u e s t a i n t e r f a c c i a e
d e n i r n e l a c o n g u r a z i o n e a l l ' i n t e r n o d e l l o s p r i n g - c o n g . x m l .
1 . 9 . 3 B e a n F a c t o r y
E ' p o s s i b i l e i m p l e m e n t a r e l ' i n t e r f a c c i a o r g . s p r i n g f r a m e w o r k . b e a n s . f a c t o r y . F a c t o r y B e a n p e r t u t -
t i q u e g l i o g g e t t i c h e s o n o e s s i s t e s s i d e l l e f a c t o r y . T a l e i n t e r f a c c i a è d a c o n s i d e r a r e c o m e
u n ' o c c a s i o n e p e r a g g i u n g e r e f u n z i o n a l i t à l o g i c h e d i i s t a n z i a z i o n e a l c o n t a i n e r I o C .
Q u a l o r a s i a b b i a d e l c o d i c e m o l t o c o m p l e s s o p e r l ' i n i z i a l i z z a z i o n e c h e r i m a n e m e g l i o e s -
p r i m e r e d i r e t t a m e n t e i n j a v a i n v e c e c h e c o n m o l t i s s i m o c o d i c e X M L , è p o s s i b i l e c r e a r e u n a
p r o p r i a F a c t o r y B e a n , s c r i v e r e l ' i n i z i a l i z z a z i o n e a l l ' i n t e r n o d i q u e s t a c l a s s e e i n n e i n t e g r a r e
t a l e c l a s s e a l l ' i n t e r n o d e l c o n t a i n e r .
Q u e s t a i n t e r f a c c i a p r o v v e d e a i s e g u e n t i t r e m e t o d i :
O b j e c t g e t O b j e c t ( ) : r i t o r n o u n ' i s t a n z a d e l l ' o g g e t t o c h e q u e s t a f a c t o r y c r e a ;
b o o l e a n i s S i n g l e t o n ( ) : r i t o r n a t r u e s e q u e s t a F a c t o r y B e a n r i t o r n a u n s i n g l e t o n , f a l s e
a l t r i m e n t i ;
C l a s s g e t O b j e c t T y p e ( ) : r i t o r n a i l t i p o r i t o r n a t o d a g e t O b j e c t ( ) o n u l l s e i l t i p o n o n è
n o t o a p r i o r i ;
A p p l i c a t i o n C o n t e x t e s t e n d e q u e s t a i n t e r f a c c i a .
1 . 1 0 E r e d i t a r i e t à
L a d e n i z i o n e d i u n b e a n p u ò c o m p r e n d e r e l a c o n g u r a z i o n e d i m o l t e i n f o r m a z i o n i . L a
d e n i z i o n e d i u n b e a n g l i o e r e d i t a t u t t e q u e s t e i n f o r m a z i o n i . I n o l t r e p u ò a n c h e s o v r a s c r i v e r e
a l c u n i v a l o r i o a g g i u n g e r n e d i n u o v i , i n b a s e a l l e n e c e s s i t à .
Q u e s t o t i p o d i c o n g u r a z i o n e è p o s s i b i l e t r a m i t e l ' a t t r i b u t o p a r e n t d e l t a g < b e a n > , c o m e
m o s t r a t o n e l l ' e s e m p i o s e g u e n t e :
< b e a n i d = " i n h e r i t e d T e s t B e a n " a b s t r a c t = " t r u e " c l a s s = " e s e m p i . T e s t B e a n " >
< p r o p e r t y n a m e = " n a m e " v a l u e = " p a r e n t " / >
< p r o p e r t y n a m e = " a g e " v a l u e = " 1 " / >
< / b e a n >
< b e a n i d = " i n h e r i t s W i t h D i f f e r e n t C l a s s " c l a s s = " e s e m p i . D e r i v e d T e s t B e a n "
p a r e n t = " i n h e r i t e d T e s t B e a n " i n i t - m e t h o d = " i n i t i a l i z e " >
< p r o p e r t y n a m e = " n a m e " v a l u e = " o v e r r i d e " / >
< ! - - I l v a l o r e 1 s u l l a p r o p r i e t à a g e v i e n e e r e d i t a t o d a l p a d r e - - >
< ! - - l ' a t t r i b u t o n a m e i n v e c e v i e n e s o v r a s c r i t t o - - >
< / b e a n >
L a d e n i z i o n e d e l b e a n g l i o u s a l a c l a s s e d a l l a d e n i z i o n e d e l p a d r e , s e n o n n e è s t a t a
s p e c i c a t a n e s s u n a , m a p u ò a n c h e s o v r a s c r i v e r l a . I n q u e s t ' u l t i m o c a s o , l a c l a s s e d e l g l i o
d e v ' e s s e r e c o m p a t i b i l e c o n q u e l l a d e l p a d r e e d e v e a c c e t t a r e i v a l o r i d e l l e p r o p r i e t à d e l g e n i t o r e .
L a d e n i z i o n e d i u n b e a n g l i o e r e d i t a i v a l o r i d e g l i a r g o m e n t i d e l c o s t r u t t o r e , i v a l o r i
d e l l e p r o p r i e t à e i m e t o d i d a l p a d r e , c o n i n p i ù l a p o s s i b i l i t à d i a g g i u n g e r e n u o v i v a l o r i . O g n i
m e t o d o d i i n i z i a l i z z a z i o n e , d i d i s t r u z i o n e e / o s e t t i n g d e i m e t o d i f a c t o r y s t a t i c i c h e s i s p e c i c a
e e t t u e r à u n o v e r r i d e d e i c o r r i s p o n d e n t i d e n i t i n e l g e n i t o r e . C i ò c h e r i m a n e v i e n e s e m p r e
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 21/86
C A P I T O L O 1 . I L C O N T E N I T O R E I O C 1 4
p r e s o d a l l a d e n i z i o n e d e l g l i o : d e p e n d s o n , a u t o w i r e m o d e , d e p e n d e n c y c h e c k , s i n g l e t o n ,
s c o p e e l a z y - i n i t .
L ' e s e m p i o p r e c e d e n t e m a r c a e s p l i c i t a m e n t e l a d e n i z i o n e d e l b e a n g e n i t o r e c o m e a s t r a t t o ,
u s a n d o l ' a t t r i b u t o a b s t r a c t . S e l a d e n i z i o n e d e l p a d r e n o n s p e c i c a n e s s u n a c l a s s e , t a l e
d e n i z i o n e d e v ' e s s e r e m a r c a t a n e c e s s a r i a m e n t e c o m e a s t r a t t a , c o m e s e g u e :
< b e a n i d = " i n h e r i t e d T e s t B e a n W i t h o u t C l a s s " a b s t r a c t = " t r u e " >
< p r o p e r t y n a m e = " n a m e " v a l u e = " p a r e n t " / >
< p r o p e r t y n a m e = " a g e " v a l u e = " 1 " / >
< / b e a n >
< b e a n i d = " i n h e r i t s W i t h C l a s s " c l a s s = " e s e m p i . D e r i v e d T e s t B e a n "
p a r e n t = " i n h e r i t e d T e s t B e a n W i t h o u t C l a s s " i n i t - m e t h o d = " i n i t i a l i z e " >
< p r o p e r t y n a m e = " n a m e " v a l u e = " o v e r r i d e " / >
< ! - - I l v a l o r e 1 s u l l a p r o p r i e t à a g e v i e n e e r e d i t a t o d a l p a d r e - - >
< ! - - l ' a t t r i b u t o n a m e i n v e c e v i e n e s o v r a s c r i t t o - - >
< / b e a n >
I l b e a n g e n i t o r e n o n p u ò e s s e r e i s t a n z i a t o d a s o l o , p e r c h è è i n c o m p l e t o , e s s e n d o s t a t o
e s p l i c i t a m e n t e m a r c a t o c o m e a s t r a t t o . Q u a n d o u n a d e n i z i o n e è a s t r a t t a c o m e q u e s t a , v i e n e
u t i l i z z a t a e s c l u s i v a m e n t e c o m e t e m p l a t e c h e s e r v e c o m e g e n i t o r e p e r l a d e n i z i o n e d i a l t r i
b e a n . S e s i p r o v a a r i c h i e d e r e a l c o n t a i n e r u n ' i s t a n z a d i t a l e b e a n , c o n i l m e t o d o g e t B e a n ( ) ,
v i e n e r i t o r n a t o u n e r r o r e . A l l o s t e s s o m o d o , i l m e t o d o p r e I n s t a n t i a t e S i n g l e t o n s ( ) d e l c o n t a i n e r
i g n o r a l e d e n i z i o n i d e i b e a n s e t t a t i c o m e a s t r a t t i .
1 . 1 1 U s a r e i l e . p r o p e r t i e s
A b b i a m o v i s t o c o m e s i a p o s s i b i l e c o s t r u i r e i l l e d i c o n g u r a z i o n e d i S p r i n g i n m o d o t a l e c h e
c o n t e s t u a l m e n t e a l l a d e n i z i o n e d i u n b e a n s i p o s s a n o a n c h e d e n i r e i v a l o r i d e i s u o i a t t r i b u t i .
T u t t a v i a , s c r i v e r e e s p l i c i t a m e n t e i v a l o r i a l l ' i n t e r n o d e l l e . x m l p u ò r i s u l t a r e p o c o c o m o d o .
R i s u l t a s i c u r a m e n t e p i ù p r a t i c o r a c c o g l i e r e i v a l o r i i n u n l e d i p r o p e r t i e s .
U n l e d i p r o p e r t i e s è u n s e m p l i c e l e d i t e s t o , c o n e s t e n s i o n e . p r o p e r t i e s , e c h e è s t r u t -
t u r a t o c o m e u n a m a p p a :
c h i a v e = v a l o r e
Q u e l l o c h e s e g u e n e è u n e s e m p i o :
u r l = j d b c : m y s q l : / / l o c a l h o s t : 3 3 0 6 / m y d b
d r i v e r = c o m . m y s q l . j d b c . D r i v e r
u s e r n a m e = a d m i n
p a s s w o r d = a d m i n
x = 1
y = 3
T a l i l e s o n o m o l t o u s a t i , p e r e s e m p i o , p e r p a s s a r e i d a t i d i c o n g u r a z i o n e d i u n d b ,
o p p u r e p e r g e s t i r e l a l o c a l i z z a z i o n e d i u n s i t o ( u n l e d i p r o p e r t i e s p e r o g n i l i n g u a , l e c h i a v i
s o n o s e m p r e l e s t e s s e , m a c a m b i a n o i v a l o r i ) , e c c .
P e r c a t t u r a r e t a l i v a l o r i a l l ' i n t e r n o d e l l e s p r i n g - c o n g . x m l s i u s a l a s e g u e n t e s i n t a s s i :
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 22/86
C A P I T O L O 1 . I L C O N T E N I T O R E I O C 1 5
< ! - - D e f i n i z i o n e f i l e p r o p e r t i e s - - >
< b e a n
c l a s s = " o r g . s p r i n g f r a m e w o r k . b e a n s . f a c t o r y . c o n f i g . P r o p e r t y P l a c e h o l d e r C o n f i g u r e r " >
< p r o p e r t y n a m e = " l o c a t i o n s " v a l u e = " c l a s s p a t h : / p r o p r i e t a . p r o p e r t i e s " / >
< / b e a n >
< ! - - o p p u r e c o n l a s e g u e n t e e s p r e s s i o n e - - >
< c o n t e x t : p r o p e r t y - p l a c e h o l d e r l o c a t i o n = " c l a s s p a t h : / p r o p r i e t a . p r o p e r t i e s " / >
< ! - - D e f i n i z i o n e d e i b e a n s - - >
< b e a n i d = " d a o " c l a s s = " e s e m p i o s p r i n g . M i o D a o " >
< p r o p e r t y n a m e = " u r l " v a l u e = " $ { u r l } " / >
< p r o p e r t y n a m e = " d r i v e r " v a l u e = " $ { d r i v e r } " / >
< p r o p e r t y n a m e = " u s e r n a m e " v a l u e = " $ { u s e r n a m e } " / >
< p r o p e r t y n a m e = " p a s s w o r d " v a l u e = " $ { p a s s w o r d } " / >
< / b e a n >
< b e a n i d = " p u n t o " c l a s s = " e s e m p i o s p r i n g . P u n t o " >
< p r o p e r t y n a m e = " x " v a l u e = " $ { x } " / >
< p r o p e r t y n a m e = " y " v a l u e = " $ { y } " / >
< / b e a n >
1 . 1 2 U s o d e l l e a n n o t a t i o n
A p a r t i r e d a l l a v e r s i o n e 1 . 5 d i J a v a , s o n o s u p p o r t a t e u c i a l m e n t e l e a n n o t a t i o n . S p r i n g
p e r m e t t e d i r e a l i z z a r e l a p r o p r i a c o n g u r a z i o n e a n c h e t r a m i t e q u e s t o s t r u m e n t o .
1 . 1 2 . 1 @ R e q u i r e d
S i a p p l i c a a i m e t o d i s e t t e r , c o m e n e l s e g u e n t e e s e m p i o :
p u b l i c c l a s s S i m p l e M o v i e L i s t e r {
p r i v a t e M o v i e F i n d e r m o v i e F i n d e r ;
@ R e q u i r e d
p u b l i c v o i d s e t M o v i e F i n d e r ( M o v i e F i n d e r m o v i e F i n d e r ) {
t h i s . m o v i e F i n d e r = m o v i e F i n d e r ;
}
/ / . . .
}
Q u e s t a a n n o t a t i o n s e m p l i c e m e n t e i n d i c a c h e l ' a t t r i b u t o a s s o c i a t o a l m e t o d o s e t ( ) d e v e e s -
s e r e n e c e s s a r i a m e n t e p o p o l a t o a t e m p o d i c o n g u r a z i o n e , c o n u n v a l o r e d e n i t o e s p l i c i t a m e n t e .
I n c a s o c o n t r a r i o , i l c o n t a i n e r s o l l e v a u n ' e c c e z i o n e .
1 . 1 2 . 2 @ R e s o u r c e
@ R e s o u r c e p r e n d e i l n o m e d i u n a t t r i b u t o e d i d a f a u l t S p r i n g i n t e r p r e t a q u e s t o v a l o r e c o m e
i l n o m e d i u n b e a n d a i n i e t t a r e .
p u b l i c c l a s s S i m p l e M o v i e L i s t e r {
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 23/86
C A P I T O L O 1 . I L C O N T E N I T O R E I O C 1 6
p r i v a t e M o v i e F i n d e r m o v i e F i n d e r ;
@ R e s o u r c e ( n a m e = " m y M o v i e F i n d e r " )
p u b l i c v o i d s e t M o v i e F i n d e r ( M o v i e F i n d e r m o v i e F i n d e r ) {
t h i s . m o v i e F i n d e r = m o v i e F i n d e r ;
}
}
S e n o n v i e n e s p e c i c a t o n e s s u n n o m e , q u e s t o v i e n e d e r i v a t o d a l n o m e d e l l ' a t t r i b u t o o d e l
m e t o d o s e t ( ) a s s o c i a t o i n b a s e a d o v ' è s t a t o a p p l i c a t o .
N e l l ' e s e m p i o c h e s e g u e v e r r à r i c e r c a t o i l b e a n c h i a m a t o ' m o v i e F i n d e r ' .
p u b l i c c l a s s S i m p l e M o v i e L i s t e r {
p r i v a t e M o v i e F i n d e r m o v i e F i n d e r ;
@ R e s o u r c e
p u b l i c v o i d s e t M o v i e F i n d e r ( M o v i e F i n d e r m o v i e F i n d e r ) {
t h i s . m o v i e F i n d e r = m o v i e F i n d e r ;
}
}
1 . 1 2 . 3 @ P o s t C o n s t r u c t e @ P r e D e s t r o y
Q u e s t e p o s s o n o e s s e r e u t i l i z z a t e p e r m a r c a r e i m e t o d i d i i n i z i a l i z z a z i o n e e d i d i s t r u z i o n e d i
u n b e a n , c o m e n e l l ' e s e m p i o c h e s e g u e :
p u b l i c c l a s s C a c h i n g M o v i e L i s t e r {
@ P o s t C o n s t r u c t
p u b l i c v o i d p o p u l a t e M o v i e C a c h e ( ) {
/ / p o p u l a t e s t h e m o v i e c a c h e u p o n i n i t i a l i z a t i o n . . .
}
@ P r e D e s t r o y
p u b l i c v o i d c l e a r M o v i e C a c h e ( ) {
/ / c l e a r s t h e m o v i e c a c h e u p o n d e s t r u c t i o n . . .
}
}
I n q u e s t o m o d o n o n c ' è b i s o g n o d i u s a r e g l i a t t r i b u t i i n i t - m e t h o d e d e s t r o y - m e t h o d v i s t i
n e l p a r a g r a f o 1 . 8 .
1 . 1 3 R i l e v a z i o n e a u t o m a t i c a d e i c o m p o n e n t i
S p r i n g i n t r o d u c e , g i à a p a r t i r e d a l l a v e r s i o n e 2 . 0 , i n c o n c e t t o d i s t e r e o t i p o c o n l ' a n n o t a z i o n e
@ R e p o s i t o r y u s a t a p e r c a r a t t e r i z z a r e c o m p o n e n d i d i a c c e s s o a i d a t i ( d a o ) . C o n S p r i n g
2 . 5 v e n g o n o a g g i u n t e d u e n u o v e a n n o t a z i o n i , @ S e r v i c e e @ C o n t r o l l e r , p e r c o m p l e t a r e l a
c l a s s i c a a r c h i t e t t u r a a t r e l i v e l l i ( a c c e s s o a i d a t i , s e r v i z i d i b u s i n e s s , c o n t r o l l e r d e l l ' i n t e r f a c c i a ) .
I n o l t r e i n t r o d u c e a n c h e i l g e n e r i c o @ C o m p o n e n t c h e g l i a l t r i s t e r e o t i p i e s t e n d o n o .
Q u e s t e a n n o t a z i o n i p o s s o n o e s s e r e u s a t e i n c o m b i n a z i o n e c o n u n ' a l t r a f u n z i o n a l i t à d i
S p r i n g : l a r i l e v a z i o n e a u t o m a t i c a d i c o m p o n e n t i a p a r t i r e d a l c l a s s p a t h .
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 24/86
C A P I T O L O 1 . I L C O N T E N I T O R E I O C 1 7
T a l e f u n z i o n a l i t à p u ò r i s u l t a r e u t i l e i n t u t t i q u e i c a s i i n c u i s i v u o l e c h e i l c o n t a i n e r
d i s t i n g u a i b e a n i n f u n z i o n e d e l r u o l o c h e s v o l g o n o a l l ' i n t e r n o d e l c o n t a i n e r , p e r e s e m p i o p e r
u n a g e s t i o n e d i v e r s i c a t a d e i l o g t r a i v a r i s t r a t i d e l l ' a p p l i c a z i o n e , o p p u r e p e r g e s t i r e m e g l i o
i l p r o b l e m a d e l l ' a u t o w i r i n g .
P e r f a r e i n m o d o c h e S p r i n g e s e g u a u n a s c a n s i o n e d e l c l a s s p a t h a l l o s c o p o d i c a t a l o g a r e i
b e a n c h e a b b i a m o m a r c h i a t o , l ' i s t r u z i o n e d a i n s e r i r e n e l l e d i c o n g u r a z i o n e è l a s e g u e n t e :
< c o n t e x t : c o m p o n e n t - s c a n b a s e - p a c k a g e = " o r g . e x a m p l e " / >
d o v e l ' a t t r i b u t o b a s e - p a c k a g e s p e c i c a i l p a c k a g e d a c u i i n i z i a r e l a r i c e r c a . Q u e s t a s c a n -
s i o n e i n f a t t i n o n d e v e c o i n v o l g e r e n e c e s s a r i a m e n t e t u t t a l ' a p p l i c a z i o n e , m a a n c h e s o l o u n a
p a r t e .
1 . 1 3 . 1 U s o d e i l t r i p e r u n o s c a n n i n g c u s t o m i z z a t o
D i d e f a u l t , l e c l a s s i a n n o t a t e c o m e @ C o m p o n e n t , @ R e p o s i t o r y , @ S e r v i c e , @ C o n t r o l l e r
o c o n d e l l e a n n o t a z i o n i p e r s o n a l i z z a t e s o n o i s o l i c o m p o n e n t i r i l e v a t i . E ' p o s s i b i l e m o d i c a r e
e d e s t e n d e r e q u e s t o c o m p o r t a m e n t o s e m p l i c e m e n t e a p p l i c a n d o d e i l t r i c u s t o m i z z a t i . T a l i
l t r i p o s s o n o e s s e r e i n c l u s i v i ( p r e n d i t u t t i i c o m p o n e n t i c h e . . . ) o e s c l u s i v i ( p r e n d i t u t t i i
c o m p o n e n t i t r a n n e . . . ) e d e v o n o e s s e r e d i c h i a r a t i c o m e n o d i d e l l ' e l e m e n t o c o m p o n e n t - s c a n .
O g n i l t r o r i c h i e d e i l t i p o e u n ' e s p r e s s i o n e .
L a t a b e l l a 1 . 2 r i a s s u m e l e o p z i o n i d e i l t r i .
T i p o d i l t r o E s p r e s s i o n e d ' e s e m p i o D e s c r i z i o n e
a n n o t a t i o n o r g . e x a m p l e . S o m e A n n o t a t i o n U n a n n o t a z i o n e d e v ' e s s e r e p r e s e n t e a l
l i v e l l o d i t i p o n e l c o m p o n e n t e t a r g e t
a s s i g n a b l e o r g . e x a m p l e . S o m e C l a s s U n c l a s s e ( o i n t e r f a c c i a ) c h e i l c o m -
p o n e n t e t a r g e t p u ò e s t e n d e r e / i m p l e -
m e n t a r e
a s p e c t j o r g . e x a m p l e . . * S e r v i c e + U n e s p r e s s i o n e d i t i p o A s p e c t J c h e d e v e
m a t c h a r e c o n i l c o m p o n e n t e t a r g e t
r e g e x o r g / . e x a m p l e / . D e f a u l t . * U n ' e s p r e s s i o n e r e g o l a r e c h e d e v e
m a t c h a r e c o n i l n o m e d e l l a c l a s s e d e l
c o m p o n e n t e t a r g e t
c u s t o m o r g . e x a m p l e . M y C u s t o m T y p e F i l t e r U n ' i m p l e m e n t a z i o n e c u s -
t o m i z z a t a d e l l ' i n t e r f a c c i a
o r g . s p r i n g f r a m e w o r k . c o r e . t y p e . T y p e F i l t e r
T a b e l l a 1 . 2 : O p z i o n i d e i l t r i
L ' e s e m p i o c h e s e g u e m o s t r a l a c o n g u r a z i o n e X M L i g n o r a n d o t u t t i i c o m p o n e n t i @ R e p o s -
i t o r y t r a n n e q u e l l i c h e r i s p e t t a n o l ' e s p r e s s i o n e r e g o l a r e . * S t u b . * R e p o s i t o r y , o v v e r o i l c u i n o m e
t e r m i n a c o n R e p o s i t o r y e i l n o m e d e l p a c k a g e i n c u i s o n o c o n t e n u t i t e r m i n a c o n S t u b .
< b e a n s >
< c o n t e x t : c o m p o n e n t - s c a n b a s e - p a c k a g e = " o r g . e x a m p l e " >
< c o n t e x t : i n c l u d e - f i l t e r t y p e = " r e g e x "
e x p r e s s i o n = " . * S t u b . * R e p o s i t o r y " / >
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 25/86
C A P I T O L O 1 . I L C O N T E N I T O R E I O C 1 8
< c o n t e x t : e x c l u d e - f i l t e r t y p e = " a n n o t a t i o n "
e x p r e s s i o n = " o r g . s p r i n g f r a m e w o r k . s t e r e o t y p e . R e p o s i t o r y " / >
< / c o n t e x t : c o m p o n e n t - s c a n >
< / b e a n s >
1 . 1 4 I n t e r n a z i o n a l i z z a z i o n e c o n M e s s a g e S o u r c e
L ' i n t e r f a c c i a A p p l i c a t i o n C o n t e x t e s t e n d e u n i n t e r f a c c i a c h i a m a t a M e s s a g e S o u r c e e q u i n d i
p r o v v e d e a n c h e a l l a f u n z i o n a l i t à d i i n t e r n a z i o n a l i z z a z i o n e ( i 1 8 n ) .
I m e t o d i d e n i t i i n q u e s t a i n t e r f a c c i a i n c l u d o n o :
S t r i n g g e t M e s s a g e ( S t r i n g c o d e , O b j e c t [ ] a r g s , S t r i n g d e f a u l t , L o c a l e l o c ) : I l m e t o d o b a s e
u t i l i z z a t o p e r r e c u p e r a r e u n m e s s a g g i o d a l M e s s a g e S o u r c e . S e n o n v i e n e t r o v a t o a l c u n
m e s s a g g i o , v i e n e u s a t o q u e l l o d i d e f a u l t .
S t r i n g g e t M e s s a g e ( S t r i n g c o d e , O b j e c t [ ] a r g s , L o c a l e l o c ) : F o n d a m e n t a l m e n t e l a s t e s s a
c o s a d e l m e t o d o p r e c e d e n t e , m a c o n u n a d i e r e n z a : n o n è s p e c i c a t o a l c u n m e s s a g g i o d i
d e f a u l t ; s e i l m e s s a g g i o n o n v i e n e t r o v a t o , v i e n e s o l l e v a t a u n a N o S u c h M e s s a g e E x c e p t i o n .
S t r i n g g e t M e s s a g e ( M e s s a g e S o u r c e R e s o l v a b l e r e s o l v a b l e , L o c a l e l o c a l e ) : T u t t e l e p r o p r i -
e t à u t i l i z z a t e n e i m e t o d i p r e c e d e n t i v e n g o n o w r a p p a t e i n u n a c l a s s e c h i a m a t a M e s s a g e -
S o u r c e R e s o l v a b l e .
Q u a n d o v i e n e c a r i c a t o u n A p p l i c a t i o n C o n t e x t , v i e n e a u t o m a t i c a m e n t e c e r c a t o u n b e a n
M e s s a g e S o u r c e d e n i t o n e l c o n t e s t o . I l b e a n d e v e a v e r e i l n o m e m e s s a g e S o u r c e . S e t a l e b e a n
v i e n e t r o v a t o , t u t t e l e c h i a m a t e d e i m e t o d i s o p r a e l e n c a t i s o n o d e l e g a t i a l m e s s a g e S o u r c e . S e
i n v e c e n o n v i e n e t r o v a t o , l ' A p p l i c a t i o n C o n t e x t c e r c a u n g e n i t o r e c h e c o n t e n g a u n b e a n c o n
l o s t e s s o n o m e . S e l o t r o v a l o u s a c o m e u n M e s s a g e S o u r c e , a l t r i m e n t i v i e n e i s t a n z i a t o u n
D e l e g a t i n g M e s s a g e S o u r c e v u o t o , i n g r a d o d i a c c e t t a r e c h i a m a t e a i m e t o d i d e n i t i s o p r a .
L ' u s o d e l M e s s a g e S o u r c e è e v i d e n z i a t o d a l s e g u e n t e e s e m p i o :
m e s s a g g i . p r o p e r t i e s
b e n v e n u t o = C i a o M o n d o ! ! !
s p r i n g - c o n g . x m l
< b e a n s >
< b e a n i d = " m e s s a g e S o u r c e "
c l a s s = " o r g . s p r i n g f r a m e w o r k . c o n t e x t . s u p p o r t . R e s o u r c e B u n d l e M e s s a g e S o u r c e " >
< p r o p e r t y n a m e = " b a s e n a m e s " >
< l i s t >
< ! - - Q u i p o s s o d e f i n i r e p i ù f i l e d i p r o p e r t i e s . P e r o r a - - >
< ! - - i n s e r i s c o l ' u n i c o c h e h o c h e s i c h i a m a ' m e s s a g g i ' . - - >
< v a l u e > m e s s a g g i < / v a l u e >
< / l i s t >
< / p r o p e r t y >
< / b e a n >
< / b e a n s >
M a i n . j a v a
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 26/86
C A P I T O L O 1 . I L C O N T E N I T O R E I O C 1 9
p u b l i c c l a s s M a i n {
p u b l i c s t a t i c v o i d m a i n ( S t r i n g [ ] a r g s ) {
M e s s a g e S o u r c e r e s o u r c e s = n e w C l a s s P a t h X m l A p p l i c a t i o n C o n t e x t ( " s p r i n g - c o n f i g . x m l " ) ;
S t r i n g m e s s a g e = r e s o u r c e s . g e t M e s s a g e ( " b e n v e n u t o " , n u l l , " D e f a u l t " , n u l l ) ;
S y s t e m . o u t . p r i n t l n ( m e s s a g e ) ;
}
}
E s e g u e n d o l a c l a s s e M a i n , l ' o u t p u t s a r à :
C i a o M o n d o ! ! !
S e l a v o c e b e n v e n u t o n o n f o s s e s t a t a t r o v a t a a l l ' i n t e r n o d e l m e s s a g g i . p r o p e r t i e s , l ' o u t p u t
s a r e b b e s t a t o
D e f a u l t
Q u e s t o m e c c a n i s m o p e r m e t t e d i e l i m i n a r e q u a l u n q u e s t r i n g a e s p l i c i t a m e n t e d i c h i a r a t a
a l l ' i n t e r n o d e l c o d i c e , s i s t e m a n d o l e t u t t e i n l e s a p p o s i t i . T a l e u t i l i t à r i s u l t a e v i d e n t e p r o p r i o
i n f a s e d i l o c a l i z z a z i o n e .
S u p p o n e n d o p e r e s e m p i o d i v o l e r t r a d u r r e l a n o s t r a a p p l i c a z i o n e i n i n g l e s e ( e n - G B ) ,
d o v r e m o c r e a r e u n l e c h i a m a t o m e s s a g g i _ e n _ G B . p r o p e r t i e s .
T i p i c a m e n t e l a l o c a l i z z a z i o n e è g e s t i t a d a l l ' a m b i e n t e s u c u i g i r a l ' a p p l i c a z i o n e .
S u p p o n e n d o p e r e s e m p i o d i a v e r e i s e g u e n t i l e s :
m e s s a g g i . p r o p e r t i e s
b e n v e n u t o = C i a o M o n d o ! ! !
m e s s a g g i _ e n _ G B . p r o p e r t i e s
b e n v e n u t o = H e l l o W o r l d ! ! !
M a i n . j a v a
p u b l i c c l a s s M a i n {
p u b l i c s t a t i c v o i d m a i n ( S t r i n g [ ] a r g s ) {
M e s s a g e S o u r c e r e s o u r c e s = n e w C l a s s P a t h X m l A p p l i c a t i o n C o n t e x t ( " s p r i n g - c o n f i g . x m l " ) ;
/ / c a r i c o i l f i l e p r e d e f i n i t o
S t r i n g m e s s a g e = r e s o u r c e s . g e t M e s s a g e ( " b e n v e n u t o " , n u l l , " D e f a u l t " , n u l l ) ;
S y s t e m . o u t . p r i n t l n ( m e s s a g e ) ;
/ / c a r i c o i l f i l e p e r l a l i n g u a i n g l e s e
m e s s a g e = r e s o u r c e s . g e t M e s s a g e ( " b e n v e n u t o " , n u l l , " D e f a u l t " , L o c a l e . U K ) ;
S y s t e m . o u t . p r i n t l n ( m e s s a g e ) ;
}
}
L ' o u t p u t i n q u e s t o c a s o s a r à :
C i a o M o n d o ! ! !
H e l l o W o r l d ! ! !
L a d i e r e n z a l a f a l ' u l t i m o p a r a m e t r o d e l l a f u n z i o n e g e t M e s s a g e ( . . . ) . N e l p r i m o c a s o , n o n
e s s e n d o s p e c i c a t o n e s s u n v a l o r e , v i e n e c e r c a t o i n a u t o m a t i c o i l l e m e s s a g g i ( s e n z a s u s s i ) .
N e l s e c o n d o c a s o v i e n e s p e c i c a t a l a l o c a l i z z a z i o n e i n g l e s e ( L o c a l e . U K ) , e q u i n d i v i e n e c e r c a t o
l o s t e s s o l e m a c o n i l s u s s o p e r l a l i n g u e i n g l e s e ( _ e n _ G B ) .
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 27/86
C a p i t o l o 2
V a l i d a z i o n e
2 . 1 I n t r o d u z i o n e
L a v a l i d a z i o n e , o v v e r o i l c o n t r o l l o d e l l a v a l i d i t à d e i v a l o r i c o n c u i v i e n e s e t t a t o u n b e a n o i n
g e n e r a l e v e n g o n o s e t t a t i d e i p a r a m e t r i , è u n a s p e t t o m o l t o i m p o r t a n t e i n o g n i a p p l i c a z i o n e .
Q u e s t a p r o b l e m a t i c a d i v e n t a p i ù c r i t i c a q u a n d o i v a l o r i i m m e s s i p r o v e n g o n o d i r e t t a m e n t e
d a l l ' u t e n t e . E ' n e c e s s a r i o q u i n d i a v e r e u n m e c c a n i s m o c h e c o n s e n t a d i c o n t r o l l a r e q u e s t o t i p o
d i o p e r a z i o n i .
C i s o n o p r o e c o n t r o n e l c o n s i d e r a r e l a v a l i d a z i o n e c o m e p a r t e d e l l a l o g i c a d i b u s i n e s s
e S p r i n g o r e u n a s o l u z i o n e p e r l a v a l i d a z i o n e c h e n o n e s c l u d e n e s s u n a d e l l e d u e c o s e . I n
p a r t i c o l a r e l a v a l i d a z i o n e
n o n d o v r e b b e e s s e r e l e g a t a a l l a y e r w e b ;
d o v r e b b e e s s e r e s e m p l i c e g e s t i r n e l a l o c a l i z z a z i o n e ;
d o v r e b b e e s s e r e p o s s i b i l e a g g i u n g e r e q u a l u n q u e v a l i d a t o r e d i s p o n i b i l e ;
P e r a s s o l v e r e a q u e s t e f u n z i o n a l i t à , S p r i n g p r o p o n e l ' i n t e r f a c c i a V a l i d a t o r .
2 . 2 L ' i n t e r f a c c i a V a l i d a t o r
S p r i n g u t i l i z z a l ' i n t e r f a c c i a V a l i d a t o r p e r c o n s e n t i r e l ' i m p l e m e n t a z i o n e d i m e c c a n i s m i d i v a l -
i d a z i o n e . O g n i v a l i d a t o r e c h e s i v u o l e c o s t r u i r e d e v e i m p l e m e n t a r e t a l e i n t e r f a c c i a . Q u e s t i
s o n o i m e t o d i e s p o s t i :
p u b l i c b o o l e a n s u p p o r t s ( C l a s s c l a z z ) ; d e n i s c e s u q u a l i c l a s s i p u ò a g i r e i l v a l i d a t o r e .
O m e g l i o , d a t a u n a c l a s s e p a s s a t a c o m e p a r a m e t r o r e s t i t u i s c e t r u e s e i l v a l i d a t o r e i n
q u e s t i o n e è s t a t o s c r i t t o p e r p o t e r v a l i d a r e q u e l l a c l a s s e .
p u b l i c v o i d v a l i d a t e ( O b j e c t o b j , E r r o r s e ) ; è i l m e t o d o c h e e e t t u a l a v a l i d a z i o n e s u l -
l ' o g g e t t o o b j . Q u e s t o m e t o d o f a a n c h e u s o d e l l ' i n t e r f a c c i a E r r o r s .
T u t t i g l i e r r o r i r i l e v a t i d u r a n t e l ' e s e c u z i o n e d e l m e t o d o v a l i d a t e ( . . . ) v e r r a n n o r e g i s t r a t i
a l l ' i n t e r n o d i u n a p p o s i t o o g g e t t o d i t i p o E r r o r s .
V e d i a m o i l f u n z i o n a m e n t o d i c i ò d i c u i s i è p a r l a t o n o r a c o n u n e s e m p i o .
I m m a g i n i a m o d i a v e r e u n o g g e t t o I n d i r i z z o c h e r a c c h i u d e t u t t e l e i n f o r m a z i o n i p e r i d e n -
t i c a r e u n i v o c a m e n t e u n i n d i r i z z o n e l m o n d o :
2 0
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 28/86
C A P I T O L O 2 . V A L I D A Z I O N E 2 1
c l a s s I n d i r i z z o {
/ / a t t r i b u t i
p r i v a t e S t r i n g p r e f i s s o V i a ; / / " v i a " , " v i a l e " , " p i a z z a " , e c c .
p r i v a t e S t r i n g n o m e V i a ;
p r i v a t e S t r i n g n u m e r o C i v i c o ;
p r i v a t e S t r i n g c a p ;
p r i v a t e S t r i n g c i t t a ;
p r i v a t e S t r i n g p r o v i n c i a ;
p r i v a t e S t r i n g n a z i o n e ;
/ / m e t o d i s e t ( ) e g e t ( )
. . .
}
P e r v a l i d a r e q u e s t o b e a n , a b b i a m o b i s o g n o d i u n v a l i d a t o r e a d h o c c h e , c o m e d e s c r i t t o
p o c o f a , d e v e i m p l e m e n t a r e l ' i n t e r f a c c i a V a l i d a t o r :
p u b l i c c l a s s I n d i r i z z o V a l i d a t o r i m p l e m e n t s V a l i d a t o r {
/ / C o n q u e s t o m e t o d o c o s i d e f i n i t o , i n d i c h i a m o c h e
/ / q u e s t a c l a s s e v a l i d a S O L O g l i o g g e t t i I n d i r i z z o
p u b l i c b o o l e a n s u p p o r t s ( C l a s s c l a z z ) {
r e t u r n I n d i r i z z o . c l a s s . e q u a l s ( c l a z z ) ;
}
/ / M e t o d o c h e r e a l i z z a l a v a l i d a z i o n e
p u b l i c v o i d v a l i d a t e ( O b j e c t o b j , E r r o r s e ) {
V a l i d a t i o n U t i l s . r e j e c t I f E m p t y ( e ,
" p r e f i s s o V i a " ,
" r e q u i r e d " ,
" p r e f i s s o V i a è o b b l i g a t o r i o " ) ;
V a l i d a t i o n U t i l s . r e j e c t I f E m p t y ( e ,
" n a z i o n e " ,
" r e q u i r e d " ,
" n a z i o n e è o b b l i g a t o r i o " ) ;
V a l i d a t i o n U t i l s . r e j e c t I f E m p t y ( e ,
" c a p " ,
" r e q u i r e d " ,
" c a p è o b b l i g a t o r i o " ) ;
}
}
A l l ' i n t e r n o d e l m e t o d o v a l i d a t e ( . . . ) v e n g o n o u t i l i z z a t i i m e t o d i s t a t i c i d e l l a c l a s s e V a l i d a -
t i o n U t i l s . I l m e t o d o r e j e c t I f E m p t y ( . . . ) , c o m e d i c e i l n o m e s t e s s o , r i u t a ( o , i n a l t r e p a r o l e ,
i n v a l i d a l a v e r i c a ) i l v a l o r e a s s e g n a t o a l l ' a t t r i b u t o p r e s s o V i a d i o b j n e l c a s o i n c u i t a l e
a t t r i b u t o s i a l a s c i a t o v u o t o ( o v v e r o c o n v a l o r e n u l l ) . I l p r i m o p a r a m e t r o è u n r i f e r i m e n -
t o a l l ' o g g e t t o d i t i p o E r r o r s c h e r a c c o g l i e r à t u t t e l e i n f o r m a z i o n i c i r c a g l i e r r o r i r i l e v a t i ; i l
s e c o n d o p a r a m e t r o s i r i f e r i s c e a l l ' a t t r i b u t o d i o b j s u c u i v i e n e e e t t u a t a l a v e r i c a ; i l t e r z o
p a r a m e t r o è u n c o d i c e c h e r a p p r e s e n t a i l t i p o d i e r r o r e . T a l e c o d i c e è a r b i t r a r i a m e n t e s c e l t o
d a l l o s v i l u p p a t o r e ( i n q u e s t o c a s o è s t a t o d e n i t o p e r s e m p l i c i t à a l l ' i n t e r n o d e l l a f u n z i o n e , m a
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 29/86
C A P I T O L O 2 . V A L I D A Z I O N E 2 2
s a r e b b e p i ù c o r r e t t o d e n i r l o i n u n a p p o s i t o l e d i c o s t a n t i ) . L ' u l t i m o p a r a m e t r o , c h e n o n è
o b b l i g a t o r i o , è i l m e s s a g g i o d ' e r r o r e d i d e f a u l t .
S e c o n d o l a l o g i c a u t i l i z z a t a n e l l ' e s e m p i o , u n i n d i r i z z o n o n è c o n s i d e r a t o v a l i d o s e i l p r e s s o
d e l l a v i a , l a n a z i o n e e i l c a p n o n s o n o s t a t i d e n i t i .
P e r t e s t a r e i l n o s t r o v a l i d a t o r e , è s u c i e n t e e s e g u i r e i l s e g u e n t e m e t o d o m a i n :
p u b l i c s t a t i c v o i d m a i n ( S t r i n g [ ] a r g s ) {
/ / c r e o u n i n d i r i z z o
I n d i r i z z o i = n e w I n d i r i z z o ( ) ;
i . s e t N o m e V i a ( " F . O z a n a m " ) ;
i . s e t N u m e r o C i v i c o ( " 4 4 " ) ;
i . s e t C a p ( " 1 2 3 4 5 6 7 8 9 " ) ;
/ / c r e o i l v a l i d a t o r e
I n d i r i z z o V a l i d a t o r i v = n e w I n d i r i z z o V a l i d a t o r ( ) ;
E r r o r s e r r I n d = n e w B i n d E x c e p t i o n ( i , i . g e t C l a s s ( ) . g e t N a m e ( ) ) ;
/ / e f f e t t u o e g e s t i s c o l a v a l i d a z i o n e
i v . v a l i d a t e ( i , e r r I n d ) ;
/ / c o n t r o l l o s e c i s o n o s t a t i e r r o r i
i f ( e r r I n d . h a s F i e l d E r r o r s ( ) ) {
/ / m i f a c c i o r e s t i t u i r e u n a l i s t a d i e r r o r i r i l e v a t i s u i c a m p i
L i s t < F i e l d E r r o r > l i s t a C a m p i = e r r I n d . g e t F i e l d E r r o r s ( ) ;
f o r ( F i e l d E r r o r f e : l i s t a C a m p i ) {
S y s t e m . o u t . p r i n t l n ( f e . g e t D e f a u l t M e s s a g e ( ) ) ;
}
}
}
V e d i a m o d i c o m m e n t a r e i l c o d i c e a p p e n a p r e s e n t a t o . T a n t o p e r c o m i n c i a r e v i e n e c r e a t o
u n I n d i r i z z o d ' e s e m p i o , l a s c i a n d o a n u l l d u e d e i t r e c a m p i r i c h i e s t i c o m e o b b l i g a t o r i . V i e n e
p o i c r e a t o i l v a l i d a t o r e . A b b i a m o p o i b i s o g n o d i u n o g g e t t o d i t i p o E r r o r s . N a t u r a l m e n t e ,
t r a t t a n d o s i d i u n ' i n t e r f a c c i a , n i e n t e c i i m p e d i s c e d i c r e a r n e u n o n o s t r o , m a S p r i n g n e m e t t e
a d i s p o s i z i o n e a l c u n i g i à p r o n t i . N e l n o s t r o c a s o a b b i a m o u s a t o u n B i n d E x c e p t i o n . N o n
c ' è u n m o t i v o p a r t i c o l a r e p e r a v e r s c e l t o q u e s t o , s e n o n c h e i m p l e m e n t a E r r o r s p e r u n u s o
a b b a s t a n z a s t a n d a r d . D a n o t a r e c h e q u e s t a c l a s s e e s t e n d e E x c e p t i o n . I l c o s t r u t t o r e d i q u e s t o
o g g e t t o p r e n d e c o m e p a r a m e t r i l ' o g g e t t o s u c u i s i f a l a v a l i d a z i o n e e i l n o m e d i t a l e o g g e t t o .
A q u e s t o p u n t o p o s s i a m o c h i e d e r e a l v a l i d a t o r e d i e e t t u a r e l e v e r i c h e .
T e r m i n a t e q u e s t e o p e r a z i o n i , s i a m o o v v i a m e n t e i n t e r e s s a t i a c o n o s c e r e l ' e s i t o d e l l a v a l i -
d a z i o n e . I n t e r r o g h i a m o q u i n d i l ' o g g e t t o E r r o r s . C o n i l m e t o d o h a s F i e l d E r r o r s ( ) v e r i c h i a m o
( c i r e s t i t u i s c e u n b o o l e a n ) s e s o n o s t a t i r i l e v a t i e r r o r i s u i c o n t r o l l i d e i c a m p i . I n c a s o a e r -
m a t i v o , c o n i l m e t o d o g e t F i e l d E r r o r s ( ) c i f a c c i a m o r e s t i t u i r e u n a l i s t a d i F i e l d E r r o r . O g n u n o
d i q u e s t i o g g e t t i c o n t i e n e t u t t i i d e t t a g l i s u g l i e r r o r i r i l e v a t i s u i c a m p i . N e l n o s t r o c a s o s i a m o
i n t e r e s s a t i a l m e s s a g g i o d i d e f a u l t p e r f a r c e l o s t a m p a r e s u l l a c o n s o l e .
L ' o u t p u t d i q u e s t o m e t o d o p r o d u r r à i l s e g u e n t e r i s u l t a t o :
p r e f i s s o V i a è o b b l i g a t o r i o
n a z i o n e è o b b l i g a t o r i o
V e d i a m o o r a q u a l c h e o s s e r v a z i o n e d i a p p r o f o n d i m e n t o .
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 30/86
C A P I T O L O 2 . V A L I D A Z I O N E 2 3
2 . 2 . 1 G e s t i o n e d i c o n t r o l l i p i ù c o m p l e s s i
N e l v a l i d a t o r e s o n o s t a t i e e t t u a t i d e i c o n t r o l l i e s t r e m a m e n t e s e m p l i c i , m a i n e e t t i d i l i m i t a t a
u t i l i t à . S u l c a p p e r e s e m p i o s a r e b b e o p p o r t u n o n o n s o l o i l c o n t r o l l o s e è n u l l o n o , m a a n c h e
u n a v e r i c a s e i l v a l o r e i m m e s s o , n e l c a s o s i a d i v e r s o d a l v a l o r e n u l l o , s i a e e t t i v a m e n t e
p l a u s i b i l e ( u n c a p è f o r m a t o S E M P R E d a c i n q u e c i f r e ) . I l q u e s t o c a s o i n f a t t i è n e c e s s a r i o
a c c e d e r e d i r e t t a m e n t e a l c a m p o , e e t t u a r e u n c o n t r o l l o a m a n o ( u t i l i z z a n d o p e r e s e m p i o l e
e s p r e s s i o n i r e g o l a r i , c o n t e n u t e n e l p a c k a g e j a v a . u t i l . r e g e x ) e d e v e n t u a l m e n t e r i u t a r e l ' e r r o r e .
P e r r i u t a r e l ' e r r o r e s i u t i l i z z a u n m e t o d o d i E r r o r s : r e j e c t V a l u e ( . . . ) . Q u e s t o m e t o d o p u ò
r i c e v e r e v a r i p a r a m e t r i , t r a c u i l ' a t t r i b u t o d e l l ' o g g e t t o c h e n o n h a p a s s a t o l a v a l i d a z i o n e , i l
c o d i c e d ' e r r o r e e i l m e s s a g g i o d i d e f a u l t . I l c o n t r o l l o s u l c a p q u i n d i p o t r e b b e e s s e r e f a t t o i n
q u e s t o m o d o :
p u b l i c v o i d v a l i d a t e ( O b j e c t o b j , E r r o r s e ) {
. . .
I n d i r i z z o i = ( I n d i r i z z o ) o b j ;
i f ( ! P a t t e r n . m a t c h e s ( " [ 0 - 9 ] [ 0 - 9 ] [ 0 - 9 ] [ 0 - 9 ] [ 0 - 9 ] " , i . g e t C a p ( ) ) ) {
e . r e j e c t ( " c a p " , " n o t V a l i d " , " C a p n o n v a l i d o " ) ;
}
}
I l c o m m e n t o a q u e s t o c o d i c e è m o l t o s e m p l i c e . V i e n e c a s t a t o o b j a I n d i r i z z o , p e r c h è c i
s e r v e a c c e d e r e d i r e t t a m e n t e a d u n o d e i s u o i a t t r i b u t i . S e i l v a l o r e d e l c a p n o n m a t c h a c o n
l ' e s p r e s s i o n e r e g o l a r e e s p r e s s a d a l p r i m o a r g o m e n t o d e l l a f u n z i o n e m a t c h e s ( . . . ) , l a v a l i d a z i o n e
s u l c a m p o c a p v i e n e r i t e n u t a f a l l i t a e i l v a l o r e v i e n e r i u t a t o . e r e g i s t r a l ' e r r o r e , g l i a s s e g n a
i l c o d i c e n o t V a l i d e i l m e s s a g g i o d i d e f a u l t C a p n o n v a l i d o .
2 . 2 . 2 G e s t i o n e d e i m e s s a g g i d ' e r r o r e t r a m i t e m e s s a g e S o u r c e
L a g e s t i o n e d e i m e s s a g g i d ' e r r o r e d a p r e s e n t a r e a l l ' u t e n t e p u ò e s s e r e g e s t i t a i n m a n i e r a p i ù
e l e g a n t e ( e s o p r a t t u t t o l o c a l i z z a t a ) s f r u t t a n d o i m e s s a g e S o u r c e ( v i s t i n e l p a r a g r a f o 1 . 1 4 ) .
P o s s i a m o i n f a t t i c o n s i d e r a r e i l s e g u e n t e l e d i p r o p e r t i e s :
v a l i d a z i o n e . p r o p e r t i e s
r e q u i r e d = L ' a t t r i b u t o { 0 } è o b b l i g a t o r i o .
n o t V a l i d = L ' a t t r i b u t o { 0 } h a u n v a l o r e n o n v a l i d o .
I l v a l o r e 0 a l l ' i n t e r n o d e l l e p a r e n t e s i g r a e s e r v e n e l c a s o i n c u i s i v o g l i a p a s s a r e a l g e -
s t o r e d e l m e s s a g e S o u r c e u n p a r a m e t r o ( s t r i n g a ) c h e s a r à v i s u a l i z z a t o a l p o s t o d i { 0 } . S e l a
s t r i n g a n e l l e d i p r o p e r t i e s c o n t i e n e p i ù p a r a m e t r i , o g n i p a r a m e t r o v a i n d i c a t o c o n u n n u m e r o
p r o g r e s s i v o : { 0 } , { 1 } , { 2 } , e c c .
N e l m e t o d o m a i n , q u a n d o a n d i a m o a s c o r r e r e t u t t i g l i e r r o r i , i l c i c l o f o r p u ò e s s e r e r i s c r i t t o
n e l m o d o s e g u e n t e :
f o r ( F i e l d E r r o r f e : l i s t a C a m p i ) {
S t r i n g [ ] p a r a m = { f e . g e t F i e l d ( ) } ;
S y s t e m . o u t . p r i n t l n ( r e s o u r c e s . g e t M e s s a g e ( f e . g e t C o d e ( ) ,
p a r a m ,
f e . g e t D e f a u l t M e s s a g e ( ) ,
n u l l ) ) ;
}
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 31/86
C A P I T O L O 2 . V A L I D A Z I O N E 2 4
L a g e s t i o n e d e i p a r a m e t r i d e l l e d i p r o p e r t i e s è a d a t a a l s e c o n d o p a r a m e t r o d e l l a f u n -
z i o n e g e t M e s s a g e ( . . . ) . Q u e s t o i n f a t t i , s e n o n è n u l l , d e v e n e c e s s a r i a m e n t e e s s e r e u n a r r a y d i
S t r i n g . N e l n o s t r o c a s o v i e n e p a s s a t o l ' a r r a y { p r e s s o V i a } n e l l a p r i m a i t e r a z i o n e , { n a z i o n e }
n e l l a s e c o n d a e { c a p } n e l l a t e r z a .
I l r i s u l t a t o s a r à i l s e g u e n t e :
L ' a t t r i b u t o p r e f i s s o V i a è o b b l i g a t o r i o .
L ' a t t r i b u t o n a z i o n e è o b b l i g a t o r i o .
L ' a t t r i b u t o c a p h a u n v a l o r e n o n v a l i d o .
A n c o r a u n a v o l t a , s i a m o r i u s c i t i a c e n t r a l i z z a r e l a g e s t i o n e d e i m e s s a g g i a l l ' i n t e r n o d i l e
d i p r o p e r t i e s a p p o s i t a m e n t e d e d i c a t i .
2 . 3 V a l i d a z i o n e d i u n a r e t e d i b e a n
A b b i a m o v i s t o c o m e s i a p o s s i b i l e v a l i d a r e u n b e a n t r a m i t e u n v a l i d a t o r e c o s t r u i t o a d h o c .
C o n s i d e r i a m o o r a d i v o l e r v a l i d a r e i l s e g u e n t e b e a n :
P e r s o n a . j a v a
p u b l i c c l a s s P e r s o n a {
p r i v a t e S t r i n g n o m e ;
p r i v a t e S t r i n g c o g n o m e ;
p r i v a t e I n t e g e r e t a ;
p r i v a t e I n d i r i z z o i n d i r i z z o ;
/ / m e t o d i s e t e g e t . . .
}
I n q u e s t a p a r t i c o l a r e s i t u a z i o n e c i t r o v i a m o d i f r o n t e a d u n b e a n c h e h a t r a i s u o i a t t r i b u t i
u n r i f e r i m e n t o a d u n a l t r o b e a n , d i c u i p e r a l t r o a b b i a m o g i à u n v a l i d a t o r e f u n z i o n a n t e . E '
o v v i a m e n t e d i n o s t r o p a r t i c o l a r e i n t e r e s s e r i c i c l a r e I n d i r i z z o V a l i d a t o r e q u e s t o è p o s s i b i l e f a r l o
a l l ' i n t e r n o d e l v a l i d a t o r e d e l b e a n P e r s o n a .
V e d i a m o i l c o d i c e d i P e r s o n a V a l i d a t o r :
p u b l i c c l a s s P e r s o n a V a l i d a t o r i m p l e m e n t s V a l i d a t o r {
p u b l i c b o o l e a n s u p p o r t s ( C l a s s c l a z z ) {
r e t u r n P e r s o n a . c l a s s . e q u a l s ( c l a z z ) ;
}
p u b l i c v o i d v a l i d a t e ( O b j e c t o b j , E r r o r s e ) {
/ / c o n t r o l l o c h e i c a m p i n o m e e c o g n o m e s i a n o c o m p i l a t i
V a l i d a t i o n U t i l s . r e j e c t I f E m p t y ( e , " n o m e " , " r e q u i r e d " ) ;
V a l i d a t i o n U t i l s . r e j e c t I f E m p t y ( e , " c o g n o m e " , " r e q u i r e d " ) ;
P e r s o n a p = ( P e r s o n a ) o b j ;
/ / e f f e t t u o u n c o n t r o l l o s u l l ' e t à , n e l c a s o s i a d i v e r s a d a n u l l
i f ( p . g e t E t a ( ) ! = n u l l ) {
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 32/86
C A P I T O L O 2 . V A L I D A Z I O N E 2 5
i f ( p . g e t E t a ( ) < 0 ) {
e . r e j e c t V a l u e ( " e t a " , " v a l o r e N e g a t i v o " ) ;
} e l s e i f ( p . g e t E t a ( ) > 1 1 0 ) {
e . r e j e c t V a l u e ( " e t a " , " t r o p p o V e c c h i o " ) ;
}
}
/ / v a l i d o l ' i n d i r i z z o
e . p u s h N e s t e d P a t h ( " i n d i r i z z o " ) ;
V a l i d a t i o n U t i l s . i n v o k e V a l i d a t o r ( n e w I n d i r i z z o V a l i d a t o r ( ) , p . g e t I n d i r i z z o ( ) , e ) ;
e . p o p N e s t e d P a t h ( ) ;
}
}
Q u e s t o v a l i d a t o r e c i p e r m e t t e d i f a r e d u e o s s e r v a z i o n i .
I n t a n t o è p o s s i b i l e v e d e r e c o m e v i e n e g e s t i t o i l c a s o i n c u i u n v a l o r e d e b b a e s s e r e r i u t a t o
p e r s i t u a z i o n i p a r t i c o l a r i a l l ' i n f u o r i d e l s o l i t o n u l l , c o m e i n v e c e a v v i e n e c o n g l i a t t r i b u t i n o m e
e c o g n o m e . A n z i i n q u e s t o c a s o i l v a l o r e n u l l è a m m e s s o , m a n o n s o n o a m m e s s i v a l o r i a l l ' i n f u o r i
d e l r a n g e [ 0 . . 1 1 0 ] .
L e u l t i m e t r e i s t r u z i o n i s o n o u n e s e m p i o d i c o m e s i a p o s s i b i l e v a l i d a r e u n b e a n i n t e r n o a d
u n a l t r o b e a n . I m m a g i n i a m o l a g e r a r c h i a t r a g l i o g g e t t i c o n u n o s c h e m a c o m e i n g u r a 2 . 1 :
Persona
+nome: String
+cognome: String
+eta: Integer
+indirizzo: Indirizzo
Indirizzo
attributi
omessi...
F i g u r a 2 . 1 : P e r s o n a - > I n d i r i z z o
L a f u n z i o n e p u s h N e s t e d P a t h ( S t r i n g n o m e A t t r i b u t o ) d e l l ' o g g e t t o E r r o r s c o n s e n t e d i a v a n -
z a r e d i u n o s t e p n e l l a g e r a r c h i a , i n b a s e a l n o m e d e l l ' a t t r i b u t o c h e g l i v i e n e p a s s a t o . D a l
m o m e n t o d e l l ' i n v o c a z i o n e d i q u e s t a f u n z i o n e , l ' o g g e t t o e c o m i n c i a a d o c c u p a r s i d i I n d i r i z z o
e n o n p i ù d i P e r s o n a . A q u e s t o p u n t o , c o n l ' i s t r u z i o n e i n v o k e V a l i d a t o r ( . . . ) d i V a l i d a t i o n U -
t i l s p o s s o a t t i v a r e l a v a l i d a z i o n e s u l l ' i n d i r i z z o . V e n g o n o p a s s a t i c o m e p a r a m e t r i u n ' i s t a n z a
d i I n d i r i z z o V a l i d a t o r , l ' i s t a n z a d a v a l i d a r e e l ' o g g e t t o E r r o r s c h e d o v r à g e s t i r e l e e v e n t u a l i
s i t u a z i o n i d ' e r r o r e .
C o n l a f u n z i o n e p o p N e s t e d P a t h ( ) , r i t o r n i a m o i n d i e t r o n e l l a g e r a r c h i a , t o r n a n d o s u l l ' o g g e t -
t o P e r s o n a .
P e r f a r c o m p r e n d e r e a n c o r a m e g l i o i l m e c c a n i s m o , s u p p o n i a m o d i a v e r e l a g e r a r c h i a d i
o g g e t t i i n g u r a 2 . 2 .
S e v o l e s s i m o v a l i d a r e A c o m p l e t a m e n t e , A V a l i d a t o r p o t r e b b e a v e r e i l c o d i c e s e g u e n t e :
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 33/86
C A P I T O L O 2 . V A L I D A Z I O N E 2 6
A
+b: B
+c: C
B
+d: D
C
D
+pippo: String
F i g u r a 2 . 2 : G e r a r c h i a d i o g g e t t i
p u b l i c v o i d v a l i d a t e ( O b j e c t o b j , E r r o r s e ) {
/ / v a l i d a z i o n e d e i c a m p i s e m p l i c i d i A . . .
A a = ( A ) o b j ;
/ / v a l i d a z i o n e d i b
e . p u s h N e s t e d P a t h ( " b " ) ;
V a l i d a t i o n U t i l s . i n v o k e V a l i d a t o r ( n e w B V a l i d a t o r ( ) , a . g e t B ( ) , e ) ;
e . p o p N e s t e d P a t h ( ) ;
/ / v a l i d a z i o n e d i c
e . p u s h N e s t e d P a t h ( " c " ) ;
V a l i d a t i o n U t i l s . i n v o k e V a l i d a t o r ( n e w C V a l i d a t o r ( ) , a . g e t C ( ) , e ) ;
e . p o p N e s t e d P a t h ( ) ;
}
Q u e s t o c o d i c e p a r t e d a l p r e s u p p o s t o c h e c h i h a s c r i t t o B V a l i d a t o r s i s i a o c c u p a t o d i
r i l a n c i a r e a l s u o i n t e r n o i l v a l i d a t o r e s u D , c h e è i n e e t t i l o s c e n a r i o p i ù a u s p i c a b i l e .
Q u a l o r a c o s ì n o n f o s s e , i l c o d i c e a p p e n a v i s t o a n d r e b b e r i s c r i t t o n e l s e g u e n t e m o d o :
p u b l i c v o i d v a l i d a t e ( O b j e c t o b j , E r r o r s e ) {
/ / v a l i d a z i o n e d e i c a m p i s e m p l i c i d i A . . .
A a = ( A ) o b j ;
/ / v a l i d a z i o n e d i b
e . p u s h N e s t e d P a t h ( " b " ) ;
V a l i d a t i o n U t i l s . i n v o k e V a l i d a t o r ( n e w B V a l i d a t o r ( ) , a . g e t B ( ) , e ) ;
/ / v a l i d a z i o n e d i d
e . p u s h N e s t e d P a t h ( " d " ) ;
V a l i d a t i o n U t i l s . i n v o k e V a l i d a t o r ( n e w D V a l i d a t o r ( ) , a . g e t B ( ) . g e t D ( ) , e ) ;
e . p o p N e s t e d P a t h ( ) ;
/ / " r i t o r n o " s u b
e . p o p N e s t e d P a t h ( ) ;
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 34/86
C A P I T O L O 2 . V A L I D A Z I O N E 2 7
/ / v a l i d a z i o n e d i c
e . p u s h N e s t e d P a t h ( " c " ) ;
V a l i d a t i o n U t i l s . i n v o k e V a l i d a t o r ( n e w C V a l i d a t o r ( ) , a . g e t C ( ) , e ) ;
e . p o p N e s t e d P a t h ( ) ;
}
L a c h i a m a t a e . p u s h N e s t e d P a t h ( d ) m i p e r m e t t e d i s c e n d e r e d i u n u l t e r i o r e l i v e l l o n e l l a
g e r a r c h i a e d i p o s i z i o n a r m i s u d .
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 35/86
C a p i t o l o 3
S p r i n g E x p r e s s i o n L a n g u a g e ( S p E L )
3 . 1 I n t r o d u z i o n e
S p r i n g E x p r e s s i o n L a n g u a g e ( o S p E L ) è u n p o t e n t e l i n g u a g g i o p e r l e e s p r e s s i o n i c h e s u p p o r t a
l a p o s s i b i l i t à d i i n t e r r o g a r e e m a n i p o l a r e r e t i d i o g g e t t i a r u n t i m e . L a s i n t a s s i d e l l i n g u a g g i o è
s i m i l e a l l o U n i e d E L , m a o r e a l c u n e f u n z i o n a l i t à i n p i ù , i n v o c a z i o n e d i m e t o d i e f u n z i o n a l i t à
s u l l e s t r i n g h e .
T a l e l i n g u a g g i o è s t a t o c r e a t o p e r f o r n i r e a l l a c o m u n i t à d i S p r i n g u n s i n g o l o l i n g u a g g i o
p e r l e e s p r e s s i o n i c h e p u ò e s s e r e u s a t o f r a t u t t i i p r o d o t t i S p r i n g .
N o n e s s e n d o d i r e t t a m e n t e l e g a t o a S p r i n g , è u n l i n g u a g g i o c h e p u ò e s s e r e u s a t o i n m a n i e r a
i n d i p e n d e n t e .
3 . 2 P a n o r a m i c a s u l l e c a r a t t e r i s t i c h e
S p E L s u p p o r t a l e s e g u e n t i f u n z i o n a l i t à :
e s p r e s s i o n i l e t t e r a l i
o p e r a t o r i b o o l e a n i e r e l a z i o n a l i
e s p r e s s i o n i r e g o l a r i
e s p r e s s i o n i p e r l e c l a s s i
a c c e s s o a g l i a t t r i b u t i , a r r a y , l i s t e e m a p p e
i n v o c a z i o n e d i m e t o d i
a s s e g n a z i o n i
c h i a m a t e d e i c o s t r u t t o r i
o p e r a t o r i t e r n a r i
v a r i a b i l i
f u n z i o n i d e n i t e d a l l ' u t e n t e
p r o i e z i o n e d e l l e c o l l e z i o n i
s e l e z i o n e d e l l e c o l l e z i o n i
e s p r e s s i o n i p e r i t e m p l a t e
2 8
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 36/86
C A P I T O L O 3 . S P R I N G E X P R E S S I O N L A N G U A G E ( S P E L ) 2 9
3 . 3 V a l u t a z i o n e d e l l e e s p r e s s i o n i u s a n d o l ' i n t e r f a c c i a E x p r e s -
s i o n d i S p r i n g
I l c o d i c e c h e s e g u e i n t r o d u c e l e A P I d i S p E L p e r v a l u t a r e l a s e m p l i c e s t r i n g a C i a o M o n d o .
E x p r e s s i o n P a r s e r p a r s e r = n e w S p e l E x p r e s s i o n P a r s e r ( ) ;
E x p r e s s i o n e x p = p a r s e r . p a r s e E x p r e s s i o n ( " ' C i a o M o n d o ' " ) ;
S t r i n g m e s s a g e = ( S t r i n g ) e x p . g e t V a l u e ( ) ;
S y s t e m . o u t . p r i n t l n ( " V i s u a l i z z a z i o n e s t r i n g a : " + m e s s a g e ) ;
L ' o u t p u t p r o d o t t o è :
V i s u a l i z z a z i o n e s t r i n g a : C i a o M o n d o
L ' i n t e r f a c c i a E x p r e s s i o n P a r s e r è r e s p o n s a b i l e d e l p a r s i n g d i u n a s t r i n g a e s p r e s s i o n e . I n
q u e s t o e s e m p i o l a s t r i n g a e s p r e s s i o n e è u n a s t r i n g a l e t t e r a l e d e l i m i t a t a d a a p i c i . L ' i n t e r f a c c i a
E x p r e s s i o n è r e s p o n s a b i l e d e l l a v a l u t a z i o n e d e l l a s t r i n g a e s p r e s s i o n e . C i s o n o d u e e c c e z i o n i c h e
p o s s o n o e s s e r e s o l l e v a t e , P a r s e E x c e p t i o n e d E v a l u a t i o n E x c e p t i o n , c h i a m a n d o r i s p e t t i v a m e n t e
p a r s e r . p a r s e E x p r e s s i o n ( ) e e x p . g e t V a l u e ( ) .
S p E L s u p p o r t a l a c h i a m a t a d i m e t o d i , l ' a c c e s s o a g l i a t t r i b u t i e l a c h i a m a t a d e i c o s t r u t t o r i .
I l s e g u e n t e e s e m p i o m o s t r a l a c h i a m a t a d e l m e t o d o c o n c a t ( ) d e l l e s t r i n g h e :
E x p r e s s i o n P a r s e r p a r s e r = n e w S p e l E x p r e s s i o n P a r s e r ( ) ;
E x p r e s s i o n e x p = p a r s e r . p a r s e E x p r e s s i o n ( " ' C i a o M o n d o ' . c o n c a t ( ' ! ' ) " ) ;
S t r i n g m e s s a g e = ( S t r i n g ) e x p . g e t V a l u e ( ) ;
S y s t e m . o u t . p r i n t l n ( " E s e m p i o c o n c a t e n a z i o n e : " + m e s s a g e ) ;
L ' o u t p u t p r o d o t t o è :
E s e m p i o c o n c a t e n a z i o n e : C i a o M o n d o !
N e l l ' e s e m p i o c h e s e g u e s i m o s t r a c o m e s i a p o s s i b i l e l ' a c c e s s o a d u n a t t r i b u t o d i u n b e a n ,
i n q u e s t o c a s o è l ' a t t r i b u t o b y t e s d i u n a s t r i n g a :
E x p r e s s i o n P a r s e r p a r s e r = n e w S p e l E x p r e s s i o n P a r s e r ( ) ;
E x p r e s s i o n e x p = p a r s e r . p a r s e E x p r e s s i o n ( " ' C i a o M o n d o ' . b y t e s " ) ;
b y t e [ ] b y t e s = ( b y t e [ ] ) e x p . g e t V a l u e ( ) ;
S y s t e m . o u t . p r i n t ( " A c c e s s o a l c a m p o b y t e s : " ) ;
f o r ( i n t i = 0 ; i < b y t e s . l e n g t h ; i + + )
S y s t e m . o u t . p r i n t ( b y t e s [ i ] + " " ) ;
S y s t e m . o u t . p r i n t l n ( ) ;
L ' o u t p u t p r o d o t t o è :
A c c e s s o a l c a m p o b y t e s : 6 7 1 0 5 9 7 1 1 1 3 2 7 7 1 1 1 1 1 0 1 0 0 1 1 1
N a t u r a l m e n t e è p o s s i b i l e a c c e d e r e a d a t t r i b u t i a n n i d a t i u t i l i z z a n d o l ' o p e r a t o r e p u n t o ( . ) :
E x p r e s s i o n P a r s e r p a r s e r = n e w S p e l E x p r e s s i o n P a r s e r ( ) ;
E x p r e s s i o n e x p = p a r s e r . p a r s e E x p r e s s i o n ( " ' C i a o M o n d o ' . b y t e s . l e n g t h " ) ;
i n t l e n g t h = ( I n t e g e r ) e x p . g e t V a l u e ( ) ;
S y s t e m . o u t . p r i n t l n ( " L u n g h e z z a d e l c a m p o b y t e s : " + l e n g t h ) ;
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 37/86
C A P I T O L O 3 . S P R I N G E X P R E S S I O N L A N G U A G E ( S P E L ) 3 0
L ' o u t p u t p r o d o t t o è :
L u n g h e z z a d e l c a m p o b y t e s : 1 0
C o n i l p r o s s i m o e s e m p i o s i m o s t r a c o m e s i a p o s s i b i l e i n v o c a r e u n c o s t r u t t o r e :
E x p r e s s i o n P a r s e r p a r s e r = n e w S p e l E x p r e s s i o n P a r s e r ( ) ;
E x p r e s s i o n e x p = p a r s e r . p a r s e E x p r e s s i o n ( " n e w S t r i n g ( ' C i a o M o n d o ' ) . t o U p p e r C a s e ( ) " ) ;
S t r i n g m e s s a g e = e x p . g e t V a l u e ( S t r i n g . c l a s s ) ;
S y s t e m . o u t . p r i n t l n ( " C r e a t a l a s t r i n g a : " + m e s s a g e ) ;
L ' o u t p u t p r o d o t t o è :
C r e a t a l a s t r i n g a : C I A O M O N D O
N o t a r e l ' u s o d e l m e t o d o p u b b l i c o g e n e r i c o < T > T g e t V a l u e ( C l a s s < T > d e s i r e d R e s u l t T y p e ) .
U s a n d o q u e s t o m e t o d o s i r i m u o v e l a n e c e s s i t à d i c a s t a r e i l v a l o r e d e l l ' e s p r e s s i o n e a l t i p o d e l
r i s u l t a t o d e s i d e r a t o . V i e n e s o l l e v a t a u n a E v a l u a t i o n E x c e p t i o n s e i l v a l o r e n o n p u ò e s s e r e
c a s t a t o a l t i p o T .
L ' u s o p i ù c o m u n e d i S p E L è q u e l l o d i p r o v v e d e r e a v a l u t a r e u n ' e s p r e s s i o n e s u u n a s p e c i c a
i s t a n z a d i u n o g g e t t o . N e l l ' e s e m p i o c h e s e g u e r e c u p e r i a m o i l v a l o r e d e l l a p r o p r i e t à n o m e d a
u n ' i s t a n z a d e l l a c l a s s e P e r s o n a . V e d i a m o u n e s e m p i o :
P e r s o n a p = n e w P e r s o n a ( ) ;
p . s e t N o m e ( " S i m o n e " ) ;
p . s e t C o g n o m e ( " T r a v e r s i " ) ;
E x p r e s s i o n P a r s e r p a r s e r = n e w S p e l E x p r e s s i o n P a r s e r ( ) ;
E x p r e s s i o n e x p = p a r s e r . p a r s e E x p r e s s i o n ( " n o m e " ) ;
E v a l u a t i o n C o n t e x t c o n t e x t = n e w S t a n d a r d E v a l u a t i o n C o n t e x t ( ) ;
c o n t e x t . s e t R o o t O b j e c t ( p ) ;
S t r i n g n a m e = ( S t r i n g ) e x p . g e t V a l u e ( c o n t e x t ) ;
S y s t e m . o u t . p r i n t l n ( " I l n o m e d e l b e a n p è : " + n a m e ) ;
L ' o u t p u t è :
I l n o m e d e l b e a n p è : S i m o n e
N e l l ' u l t i m a i s t r u z i o n e , i l v a l o r e d e l l a v a r i a b i l e S t r i n g n o m e v i e n e s e t t a t a a S i m o n e . L a
c l a s s e S t a n d a r d E v a l u a t i o n C o n t e x t c o n s e n t e d i s p e c i c a r e d i q u a l e o g g e t t o d e v e e s s e r e v a l -
u t a t o l ' a t t r i b u t o n o m e . P e r s p e c i c a r g l i e l o s i u s a t a l a f u n z i o n e s e t R o o t O b j e c t ( ) . E ' p o s s i -
b i l e r i u s a r e l a s t e s s a e s p r e s s i o n e p i ù v o l t e s e t t a n d o d i v o l t a i n v o l t a u n n u o v o r o o t O b j e c t
n e l l ' E v a l u a t i o n C o n t e x t . L e e s p r e s s i o n i s o n o v a l u t a t e u t i l i z z a n d o l e r e e c t i o n .
C o m e e s e m p i o i n t r o d u t t i v o n a l e , v e d i a m o l ' u s o d i u n o p e r a t o r e b o o l e a n o u s a n d o l ' o g g e t t o
P e r s o n a u s a t o n e l l ' e s e m p i o p r e c e d e n t e .
P e r s o n a p = n e w P e r s o n a ( ) ;
p . s e t N o m e ( " S i m o n e " ) ;
E x p r e s s i o n P a r s e r p a r s e r = n e w S p e l E x p r e s s i o n P a r s e r ( ) ;
E x p r e s s i o n e x p = p a r s e r . p a r s e E x p r e s s i o n ( " n o m e = = ' S i m o n e ' " ) ;
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 38/86
C A P I T O L O 3 . S P R I N G E X P R E S S I O N L A N G U A G E ( S P E L ) 3 1
E v a l u a t i o n C o n t e x t c o n t e x t = n e w S t a n d a r d E v a l u a t i o n C o n t e x t ( ) ;
c o n t e x t . s e t R o o t O b j e c t ( p ) ;
b o o l e a n r i s u l t a t o = e x p . g e t V a l u e ( c o n t e x t , B o o l e a n . c l a s s ) ;
S y s t e m . o u t . p r i n t l n ( " V a l u t a z i o n e d e l l ' e s p r e s s i o n e b o o l e a n a : " + r i s u l t a t o ) ;
L ' o u t p u t è :
V a l u t a z i o n e d e l l ' e s p r e s s i o n e b o o l e a n a : t r u e
3 . 3 . 1 L ' i n t e r f a c c i a E v a l u a t i o n C o n t e x t
L ' i n t e r f a c c i a E v a l u a t i o n C o n t e x t è u s a t a p e r v a l u t a r e e s p r e s s i o n i p e r r i s o l v e r e p r o p r i e t à , m e t o -
d i , c a m p i e d a i u t a r e a d e e t t u a r e c o n v e r s i o n e d i t i p i . L ' i m p l e m e n t a z i o n e S t a n d a r d E v a l u a -
t i o n C o n t e x t u s a l e r e e c t i o n p e r m a n i p o l a r e g l i o g g e t t i , n a s c o n d e n d o i m e t o d i , i c a m p i e i
c o s t r u t t o r i d e l l e i s t a n z e d e l p a c k a g e j a v a . l a n g . r e e c t p e r i n c r e m e n t a r e l e p r e s t a z i o n i .
L ' o g g e t t o S t a n d a r t E v a l u a t i o n C o n t e x t è d o v e s i s p e c i c a l ' o g g e t t o r a d i c e d a v a l u t a r e a t -
t r a v e r s o i l m e t o d o s e t R o o t O b j e c t o p a s s a n d o l ' o g g e t t o r o o t a l c o s t r u t t o r e . E ' p o s s i b i l e i n o l t r e
s p e c i c a r e v a r i a b i l i e f u n z i o n i c h e p o s s o n o e s s e r e u s a t e n e l l e e s p r e s s i o n i u s a n d o i m e t o d i
s e t V a r i a b l e e r e g i s t e r F u n c t i o n .
3 . 4 S u p p o r t o d e l l e e s p r e s s i o n i a l l a d e n i z i o n e d e i b e a n
S p E L p u ò e s s e r e u s a t o c o n l ' X M L o c o n l e a n n o t a z i o n i p e r l a d e n i z i o n e d e i b e a n . I n e n t r a m b i
i c a s i l a s i n t a s s i p e r d e n i r e l e e s p r e s s i o n i è # { < s t r i n g a e s p r e s s i o n e > } .
C o n g u r a z i o n e b a s a t a s u X M L I l v a l o r e d i u n a t t r i b u t o o d e l l ' a r g o m e n t o d i u n c o n t r u t -
t o r e p u ò e s s e r e d e n i t o c o m e d i s e g u i t o :
< b e a n i d = " n u m e r o " c l a s s = " e s e m p i . N u m e r o " >
< p r o p e r t y n a m e = " r a n d o m N u m b e r " v a l u e = " # { T ( j a v a . l a n g . M a t h ) . r a n d o m ( ) * 1 0 0 . 0 } " / >
< ! - - a l t r e p r o p r i e t à - - >
< / b e a n >
L a v a r i a b i l e s y s t e m P r o p e r t i e s è p r e d e n i t a , q u i n d i è p o s s i b i l e u s a r l a n e l l e e s p r e s s i o n i c o m e
m o s t r a t o i n s e g u i t o . N o t a c h e n o n s i d e v e f a r p r e c e d e r e l a v a r i a b i l e p r e d e n i t a d a l s i m b o l o #
i n q u e s t o c o s t e s t o .
< b e a n i d = " t a x C a l c u l a t o r " c l a s s = " e s e m p i . T a x C a l c u l a t o r " >
< p r o p e r t y n a m e = " d e f a u l t L o c a l e " v a l u e = " # { s y s t e m P r o p e r t i e s [ ' u s e r . r e g i o n ' ] } " / >
< ! - - a l t r e p r o p r i e t à - - >
< / b e a n >
E ' p o s s i b i l e r i f e r i r s i a d u n a t t r i b u t o d i u n a l t r o b e a n , p e r e s e m p i o :
< b e a n i d = " n u m e r o " c l a s s = " e s e m p i . N u m e r o " >
< p r o p e r t y n a m e = " r a n d o m N u m b e r " v a l u e = " # { T ( j a v a . l a n g . M a t h ) . r a n d o m ( ) * 1 0 0 . 0 } " / >
< ! - - a l t r e p r o p r i e t à - - >
< / b e a n >
< b e a n i d = " s h a p e G u e s s " c l a s s = " e s e m p i . S h a p e G u e s s " >
< p r o p e r t y n a m e = " i n i t i a l S h a p e S e e d " v a l u e = " # { n u m e r o . r a n d o m N u m b e r } " / >
< ! - - a l t r e p r o p r i e t à - - >
< / b e a n >
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 39/86
C A P I T O L O 3 . S P R I N G E X P R E S S I O N L A N G U A G E ( S P E L ) 3 2
C o n g u r a z i o n e b a s a t a s u l l e a n n o t a z i o n i L ' a n n o t a z i o n e @ V a l u e p u ò e s s e r e p o s i z i o n a t a
s u i c a m p i , s u i m e t o d i e s u i p a r a m e t r i d e i m e t o d i / c o s t r u t t o r i , p e r s p e c i c a r e u n v a l o r e d i
d e f a u l t . A d e s e m p i o :
p u b l i c s t a t i c c l a s s F i e l d V a l u e T e s t B e a n {
@ V a l u e ( " # { s y s t e m P r o p e r t i e s [ ' u s e r . r e g i o n ' ] } " )
p r i v a t e S t r i n g d e f a u l t L o c a l e ;
p u b l i c v o i d s e t D e f a u l t L o c a l e ( S t r i n g d e f a u l t L o c a l e ) {
t h i s . d e f a u l t L o c a l e = d e f a u l t L o c a l e ;
}
p u b l i c S t r i n g g e t D e f a u l t L o c a l e ( ) {
r e t u r n t h i s . d e f a u l t L o c a l e ;
}
}
Q u e l l o c h e s e g u e è u n u s o e q u i v a l e n t e , i n c u i l ' a n n o t a z i o n e v i e n e a p p l i c a t a a l m e t o d o s e t t e r
d e l l o s t e s s o a t t r i b u t o .
p u b l i c s t a t i c c l a s s P r o p e r t y V a l u e T e s t B e a n {
p r i v a t e S t r i n g d e f a u l t L o c a l e ;
@ V a l u e ( " # { s y s t e m P r o p e r t i e s [ ' u s e r . r e g i o n ' ] } " )
p u b l i c v o i d s e t D e f a u l t L o c a l e ( S t r i n g d e f a u l t L o c a l e ) {
t h i s . d e f a u l t L o c a l e = d e f a u l t L o c a l e ;
}
p u b l i c S t r i n g g e t D e f a u l t L o c a l e ( ) {
r e t u r n t h i s . d e f a u l t L o c a l e ;
}
}
3 . 5 R e f e r e n c e d e l l i n g u a g g i o
P e r u n a d e s c r i z i o n e e s a u s t i v a d e l l e p o s s i b i l i t à s i n t a t t i c h e d i S p E L c o n s u l t a r e l a s e z i o n e 6 . 5
d e l l e r e f e r e n c e u c i a l i d i S p r i n g .
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 40/86
C a p i t o l o 4
S p r i n g A O P
4 . 1 I n t r o d u z i o n e
L a p r o g r a m m a z i o n e o r i e n t a t a a g l i a s p e t t i ( A O P ) s i p u ò p e n s a r e c o m p l e m e n t a r e a l l a p r o -
g r a m m a z i o n e o r i e n t a t a a g l i o g g e t t i ( O O P ) , f o r n e n d o u n ' a l t r o m o d o d i p e n s a r e l a s t r u t t u r a d i
u n ' a p p l i c a z i o n e . S e l ' e l e m e n t o s u c u i s i b a s a l a O O P è l a c l a s s e , l ' e l e m e n t o s u c u i s i b a s a l a
A O P è l ' a s p e t t o . G l i a s p e t t i c o n s e n t o n o d i g e s t i r e r e s p o n s a b i l i t à c h e t a g l i a n o t r a s v e r s a l m e n t e
l ' a p p l i c a z i o n e , c o i n v o l g e n d o p i ù o g g e t t i t r a l o r o . T r a i v a r i e s e m p i p o s s i a m o c i t a r e i l l o g g i n g ,
l a g e s t i o n e d e i p r i v i l e g i d i u n u t e n t e , l a g e s t i o n e d e l l e t r a n s a z i o n i .
U n o d e i c o m p o n e n t i c h i a v e d i S p r i n g è i l f r a m e w o r k A O P . D a l m o m e n t o c h e i l c o n t a i n e r
I o C n o n d i p e n d e d a q u e l l o A O P , n o n è n e c e s s a r i o u s a r e q u e s t ' u l t i m o s e n o n s i v u o l e f a r l o .
A O P è u s a t o n e l f r a m e w o r k S p r i n g p e r :
p r o v v e d e r e a l l a d i c h i a r a z i o n e d i s e r v i z i e n t e r p r i s e , s p e c i a l m e n t e i n s o s t i t u z i o n e d e g l i
E J B . I l p i ù i m p o r t a n t e è q u e l l o c h e r i g u a r d a l a g e s t i o n e d e l l e t r a n s a z i o n i .
c o n s e n t i r e a g l i s v i l u p p a t o r i d i i m p l e m e n t a r e a s p e t t i p r o p r i .
4 . 1 . 1 C o n c e t t i d e l l ' A O P
C o m i n c i a m o c o n i l d e n i r e a l c u n i c o n c e t t i f o n d a m e n t a l i e u n p o ' d i t e r m i n o l o g i a . Q u e s t i
t e r m i n i n o n s o n o s p e c i c i d i S p r i n g .
A s p e c t : u n a m o d u l a r i z z a z i o n e d i u n c o n c e t t o c h e a t t r a v e r s a p i ù c l a s s i . I n S p r i n g A O P g l i
a s p e t t i s o n o i m p l e m e n t a t i u s a n d o l e c l a s s i t r a d i z i o n a l i o c o n c l a s s i t r a d i z i o n a l i a n n o t a t e
c o n l ' a n n o t a z i o n e @ A s p e c t .
J o i n P o i n t : u n p u n t o ( u n m o m e n t o ) d u r a n t e l ' e s e c u z i o n e d i u n p r o g r a m m a , c o m e
p o t r e b b e e s s e r e l ' e s e c u z i o n e d i u n m e t o d o o l a g e s t i o n e d i u n e c c e z i o n e , l ' a c c e s s o a d
u n a v a r i a b i l e , e c c . I n S p r i n g A O P u n j o i n p o i n t r a p p r e s e n t a s e m p r e l ' e s e c u z i o n e d i u n
m e t o d o .
A d v i c e : a z i o n e p r e s a d a u n a s p e c t i n u n p a r t i c o l a r e j o i n p o i n t . C i s o n o d i e r e n t i t i p i
d i a d v i c e , c o m e a r o u n d , b e f o r e e a f t e r . M o l t i f r a m e w o r k A O P , i n c l u s o S p r i n g ,
m o d e l l a n o u n a d v i c e c o m e u n i n t e r c e t t a t o r e , m a n t e n e n d o u n a c a t e n a d i i n t e r c e t t a t o r i
a t t o r n o a d u n j o i n p o i n t .
P o i n t c u t : u n p r e d i c a t o c h e m a t c h a c o n i j o i n p o i n t . U n a d v i c e è a s s o c i a t o c o n u n ' e s p r e s -
s i o n e d i u n p o i n t c u t e v i e n e e s e g u i t o o g n i v o l t a c h e i l j o i n p o i n t e i l p o i n t c u t m a t c h a n o
3 3
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 41/86
C A P I T O L O 4 . S P R I N G A O P 3 4
( p e r e s e m p i o l ' e s e c u z i o n e d i u n m e t o d o c o n u n d e t e r m i n a t o n o m e ) . I l c o n c e t t o d i j o i n
p o i n t s c o m e m a t c h a t i d a u n ' e s p r e s s i o n e d i u n p o i n t c u t è u n c o n c e t t o c e n t r a l e n e l l ' A O P ,
e S p r i n g u s a d i d e f a u l t l e e s p r e s s i o n i d e i p o i n t c u t d e l l i n g u a g g i o A s p e c t J .
I n t r o d u c t i o n : p o s s i b i l i t à d i d i c h i a r a r e m e t o d i o a t t r i b u t i a g g i u n t i v i a l l ' i n t e r n o d i u n
o g g e t t o , a l t e r a n d o n e l a s t r u t t u r a . S p r i n g A O P p e r m e t t e d i i n t r o d u r r e n u o v e i n t e r f a c c e
( e l a l o r o c o r r i s p o n d e n t e i m p l e m e n t a z i o n e ) a d o g n i o g g e t t o s o g g e t t o a d a d v i c e . N e l l a
c o m u n i t à d i A s p e c t J , q u e s t a f u n z i o n a l i t à è c h i a m a t a i n t e r - t y p e d e c l a r a t i o n .
T a r g e t O b j e c t : O g g e t t o c h e è s o g g e t t o a d a d v i c e d a u n o o p i ù a s p e t t i . E ' c h i a m a t o a n c h e
a d v i c e d o b j e c t . D a l m o m e n t o c h e S p r i n g A O P è s t a t o i m p l e m e n t a t o u s a n d o p r o x i e s
r u n t i m e , q u e s t i o g g e t t i s a r a n n o s e m p r e p r o x i e d o b j e c t .
A O P P r o x y : u n o g g e t t o c r e a t o d a l f r a m e w o r k A O P p e r i m p l e m e n t a r e i c o n t r a t t i d i u n
a s p e t t o ( m e t o d i , e c c . ) . N e l f r a m e w o r k S p r i n g , u n p r o x y A O P s a r à u n p r o x y d i n a m i c o
J D K o u n p r o x y C G L I B .
W e a v i n g : l e g a r e g l i a s p e t t i c o n g l i a l t r i t i p i o d o g g e t t i d e l l ' a p p l i c a z i o n e p e r c r e a r e
a d v i s e d o b j e c t . Q u e s t o p u ò e s s e r e f a t t o a t e m p o d i c o m p i l a z i o n e ( u s a n d o i l c o m p i l a t o r e
A s p e c t J , p e r e s e m p i o ) , a t e m p o d i c a r i c a m e n t o o a r u n t i m e . S p r i n g A O P , c o m e a n c h e
i l f r a m e w o r k J a v a A O P , e e t t u a n o q u e s t o l e g a m e a r u n t i m e .
T i p i d i a d v i c e :
b e f o r e : a d v i c e c h e v i e n e e s e g u i t o p r i m a d i u n j o i n p o i n t , m a c h e n o n p u ò a l t e r a r e i l u s s o
d i e s e c u z i o n e c h e p r e c e d e i l j o i n p o i n t ( a m e n o c h e n o n s i a s o l l e v a t a u n ' e c c e z i o n e ) .
a f t e r r e t u r n i n g : a d v i c e c h e v i e n e e s e g u i t o d o p o c h e u n j o i n p o i n t t e r m i n i n o r m a l m e n t e :
p e r e s e m p i o , s e u n m e t o d o r i t o r n a s e n z a s o l l e v a r e e c c e z i o n i .
A f t e r t h r o w i n g : a d v i c e c h e v i e n e e s e g u i t o s e u n m e t o d o t e r m i n a s o l l e v a n d o u n ' e c c e z i o n e .
A f t e r ( n a l l y ) : a d v i c e c h e v i e n e e s e g u i t o i n d i p e n d e n t e m e n t e d a c o m e u n j o i n p o i n t
t e r m i n a .
A r o u n d : a d v i c e c h e v i e n e e s e g u i t o q u a n d o v i e n e i n t e r c e t t a t a l a c h i a m a t a a d u n m e t o d o
d e l l ' o g g e t t o t a r g e t . Q u e s t o è i l p i ù p o t e n t e t i p o d i a d v i c e .
S i r a c c o m a n d a s e m p r e l ' u t i l i z z o d e l t i p o d i a d v i c e m e n o p o t e n t e c h e i m p l e m e n t a i l c o m -
p o r t a m e n t o r i c h i e s t o . P e r e s e m p i o , s e s i h a l a n e c e s s i t à s o l o d i e s e g u i r e u n u p d a t e d e l l a c a c h e
c o n i l v a l o r e d i r i t o r n o d i u n m e t o d o , è m e g l i o i m p l e m e n t a r e u n a f t e r r e t u r n i n g a d v i c e c h e
u n a r o u n d a d v i c e , a n c h e s e u n a r o u n d a d v i c e p u ò f a r e l a s t e s s a c o s a . U s a n d o g l i a d v i c e p i ù
s p e c i c i s i r e n d e i l m o d e l l o d i p r o g r a m m a z i o n e p i ù s e m p l i c e e m e n o s o g g e t t o a d e r r o r i .
4 . 1 . 2 C a p a c i t à e o b i e t t i v i d i S p r i n g A O P
S p r i n g A O P è i m p l e m e n t a t o i n J a v a e q u i n d i n o n c ' è b i s o g n o d i a l c u n p r o c e s s o d i c o m p i l a z i o n e .
E ' p o s s i b i l e u t i l i z z a r l o a l l ' i n t e r n o d i c o n t a i n e r p e r J a v a E E e a p p l i c a t i o n s e r v e r .
S p r i n g A O P a t t u a l m e n t e s u p p o r t a s o l o j o i n p o i n t s u l l ' e s e c u z i o n e d i m e t o d i , o v v e r o g l i
e v e n t i i n t e r c e t t a t i s o n o s o l o q u e l i c h e c o i n c i d o n o c o n l a c h i a m a t a d i m e t o d i . L ' i n t e r c e t t a z i o n e
d e l l ' a c c e s s o a i c a m p i n o n è s t a t a i m p l e m e n t a t a , n o n o s t a n t e i l s u p p o r t o p e r t a l e f u n z i o n a l i t à
p o t r e b b e e s s e r e a g g i u n t o s e n z a d a n n i p e r i l c o r e d e l l e A P I d i S p r i n g A O P . S e s i h a n e c e s s i t à
d i q u e s t e f u n z i o n a l i t à , v a l u t a r e l a p o s s i b i l i t à d i u s a r e u n l i n g u a g g i o c o m e A s p e c t J .
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 42/86
C A P I T O L O 4 . S P R I N G A O P 3 5
L ' a p p r o c c i o d i S p r i n g A O P a l l a p r o g r a m m a z i o n e o r i e n t a t a a g l i a s p e t t i è d i v e r s a r i s p e t -
t o a g l i a l t r i f r a m e w o r k A O P . L ' o b i e t t i v o n o n è f o r n i r e u n ' i m p l e m e n t a z i o n e c o m p l e t a d e l -
l ' A O P ; p i u t t o s t o s i t r a t t a d i p r o v v e d e r e a d u n a p r o f o n d a i n t e g r a z i o n e t r a l ' i m p l e m e n t a z i o n e
d i A O P e S p r i n g I o C p e r f o r n i r e l ' a i u t o n e c e s s a r i o a r i s o l v e r e i p r o b l e m i t i p i c i d e l l e a p p l i c a z i o n i
e n t e r p r i s e .
I n f a t t i , p e r e s e m p i o , l e f u n z i o n a l i t à d i S p r i n g A O P s o n o t i p i c a m e n t e u s a t e i n s i e m e c o n
q u e l l e d e l c o n t a i n e r I o C . G l i a s p e t t i s o n o c o n g u r a t i u t i l i z z a n d o l a n o r m a l e s i n t a s s i p e r l a
d e n i z i o n e d e i b e a n : q u e s t a è u n a d i e r e n z a f o n d a m e n t a l e c o n l e a l t r e i m p l e m e n t a z i o n i A O P .
C i s o n o a l c u n e c o s e c h e n o n s i p o s s o n o f a r e f a c i l m e n t e o e c i e n t e m e n t e c o n S p r i n g A O P ,
c o m e o g g e t t i a d v i s e m o l t o d e t t a g l i a t i : A s p e c t J è l a m i g l i o r e s c e l t a i n q u e s t i c a s i . C o m u n q u e ,
S p r i n g A O P c o n s e n t e d i u t i l i z z a r e s o l u z i o n i e c c e l l e n t i p e r m o l t i p r o b l e m i n e l l e a p p l i c a z i o n i
J a v a E E .
S p r i n g A O P n o n p o t r à m a i c o m p e t e r e c o n A s p e c t J p e r u n a c o m p l e t a i m p l e m e n t a z i o n e
d e l l ' A O P . S i a i f r a m e r w o k b a s a t i s u p r o x y , c o m e S p r i n g A O P , s i a q u e l l i b a s a t i s u c o m p i l a z i o n e ,
c o m e A s p e c t J , s o n o u g u a l m e n t e u t i l i e v a n n o c o n s i d e r a t i c o m p l e m e n t a r i , p i u t t o s t o c h e i n
c o m p e t i z i o n e .
4 . 1 . 3 A O P P r o x i e s
S p r i n g A O P d i d e f a u l t u t i l i z z a i p r o x y d i n a m i c i s t a n d a r d d i J 2 S E p e r r e a l i z z a r e i p r o x y A O P .
Q u e s t o p e r m e t t e l ' u s o d e i p r o x y s u l l e i n t e r f a c c e .
V e n g o n o i n o l t r e u t i l i z z a t i i p r o x y C G L I B . Q u e s t o è n e c e s s a r i o p e r e e t t u a r e p r o x y s u l l e
c l a s s i i n v e c e c h e s u l l e i n t e r f a c c i e . C G L I B è u s a t o d i d e f a u l t s u t u t t i g l i o g g e t t i d i b u s i n e s s c h e
n o n i m p l e m e n t a n o i n t e r f a c c e . E ' b u o n a n o r m a p r o g r a m m a r e p e n s a n d o p r i m a d i t u t t o a l l e
i n t e r f a c c e , p i u t t o s t o c h e a l l e c l a s s i .
C a p i r e c h e S p r i n g A O P è b a s a t o s u p r o x y è i m p o r t a n t e .
4 . 2 A O P c o n @ A s p e c t J
@ A s p e c t J s i r i f e r i s c e a d u n o s t i l e p e r l a d i c h i a r a z i o n e d e g l i a s p e t t i u t i l i z z a n d o l e a n n o t a z i o n i
s u l l e n o r m a l i c l a s s i J a v a . L o s t i l e @ A s p e c t J è s t a t o i n t r o d o t t o d a l p r o g e t t o A s p e c t J c o m e
p a r t e d e l l a r e l e a s e 5 . S p r i n g 2 . 0 i n t e r p r e t a l e s t e s s e a n n o t a z i o n i c o m e A s p e c t J 5 , u s a n d o u n a
l i b r e r i a a s u p p o r t o d i A s p e c t J p e r i l p a r s i n g e i l m a t c h i n g d e i p o i n t c u t .
N o n c ' è a l c u n a d i p e n d e n z a d a l c o m p i l a t o r e d i A s p e c t J .
4 . 2 . 1 A b i l i t a r e i l s u p p o r t o a @ A s p e c t J
P e r u t i l i z z a r e g l i a s p e t t i @ A s p e c t J , è n e c e s s a r i o a b i l i t a r e i n S p r i n g i l s u p p o r t o p e r l a l o r o
c o n g u r a z i o n e , c o s i c o m e i l s u p p o r t o a l l ' a u t o p r o x y i n g . P e r a u t o p r o x y i n g s i i n t e n d e i l f a t t o
c h e S p r i n g d e t e r m i n a s e u n b e a n è u n t a r g e t p e r u n o o p i ù a s p e t t i , p o i c h è d e v e e s s e r e a u -
t o m a t i c a m e n t e g e n e r a t o u n p r o x y p e r q u e l b e a n , c h e i n t e r c e t t e r à l e i n v o c a z i o n i d e i m e t o d i ,
a s s i c u r a n d o s i c h e g l i a d v i c e o p p o r t u n i v e n g a n o e s e g u i t i .
I l s u p p o r t o @ A s p e c t J v i e n e a t t i v a t o i n c l u d e n d o i l s e g u e n t e e l e m e n t o n e l l e d i c o n g u -
r a z i o n e :
< a o p : a s p e c t j - a u t o p r o x y / >
Q u e s t o p a r t e d a l p r e s u p p o s t o c h e s i s t i a n o u t i l i z z a n d o i s u p p o r t i p e r l a c o n g u r a z i o n e
b a s a t a s u X M L , d e s c r i t t i i n m a n i e r a p i ù a p p r o f o n d i t a n e l l ' a p p e n d i c e ? ? .
A l t e r n a t i v a m e n t e è p o s s i b i l e u t i l i z z a r e l a s e g u e n t e d e n i z i o n e :
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 43/86
C A P I T O L O 4 . S P R I N G A O P 3 6
< b e a n c l a s s = " o r g . s p r i n g f r a m e w o r k . a o p . a s p e c t j .
a n n o t a t i o n . A n n o t a t i o n A w a r e A s p e c t J A u t o P r o x y C r e a t o r " / >
V a s e g n a l a t o i n o l t r e c h e è n e c e s s a r i o i n c l u d e r e a l c u n e l i b r e r i e A s p e c t J n e l c l a s s p a t h d e l -
l ' a p p l i c a z i o n e : a s p e c t j w e a v e r . j a r e a s p e c t j r t . j a r . Q u e s t e l i b r e r i e s o n o d i s p o n i b i l i n e l l a c a r t e l l a
l i b n e l l a d i r e c t o r y p r i n c i p a l e d ' i n s t a l l a z i o n e d i A s p e c t J .
4 . 2 . 2 D i c h i a r a r e u n a s p e t t o
C o n i l s u p p o r t o @ A s p e c t J a b i l i t a t o , o g n i b e a n d e n i t o a l l ' i n t e r n o d e l c o n t e s t o d e l l ' a p p l i -
c a z i o n e c o n u n a c l a s s e c h e è u n a s p e t t o ( o v v e r o h a l ' a n n o t a z i o n e @ A s p e c t ) s a r à a u t o m a t i -
c a m e n t e r i l e v a t a d a S p r i n g e u s a t a p e r c o n g u r a r e S p r i n g A O P . L ' e s e m p i o c h e s e g u e m o s t r a
l a d e n i z i o n e ( m i n i m a l e ) p e r u n a s p e t t o :
< b e a n i d = " l o g g e r " c l a s s = " e s e m p i o s p r i n g . L o g g e r W i t h A n n o t a t i o n " / >
C o m e s i v e d e , è d i c h i a r a t o c o m e q u a l u n q u e a l t r o b e a n .
L a c l a s s e c o r r i s p o n d e n t e è d e n i t a c o m e s e g u e :
@ A s p e c t
p u b l i c c l a s s L o g g e r W i t h A n n o t a t i o n {
/ / . . .
}
U n a s p e t t o p u ò a v e r e m e t o d i e a t t r i b u t i c o m e q u a l s i a s i a l t r a c l a s s e . P o t r e b b e c o n t e n e r e
i n o l t r e p o i n t c u t , a d v i c e e i n t r o d u c t i o n . I n S p r i n g A O P n o n è p o s s i b i l e c h e u n a s p e t t o f a c c i a
d a t a r g e t p e r u n a d v i c e d a u n a l t r o a s p e t t o . U n a c l a s s e a n n o t a t a c o n @ A s p e c t è e s c l u s a d a l
m e c c a n i s m o d i a u t o p r o x y .
4 . 2 . 3 D i c h i a r a r e u n p o i n t c u t
R i c o r d i a m o c h e i p o i n t c u t s d e t e r m i n a n o i j o i n p o j n t s d i i n t e r e s s e e q u i n d i c i c o n s e n t o n o d i
c o n t r o l l a r e q u a n d o u n a d v i c e d e v e e s s e r e e s e g u i t o .
S p r i n g A O P s u p p o r t a s o l o l ' i n t e r c e t t a z i o n e d e i j o i n p o i n t s c h e c o i n c i d o n o c o n l ' e s e c u z i o n e
d e i m e t o d i d e i b e a n s ( e s o l o d i q u e l l i g e s t i t i d a l c o n t e n i t o r e S p r i n g ) . L a d i c h i a r a z i o n e d i
u n p o i n t c u t è c o m p o s t a d a d u e p a r t i : u n a r m a c o m p r e n d e n t e i l n o m e e a l c u n i p a r a m e t r i , e
u n ' e s p r e s s i o n e c h e d e t e r m i n a e s a t t a m e n t e a q u a l e e s e c u z i o n e d i q u a l i m e t o d i s i a m o i n t e r e s s a t i .
L a r m a d i u n p o i n t c u t p r e v e d e l a n o r m a l e d e n i z i o n e d i u n m e t o d o e l ' e s p r e s s i o n e d e l
p o i n t c u t è i n d i c a t a u s a n d o l ' a n n o t a z i o n e @ P o i n t c u t ( t a l e m e t o d o d e v e a v e r e i l t i p o d i r i t o r n o
v o i d ) .
S u p p o n i a m o d i a v e r e i l s e g u e n t e D a o ( i l q u a l e , p o i c h è s e r v e s o l o a t i t o l o d ' e s e m p i o , e e t t u a
d e l l e n t e q u e r y ) c o n r e l a t i v a i n t e r f a c c i a I D a o :
/ / i n t e r f a c c i a
p u b l i c i n t e r f a c e I D a o {
p u b l i c v o i d s a l v a ( ) ;
p u b l i c v o i d r e c u p e r a ( ) ;
}
/ / c l a s s e d a o
p u b l i c c l a s s D a o i m p l e m e n t s I D a o {
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 44/86
C A P I T O L O 4 . S P R I N G A O P 3 7
p u b l i c v o i d s a l v a ( ) {
S y s t e m . o u t . p r i n t l n ( " S a l v o u n d a t o s u l d b " ) ;
}
p u b l i c v o i d r e c u p e r a ( ) {
S y s t e m . o u t . p r i n t l n ( " H o r e c u p e r a t o u n d a t o d a l d b " ) ;
}
}
S u p p o n i a m o d i e s s e r e i n t e r e s s a t i a l l ' i n t e r c e t t a z i o n e d e l l ' e s e c u z i o n e d i u n q u a l u n q u e m e t o -
d o d i q u e s t a c l a s s e , p e r c h è v o g l i a m o l o g g a r l i , p r i m a e d o p o l a l o r o e s e c u z i o n e .
A l l ' i n t e r n o d e l l ' a s p e t t o d e n i t o p o c o s o p r a , d e n i a m o q u i n d i u n p o i n t c u t s u l l a b a s e d e l l ' e -
s i g e n z a a p p e n a e s p r e s s a . I n q u e s t o e s e m p i o , s a r à i n o l t r e c h i a r i t a l a d i e r e n z a t r a l ' e s p r e s s i o n e
d e l p o i n t c u t e l a s u a r m a .
@ A s p e c t
p u b l i c c l a s s L o g g e r W i t h A n n o t a t i o n {
/ / d e f i n i z i o n e d e i p o i n t c u t
@ P o i n t c u t ( " e x e c u t i o n ( * e s e m p i o s p r i n g . D a o . * ( . . ) ) " ) / / e s p r e s s i o n e
p u b l i c v o i d i n D a o ( ) { } / / f i r m a
}
A b b i a m o d e n i t o u n p o i n t c u t c h i a m a t o i n D a o ( ) . N o t a r e c h e l a r m a è i d e n t i c a a q u e l l a
d i u n q u a l u n q u e m e t o d o v u o t o e c h e i l t i p o d i r i t o r n o è v o i d .
L ' a n n o t a z i o n e @ P o i n t c u t c o n t i e n e t r a p a r e n t e s i u n a s t r i n g a e s p r e s s i o n e c h e d e s c r i v e i
j o i n p o i n t s d i i n t e r e s s e . L ' e s p r e s s i o n e q u i d e n i t a s i a g g a n c i a a t u t t e l e e s e c u z i o n i d i t u t t i i
m e t o d i d e l l a c l a s s e e s e m p i o s p r i n g . D a o . S e a v e s s i m o v o l u t o a g g a n c i a r l o s o l o a l m e t o d o s a l v a ( )
a v r e m m o s c r i t t o l ' e s p r e s s i o n e i n q u e s t o m o d o :
" e x e c u t i o n ( * e s e m p i o s p r i n g . D a o . s a l v a ( ) ) "
I l p o i n t c u t d e s c r i t t o n e l l ' e s e m p i o è s t a t o d e n i t o u s a n d o l e e s p r e s s i o n i r e g o l a r i d i A s p e c t J
5 . P e r u n ' a p p r o f o n d i m e n t o s u l l i n g u a g g i o d i d e n i z i o n e d e i p o i n t c u t i n A s p e c t J f a r e r i f e r i -
m e n t o a l t e s t o A s p e c t J P r o g r a m m i n g G u i d e [ T e a 0 3 ] ( e p e r l ' e s t e n s i o n e a J a v a 5 , A s p e c t J
5 D e v e l o p e r s N o t e b o o k ) o a d u n o d e i l i b r i s u A s p e c t J c o m e E c l i p s e A s p e c t J d i C o l y e r e t .
a l . o p p u r e A s p e c t J i n A c t i o n d i R a m n i v a s L a d d a d .
4 . 2 . 3 . 1 I n d i c a t o r i s u p p o r t a t i p e r i P o i n t c u t
S p r i n g A O P s u p p o r t a i s e g u e n t i i n d i c a t o r i A s p e c t J p e r i p o i n t c u t ( P o i n t c u t D e s i g n a t o r s , o
P C D ) p e r l a d e n i z i o n e d e l l e e s p r e s s i o n i d e i p o i n t c u t :
e x e c u t i o n : p e r i n t e r c e t t a r e l ' e s e c u z i o n e d i u n m e t o d o ; è i l p r i n c i p a l e i n d i c a t o r e c h e s i
u t i l i z z a i n S p r i n g A O P .
w i t h i n : i n d i c a l ' i n s i e m e d e i j o i n p o i n t c o r r i s p o n d e n t i a l l ' e s e c u z i o n e d i m e t o d i c h e s i a n o
p a r t e d i u n t i p o s p e c i c a t o .
t h i s : i n d i c a l ' i n s i e m e d e i j o i n p o i n t c o r r i s p o n d e n t i a l l ' e s e c u z i o n e d i u n m e t o d o d i u n a
p a r t i c o l a r e i s t a n z a d i u n c e r t o t i p o s p e c i c a t o .
t a r g e t : i n d i c a l ' i n s i e m e d e i j o i n p o i n t n e i q u a l i l ' o g g e t t o t a r g e t è u n ' i s t a n z a d i u n c e r t o
t i p o s p e c i c a t o .
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 45/86
C A P I T O L O 4 . S P R I N G A O P 3 8
a r g s : i n d i c a l ' i n s i e m e d e i j o i n p o i n t n e i q u a l i g l i a r g o m e n t i s o n o i s t a n z e d i u n c e r t o t i p o
s p e c i c a t o .
@ t a r g e t : i n d i c a l ' i n s i e m e d e i j o i n p o i n t n e i q u a l i l a c l a s s e c h e s t a e s e g u e n d o o p e r a z i o n i
h a u n ' a n n o t a z i o n e d i u n c e r t o t i p o s p e c i c a t o .
@ a r g s : i n d i c a l ' i n s i e m e d e i j o i n p o i n t n e i q u a l i i l t i p o a r u n t i m e p a s s a t o c o m e a r g o m e n t o
a t t u a l e h a u n ' a n n o t a z i o n e d i u n c e r t o t i p o s p e c i c a t o .
@ w i t h i n : i n d i c a l ' i n s i e m e d e i j o i n p o i n t n e i q u a l i i t i p i h a n n o u n ' a n n o t a z i o n e s p e c i c a t a .
@ a n n o t a t i o n : i n d i c a l ' i n s i e m e d e i j o i n p o i n t n e i q u a l i i l s o g g e t t o d e l j o i n p o i n t h a
u n ' a n n o t a z i o n e s p e c i c a t a .
L a d i e r e n z a t r a t h i s e t a r g e t , c h e a p p a r e n t e m e n t e s e m b r a n o s i m i l i , s i c o m p r e n d e s o l o
r i c o r d a n d o c h e S p r i n g A O P è b a s a t o s u p r o x y . S i d i e r e n z i a i n f a t t i t r a l ' o g g e t t o p r o x y s t e s s o
( i d e n t i c a t o d a t h i s ) e l ' o g g e t t o t a r g e t c h e s i t r o v a d i e t r o i l p r o x y ( i d e n t i c a t o d a t a r g e t ) .
A c a u s a d i q u e s t a n a t u r a , i n o l t r e , i m e t o d i r m a t i c o m e p r o t e c t e d n o n v e n g o n o i n -
t e r c e t t a t i , n è p e r i p r o x y J D K n è p e r q u e l l i C G L I B . L a c o n s e g u e n z a è c h e è p o s s i b i l e
i n t e r c e t t a r e s o l o m e t o d i p u b b l i c i .
I l s e t c o m p l e t o d i i n d i c a t o r i d i A s p e c t J n e c o m p r e n d e a l c u n i c h e n o n s o n o s u p p o r t a t i
d a S p r i n g A O P : c a l l , g e t , s e t , p r e i n i t i a l i z a t i o n , s t a t i c i n i t i a l i z a t i o n , i n i t i a l i z a t i o n , h a n d l e r ,
a d v i c e e x e c u t i o n , w i t h i n c o d e , c o w , c o w b e l o w , i f , @ t h i s e @ w i t h i n c o d e . U t i l i z z a r e q u e s t i
c a u s a i l s o l l e v a m e n t o d i u n a I l l e g a l A r g u m e n t E x c e p t i o n e c c e z i o n e .
P r o b a b i l m e n t e i l s e t c o r r e n t e m e n t e s u p p o r t a t o d a S p r i n g A O P s a r à a m p l i a t o n e l l e v e r s i o n i
s u c c e s s i v e .
S p r i n g A O P i n o l t r e s u p p o r t a u n a l t r o P C D c h i a m a t o b e a n . Q u e s t o p e r m e t t e i l m a t c h i n g
c o n i j o i n p o i n t c h e r i g u a r d a n o u n p a r t i c o l a r e b e a n , p a s s a n d o g l i i l n o m e c h e e s s o h a a l l ' i n t e r n o
d e l c o n t a i n e r . Q u e s t o i n d i c a t o r e h a l a s e g u e n t e f o r m a :
b e a n ( i d O r N a m e o f B e a n )
Q u e s t o i n d i c a t o r e è s p e c i c o d i S p r i n g A O P e q u i n d i n o n e s i s t e i n A s p e c t J .
4 . 2 . 3 . 2 C o m b i n a r e l e e s p r e s s i o n i d e i p o i n t c u t
L e e s p r e s s i o n i d e i p o i n t c u t p o s s o n o e s s e r e c o m b i n a t e u s a n d o g l i o p e r a t o r i ' & & ' , ' | | ' e ' ! ' . E '
i n o l t r e p o s s i b i l e r i f e r i r s i a l l ' e s p r e s s i o n e d i u n p o i n t c u t a t t r a v e r s o i l s u o n o m e . L ' e s e m p i o c h e
s e g u e m o s t r a t r e p o i n t c u t :
/ / i n t e r c e t t a l ' e s e c u z i o n e d i o g n i m e t o d o p u b b l i c o
@ P o i n t c u t ( " e x e c u t i o n ( p u b l i c * * ( . . ) ) " )
p r i v a t e v o i d a n y P u b l i c O p e r a t i o n ( ) { }
/ / i n t e r c e t t a l ' e s e c u z i o n e d i t u t t i i m e t o d i n e l p a c k a g e t r a d i n g
@ P o i n t c u t ( " w i t h i n ( c o m . x y z . s o m e a p p . t r a d i n g . . * ) " )
p r i v a t e v o i d i n T r a d i n g ( ) { }
/ / i n t e r c e t t a l ' e s e c u z i o n e d i t u t t i i m e t o d i p u b b l i c i n e l p a c k a g e t r a d i n g
@ P o i n t c u t ( " a n y P u b l i c O p e r a t i o n ( ) & & i n T r a d i n g ( ) " )
p r i v a t e v o i d t r a d i n g O p e r a t i o n ( ) { }
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 46/86
C A P I T O L O 4 . S P R I N G A O P 3 9
E ' u n a b u o n a a b i t u d i n e c o s t r u i r e e s p r e s s i o n i c o m p l e s s e i n q u e s t o m o d o . Q u a n d o c i s i
r i f e r i s c e a i p o i n t c u t t r a m i t e i l l o r o n o m e , v e n g o n o a p p l i c a t e l e r e g o l e d i v i s i b i l i t à d i J a v a ( p u o i
v e d e r e p o i n t c u t p r i v a t e n e l l o s t e s s o t i p o , p r o t e c t e d n e l l o s t e s s o p a c k a g e e p u b l i c o v u n q u e ) .
L a v i s i b i l i t à n o n i n c i d e s u l l ' a p p l i c a z i o n e d e i p o i n t c u t .
4 . 2 . 3 . 3 C o n d i v i d e r e l e d e n i z i o n i d e i p o i n t c u t i n c o m u n e
M o l t o s p e s s o n e l l e a p p l i c a z i o n i e n t e r p r i s e u n p o i n t c u t n o n è l e g a t o a d u n s i n g o l o a s p e t t o ,
m a p u ò e s s e r e c o n d i v i s o t r a v a r i a s p e t t i d i v e r s i . P u ò e s s e r e u t i l e q u i n d i d e n i r l i a l l ' i n t e r n o
d i u n ' u n i c a c l a s s e . S a r à p o s s i b i l e p o i p o t e r s i r i f e r i r e a d e s s i i n q u a l u n q u e m o m e n t o e d a
q u a l u n q u e p u n t o d e l l ' a p p l i c a z i o n e . P e r e s e m p i o :
@ A s p e c t
p u b l i c c l a s s S y s t e m A r c h i t e c t u r e {
/ * *
* I n t e r c e t t a z i o n e d i q u a l u n q u e m e t o d o n e l l o s t r a t o w e b
* /
@ P o i n t c u t ( " w i t h i n ( c o m . x y z . s o m e a p p . w e b . . * ) " )
p u b l i c v o i d i n W e b L a y e r ( ) { }
/ * *
* I n t e r c e t t a z i o n e d i q u a l u n q u e m e t o d o n e l l o s t r a t o d e i s e r v i z i
* /
@ P o i n t c u t ( " w i t h i n ( c o m . x y z . s o m e a p p . s e r v i c e . . * ) " )
p u b l i c v o i d i n S e r v i c e L a y e r ( ) { }
/ * *
* I n t e r c e t t a z i o n e d i q u a l u n q u e m e t o d o n e l l o s t r a t o d a o
* /
@ P o i n t c u t ( " w i t h i n ( c o m . x y z . s o m e a p p . d a o . . * ) " )
p u b l i c v o i d i n D a t a A c c e s s L a y e r ( ) { }
/ * *
* U n s e r v i z i o b u s i n e s s è l ' e s e c u z i o n e d i o g n i m e t o d o d e f i n i t o n e l l ' i n t e r f a c c i a
* s e r v i c e . Q u e s t a d e f i n i z i o n e p a r t e d a l p r e s u p p o s t o c h e l e i n t e r f a c c e s o n o
* p r e s e n t i a l l ' i n t e r n o d e l p a c k a g e " s e r v i c e " e l e i m p l e m e n t a z i o n i s o n o n e i
* s o t t o - p a c k a g e .
*
* S e s i r a g g r u p p a n o l e i n t e r f a c c e d e i s e r v i z i p e r a r e e f u n z i o n a l i ( p e r e s e m p i o ,
* n e l p a c k a g e c o m . x y z . s o m e a p p . a b c . s e r v i c e e c o m . x y z . d e f . s e r v i c e ) a l l o r a p o t r e b b e
* e s s e r e u s a t a l ' e s p r e s s i o n e " e x e c u t i o n ( * c o m . x y z . s o m e a p p . . s e r v i c e . * . * ( . . ) ) " .
*
* A l t e r n a t i v a m e n t e , s i p u ò s c r i v e r e l ' e s p r e s s i o n e u s a n d o i l P C D ' b e a n ' , c o m e
* " b e a n ( * S e r v i c e ) " ( q u e s t o p a r t e d a l p r e s u p p o s t o c h e s i a s t a t o u s a t o u n c r i t e r i o
* c o e r e n t e n e l l ' a s s e g n a z i o n e d e i n o m i d e i b e a n ) .
* /
@ P o i n t c u t ( " e x e c u t i o n ( * c o m . x y z . s o m e a p p . s e r v i c e . * . * ( . . ) ) " )
p u b l i c v o i d b u s i n e s s S e r v i c e ( ) { }
/ * *
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 47/86
C A P I T O L O 4 . S P R I N G A O P 4 0
* U n ' o p e r a z i o n e d i d a t a a c c e s s c o r r i s p o n d e a l l ' e s e c u z i o n e d i o g n i m e t o d o d e f i n i t o
* n e l l ' i n t e r f a c c i a d a o . Q u e s t o p a r t e d a l p r e s u p p o s t o c h e l e i n t e r f a c c e s o n o s t a t e
* d e f i n i t e a l l ' i n t e r n o d e l p a c k a g e " d a o " e l e l o r o i m p l e m e n t a z i o n i i n s o t t o - p a c k a g e .
* /
@ P o i n t c u t ( " e x e c u t i o n ( * c o m . x y z . s o m e a p p . d a o . * . * ( . . ) ) " )
p u b l i c v o i d d a t a A c c e s s O p e r a t i o n ( ) { }
}
4 . 2 . 3 . 4 A l c u n i e s e m p i
G l i u t e n t i d i S p r i n g A O P u t i l i z z a n o m o l t o s p e s s o l ' i n d i c a t o r e e x e c u t i o n . T a l e i n d i c a t o r e h a l a
s e g u e n t e f o r m a :
e x e c u t i o n ( m o d i f i e r s - p a t t e r n ?
r e t - t y p e - p a t t e r n d e c l a r i n g - t y p e - p a t t e r n ?
n a m e - p a t t e r n ( p a r a m - p a t t e r n ) t h r o w s - p a t t e r n ? )
T u t t e l e p a r t i t r a n n e i l t i p o d i r i t o r n o ( r e - t y p e - p a t t e r n ) s o n o o p z i o n a l i .
I l t i p o d i r i t o r n o d e t e r m i n a q u a l e d e v ' e s s e r e i l t i p o d i r i t o r n o d e i m e t o d i c h e s i i n t e n d e
i n t e r c e t t a r e . M o l t o s p e s s o s i u s a l ' a s t e r i s c o ( * ) p e r i n d i c a r e c h e v a b e n e q u a l u n q u e t i p o d i
r i t o r n o . Q u a n d o n e v i e n e s p e c i c a t o u n o , i l p o i n t c u t m a t c h e r à s o l o c o n t u t t i i m e t o d i c h e ,
o l t r e a r i s p e t t a r e i l r e s t o d e l l ' e s p r e s s i o n e , r i t o r n a n o i l t i p o i n d i c a t o .
I l n a m e - p a t t e r n m a t c h a c o n i l n o m e d e l m e t o d o . E ' p o s s i b i l e u s a r e l ' a s t e r i s c o i n q u a l u n q u e
p a r t e d e l n o m e . A d e s e m p i o :
" e x e c u t i o n ( * e s e m p i o s p r i n g . P i p p o . a b * ( . . ) ) "
/ / m e t o d i d e l l a c l a s s e P i p p o
p u b l i c v o i d a b a ( ) ;
p u b l i c v o i d a b b ( ) ;
p u b l i c v o i d a c a ( ) ;
I m e t o d i a b a ( ) e a b b ( ) v e r r a n n o i n t e r c e t t a t i . I l m e t o d o a c a ( ) n o n v e r r à i n t e r c e t t a t o .
I l p a r a m - p a t t e r n è u n p o ' p i ù c o m p l i c a t o : ( ) m a t c h a u n m e t o d o c h e n o n p r e n d e p a r a m e t r i ,
m e n t r e ( . . ) m a t c h a c o n q u a l u n q u e n u m e r o d i p a r a m e t r i ( z e r o o p i ù ) . I l p a t t e r n ( * ) m a t c h a
c o n i m e t o d i c h e p r e n d o n o u n s o l o p a r a m e t r o ( d i q u a l u n q u e t i p o ) , ( * , S t r i n g ) m a t c h a c o n
i m e t o d i c h e p r e n d o n o d u e p a r a m e t r i , d i c u i i l s e c o n d o n e c e s s a r i a m e n t e d i t i p o S t r i n g . P e r
m a g g i o r i i n f o r m a z i o n i c o n s u l t a r e l a s e z i o n e L a n g u a g e S e m a n t i c s d i A s p e c t J P r o g r a m m i n g
G u i d e [ T e a 0 3 ] .
Q u e l l i c h e s e g u o n o s o n o a l c u n i e s e m p i :
e s e c u z i o n e d i q u a l u n q u e m e t o d o p u b b l i c o
e x e c u t i o n ( p u b l i c * * ( . . ) )
e s e c u z i o n e d i o g n i m e t o d o c o n i l n o m e c h e i n i z i a p e r ' s e t '
e x e c u t i o n ( * s e t * ( . . ) )
e s e c u z i o n e d i o g n i m e t o d o d e n i t o n e l l ' i n t e r f a c c i a A c c o u n t S e r v i c e
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 48/86
C A P I T O L O 4 . S P R I N G A O P 4 1
e x e c u t i o n ( * c o m . x y z . s e r v i c e . A c c o u n t S e r v i c e . * ( . . ) )
e s e c u z i o n e d i o g n i m e t o d o d e n i t o n e l p a c k a g e s e r v i c e
e x e c u t i o n ( * c o m . x y z . s e r v i c e . * . * ( . . ) )
e s e c u z i o n e d i o g n i m e t o d o d e n i t o n e l p a c k a g e s e r v i c e o i n u n q u a l u n q u e s o t t o p a c k a g e
e x e c u t i o n ( * c o m . x y z . s e r v i c e . . * . * ( . . ) )
o g n i j o i n p o i n t ( n e l c a s o d i S p r i n g A O P s o l o e s e c u z i o n e d i m e t o d i ) n e l p a c k a g e s e r v i c e
w i t h i n ( c o m . x y z . s e r v i c e . * )
o g n i j o i n p o i n t ( n e l c a s o d i S p r i n g A O P s o l o e s e c u z i o n e d i m e t o d i ) n e l p a c k a g e s e r v i c e
o i n u n q u a l u n q u e s o t t o - p a c k a g e
w i t h i n ( c o m . x y z . s e r v i c e . . * )
o g n i j o i n p o i n t ( n e l c a s o d i S p r i n g A O P s o l o e s e c u z i o n e d i m e t o d i ) d o v e i l p r o x y i m -
p l e m e n t a l ' i n t e r f a c c i a A c c o u n t S e r v i c e . t h i s è u s a t o a n c h e n e l l a f o r m a c o n g i u n t a c h e s i
v e d r à i n 4 . 2 . 4 . 6 .
t h i s ( c o m . x y z . s e r v i c e . A c c o u n t S e r v i c e )
o g n i j o i n p o i n t ( n e l c a s o d i S p r i n g A O P s o l o e s e c u z i o n e d i m e t o d i ) d o v e l ' o g g e t t o t a r g e t
i m p l e m e n t a l ' i n t e r f a c c i a A c c o u n t S e r v i c e . t a r g e t è u s a t o a n c h e n e l l a f o r m a c o n g i u n t a c h e
s i v e d r à i n 4 . 2 . 4 . 6 .
t a r g e t ( c o m . x y z . s e r v i c e . A c c o u n t S e r v i c e )
o g n i j o i n p o i n t ( n e l c a s o d i S p r i n g A O P s o l o e s e c u z i o n e d i m e t o d i ) c h e p r e n d e u n s i n g o l o
p a r a m e t r o e d o v e l ' a r g o m e n t o p a s s a t o a r u n t i m e è S e r i a l i z a b l e . a r g s è u s a t o a n c h e n e l l a
f o r m a c o n g i u n t a c h e s i v e d r à i n 4 . 2 . 4 . 6 . D a n o t a r e c h e l a s e g u e n t e s c r i t t u r a è d i v e r s a d a
e x e c u t i o n ( * * ( j a v a . i o . S e r i a l i z a b l e ) ) : l a v e r s i o n e c o n a r g s m a t c h a s e i l p a r a m e t r o p a s s a t o
è S e r i a l i z a b l e a r u n t i m e , m e n t r e e x e c u t i o n p r e v e d e u n p a r a m e t r o d i t i p o S e r i a l i z a b l e g i à
n e l l a r m a d e l m e t o d o .
a r g s ( j a v a . i o . S e r i a l i z a b l e )
o g n i j o i n p o i n t ( n e l c a s o d i S p r i n g A O P s o l o e s e c u z i o n e d i m e t o d i ) d o v e l ' o g g e t t o t a r g e t
h a l ' a n n o t a z i o n e @ T r a n s a c t i o n a l . @ t a r g e t è u s a t o a n c h e n e l l a f o r m a c o n g i u n t a c h e s i
v e d r à i n 4 . 2 . 4 . 6 .
@ t a r g e t ( o r g . s p r i n g f r a m e w o r k . t r a n s a c t i o n . a n n o t a t i o n . T r a n s a c t i o n a l )
o g n i j o i n p o i n t ( n e l c a s o d i S p r i n g A O P s o l o e s e c u z i o n e d i m e t o d i ) d o v e i l t i p o d i c h i a r a t o
d e l l ' o g g e t t o t a r g e t h a l ' a n n o t a z i o n e @ T r a n s a c t i o n a l . @ w i t h i n è u s a t o a n c h e n e l l a
f o r m a c o n g i u n t a c h e s i v e d r à i n 4 . 2 . 4 . 6 .
@ w i t h i n ( o r g . s p r i n g f r a m e w o r k . t r a n s a c t i o n . a n n o t a t i o n . T r a n s a c t i o n a l )
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 49/86
C A P I T O L O 4 . S P R I N G A O P 4 2
o g n i j o i n p o i n t ( n e l c a s o d i S p r i n g A O P s o l o e s e c u z i o n e d i m e t o d i ) d o v e i l m e t o d o i n
e s e c u z i o n e h a l ' a n n o t a z i o n e @ T r a n s a c t i o n a l . @ a n n o t a t i o n è u s a t o a n c h e n e l l a f o r m a
c o n g i u n t a c h e s i v e d r à i n 4 . 2 . 4 . 6 .
@ a n n o t a t i o n ( o r g . s p r i n g f r a m e w o r k . t r a n s a c t i o n . a n n o t a t i o n . T r a n s a c t i o n a l )
o g n i j o i n p o i n t ( n e l c a s o d i S p r i n g A O P s o l o e s e c u z i o n e d i m e t o d i ) c h e p r e n d e u n s i n g o l o
p a r a m e t r o e d o v e i l t i p o d i a r g o m e n t o p a s s a t o a r u n t i m e h a l ' a n n o t a z i o n e @ C l a s s i e d .
@ a r g s è u s a t o a n c h e n e l l a f o r m a c o n g i u n t a c h e s i v e d r à i n 4 . 2 . 4 . 6 .
@ a r g s ( c o m . x y z . s e c u r i t y . C l a s s i f i e d )
o g n i j o i n p o i n t ( n e l c a s o d i S p r i n g A O P s o l o e s e c u z i o n e d i m e t o d i ) s u l b e a n d i S p r i n g
c h i a m a t o ' t r a d e S e r v i c e '
b e a n ( t r a d e S e r v i c e )
o g n i j o i n p o i n t ( n e l c a s o d i S p r i n g A O P s o l o e s e c u z i o n e d i m e t o d i ) s u i b e a n d i S p r i n g
c h e h a n n o i l n o m e c h e m a t c h a c o n l ' e s p r e s s i o n e ' * S e r v i c e '
b e a n ( * S e r v i c e )
4 . 2 . 4 D i c h i a r a r e u n a d v i c e
U n a d v i c e v i e n e a s s o c i a t o c o n l ' e s p r e s s i o n e d i u n p o i n t c u t , e p a r t e p r i m a , d o p o o d u r a n t e
l ' e s e c u z i o n e d e l m e t o d o m a t c h a t o d a l p o i n t c u t .
4 . 2 . 4 . 1 B e f o r e
U n a d v i c e v i e n e d i c h i a r a t o c o m e b e f o r e i n u n a s p e t t o t r a m i t e l ' a n n o t a z i o n e @ B e f o r e :
i m p o r t o r g . a s p e c t j . l a n g . a n n o t a t i o n . A s p e c t ;
i m p o r t o r g . a s p e c t j . l a n g . a n n o t a t i o n . B e f o r e ;
@ A s p e c t
p u b l i c c l a s s B e f o r e E x a m p l e {
@ B e f o r e ( " c o m . x y z . m y a p p . S y s t e m A r c h i t e c t u r e . d a t a A c c e s s O p e r a t i o n ( ) " )
p u b l i c v o i d d o A c c e s s C h e c k ( ) {
/ / . . .
}
}
I n q u e s t o e s e m p i o a b b i a m o p a s s a t o a l l ' a n n o t a z i o n e i l n o m e d e l p o i n t c u t a c u i f a r e r i f e r i -
m e n t o . P o s s i a m o p e r ò p a s s a r g l i d i r e t t a m e n t e l ' e s p r e s s i o n e d e l p o i n t c u t :
i m p o r t o r g . a s p e c t j . l a n g . a n n o t a t i o n . A s p e c t ;
i m p o r t o r g . a s p e c t j . l a n g . a n n o t a t i o n . B e f o r e ;
@ A s p e c t
p u b l i c c l a s s B e f o r e E x a m p l e {
@ B e f o r e ( " e x e c u t i o n ( * c o m . x y z . m y a p p . d a o . * . * ( . . ) ) " )
p u b l i c v o i d d o A c c e s s C h e c k ( ) {
/ / . . .
}
}
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 50/86
C A P I T O L O 4 . S P R I N G A O P 4 3
4 . 2 . 4 . 2 A f t e r r e t u r n i n g
U n a d v i c e d i q u e s t o t i p o p a r t e q u a n d o i l m e t o d o i n t e r c e t t a t o r e t u r n u n v a l o r e ( t e r m i n a s e n z a
e r r o r i ) . V i e n e d i c h i a r a t o u t i l i z z a n d o l ' a n n o t a z i o n e @ A f t e r R e t u r n i n g :
i m p o r t o r g . a s p e c t j . l a n g . a n n o t a t i o n . A s p e c t ;
i m p o r t o r g . a s p e c t j . l a n g . a n n o t a t i o n . A f t e r R e t u r n i n g ;
@ A s p e c t
p u b l i c c l a s s A f t e r R e t u r n i n g E x a m p l e {
@ A f t e r R e t u r n i n g ( " c o m . x y z . m y a p p . S y s t e m A r c h i t e c t u r e . d a t a A c c e s s O p e r a t i o n ( ) " )
p u b l i c v o i d d o A c c e s s C h e c k ( ) {
/ / . . .
}
}
O v v i a m e n t e è p o s s i b i l e a v e r e p i ù a d v i c e d i c h i a r a t i a l l ' i n t e r n o d e l l o s t e s s o a s p e t t o . I n q u e s t i
e s e m p i n e v i e n e m o s t r a t o s o l o u n o p e r v o l t a p e r f o c a l i z z a r s i s u q u e l l o d i c u i s i s t a d i s c u t e n d o .
Q u a l c h e v o l t a p u ò e s s e r e n e c e s s a r i o , n e l c o r p o d e l l ' a d v i c e , a c c e d e r e a l v a l o r e a t t u a l e r i t o r -
n a t o d a l m e t o d o i n t e r c e t t a t o . E ' p o s s i b i l e u t i l i z z a r e u n a f o r m a c h e c o n s e n t a d i u t i l i z z a r e t a l e
v a l o r e :
i m p o r t o r g . a s p e c t j . l a n g . a n n o t a t i o n . A s p e c t ;
i m p o r t o r g . a s p e c t j . l a n g . a n n o t a t i o n . A f t e r R e t u r n i n g ;
@ A s p e c t
p u b l i c c l a s s A f t e r R e t u r n i n g E x a m p l e {
@ A f t e r R e t u r n i n g (
p o i n t c u t = " c o m . x y z . m y a p p . S y s t e m A r c h i t e c t u r e . d a t a A c c e s s O p e r a t i o n ( ) " ,
r e t u r n i n g = " r e t V a l " )
p u b l i c v o i d d o A c c e s s C h e c k ( O b j e c t r e t V a l ) {
/ / . . .
}
}
I l n o m e u s a t o n e l l ' a t t r i b u t o d i r i t o r n o d e v e c o r r i s p o n d e r e a l n o m e d e l p a r a m e t r o n e l m e t o -
d o d e l l ' a d v i c e . Q u a n d o i l m e t o d o i n e s e c u z i o n e r i t o r n a u n v a l o r e , t a l e v a l o r e s a r à p a s s a t o a l
m e t o d o d e l l ' a d v i c e a t t r a v e r s o i l c o r r i s p o n d e n t e a r g o m e n t o . L a c l a u s o l a r e t u r n i n g r e s t r i n g e i l
m a t c h i n g s o l o a q u e i m e t o d i c h e r i t o r n a n o u n v a l o r e d i u n t i p o s p e c i c a t o ( i n q u e s t o c a s o
O b j e c t ) .
4 . 2 . 4 . 3 A f t e r t h r o w i n g
Q u e s t o t i p o d i a d v i c e p a r t e q u a n d o m a t c h a c o n u n m e t o d o c h e t e r m i n a s o l l e v a n d o u n ' e c -
c e z i o n e . E ' d i c h i a r a t o u t i l i z z a n d o l ' a n n o t a z i o n e @ A f t e r T h r o w i n g :
i m p o r t o r g . a s p e c t j . l a n g . a n n o t a t i o n . A s p e c t ;
i m p o r t o r g . a s p e c t j . l a n g . a n n o t a t i o n . A f t e r T h r o w i n g ;
@ A s p e c t
p u b l i c c l a s s A f t e r T h r o w i n g E x a m p l e {
@ A f t e r T h r o w i n g ( " c o m . x y z . m y a p p . S y s t e m A r c h i t e c t u r e . d a t a A c c e s s O p e r a t i o n ( ) " )
p u b l i c v o i d d o R e c o v e r y A c t i o n s ( ) {
/ / . . .
}
}
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 51/86
C A P I T O L O 4 . S P R I N G A O P 4 4
S p e s s o s i v u o l e c h e l ' a d v i c e v e n g a e s e g u i t o s o l o s e è s t a t a s o l l e v a t a u n ' e c c e z i o n e d i u n c e r t o
t i p o , e i n o l t r e s i v u o l e a c c e d e r e a l l ' e c c e z i o n e a l l ' i n t e r n o d e l l ' a d v i c e :
i m p o r t o r g . a s p e c t j . l a n g . a n n o t a t i o n . A s p e c t ;
i m p o r t o r g . a s p e c t j . l a n g . a n n o t a t i o n . A f t e r T h r o w i n g ;
@ A s p e c t
p u b l i c c l a s s A f t e r T h r o w i n g E x a m p l e {
@ A f t e r T h r o w i n g (
p o i n t c u t = " c o m . x y z . m y a p p . S y s t e m A r c h i t e c t u r e . d a t a A c c e s s O p e r a t i o n ( ) " ,
t h r o w i n g = " e x " )
p u b l i c v o i d d o R e c o v e r y A c t i o n s ( D a t a A c c e s s E x c e p t i o n e x ) {
/ / . . .
}
}
I l n o m e u s a t o n e l l ' a t t r i b u t o d i r i t o r n o d e v e c o r r i s p o n d e r e a l n o m e d e l p a r a m e t r o n e l m e t o -
d o d e l l ' a d v i c e . Q u a n d o i l m e t o d o i n e s e c u z i o n e r i t o r n a u n ' e c c e z i o n e , e s s a s a r à p a s s a t a a l
m e t o d o d e l l ' a d v i c e a t t r a v e r s o i l c o r r i s p o n d e n t e a r g o m e n t o . L a c l a u s o l a t h r o w i n g r e s t r i n g e i l
m a t c h i n g s o l o a q u e i m e t o d i c h e r i t o r n a n o u n ' e c c e z i o n e d i u n t i p o s p e c i c a t o ( i n q u e s t o c a s o
D a t a A c c e s s E x c e p t i o n ) .
4 . 2 . 4 . 4 A f t e r ( n a l l y )
Q u e s t o a d v i c e p a r t e q u a n d o u n m e t o d o t e r m i n a , i n q u a l u n q u e m o d o . V i e n e d i c h i a r a t o c o n
l ' a n n o t a z i o n e @ A f t e r . T a l e a d v i c e d e v ' e s s e r e p r e p a r a t o a g e s t i r e s i a l a s i t u a z i o n e d i r i t o r n o
n o r m a l e , s i a l e e v e n t u a l i c o n d i z i o n i d i e c c e z i o n e . T i p i c a m e n t e v i e n e u t i l i z z a t o p e r i l r i l a s c i o
d e l l e r i s o r s e , e c c .
i m p o r t o r g . a s p e c t j . l a n g . a n n o t a t i o n . A s p e c t ;
i m p o r t o r g . a s p e c t j . l a n g . a n n o t a t i o n . A f t e r ;
@ A s p e c t
p u b l i c c l a s s A f t e r F i n a l l y E x a m p l e {
@ A f t e r ( " c o m . x y z . m y a p p . S y s t e m A r c h i t e c t u r e . d a t a A c c e s s O p e r a t i o n ( ) " )
p u b l i c v o i d d o R e l e a s e L o c k ( ) {
/ / . . .
}
}
4 . 2 . 4 . 5 A r o u n d
L ' u l t i m o t i p o d i a d v i c e è l ' a r o u n d . Q u e s t o a d v i c e p a r t e i n t o r n o a l m e t o d o i n t e r c e t t a t o . H a
l ' o p p o r t u n i t à , i n f a t t i , d i l a v o r a r e s i a p r i m a s i a d o p o l ' e s e c u z i o n e d e l m e t o d o , e d i d e t e r m i n a r e
q u a n d o , c o m e e s e i l m e t o d o a t t u a l m e n t e i n e s e c u z i o n e e e t t u a c o m p l e t a m e n t e i l s u o l a v o r o .
T a l e a d v i c e è s p e s s o u s a t o p e r c o n d i v i d e r e l o s t a t o p r i m a e d o p o l ' e s e c u z i o n e d e l m e t o d o i n
m a n i e r a t h r e a d - s a f e ( f a c e n d o p a r t i r e e s t o p p a n d o u n t i m e r , p e r e s e m p i o ) .
Q u e s t o a d v i c e v i e n e d i c h i a r a t o u s a n d o l ' a n n o t a z i o n e @ A r o u n d . I l p r i m o p a r a m e t r o d e l -
l ' a d v i c e d e v e e s s e r e d i t i p o P r o c e e d i n g J o i n P o i n t . A l l ' i n t e r n o d e l c o r p o d e l l ' a d v i c e , c h i a m a n d o
p r o c e e d ( ) s u l P r o c e e d i n g J o i n P o i n t v i e n e e v i d e n z i a t o i l m e t o d o c h e è i n e s e c u z i o n e . T u t t o c i ò
c h e v e r r à s c r i t t o p r i m a , v e r r à e s e g u i t o p r i m a d e l m e t o d o i n t e r c e t t a t o e t u t t o c i ò c h e v e r r à
s c r i t t o d o p o v e r r à e s e g u i t o d o p o i l m e t o d o i n t e r c e t t a t o . Q u e s t a f u n z i o n e p u ò e s s e r e c h i a m a -
t a a n c h e p a s s a n d o u n O b j e c t [ ] . I v a l o r i n e l l ' a r r a y s a r a n n o u s a t i c o m e a r g o m e n t i a l m e t o d o
q u a n d o a n d r à i n e s e c u z i o n e .
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 52/86
C A P I T O L O 4 . S P R I N G A O P 4 5
i m p o r t o r g . a s p e c t j . l a n g . a n n o t a t i o n . A s p e c t ;
i m p o r t o r g . a s p e c t j . l a n g . a n n o t a t i o n . A r o u n d ;
i m p o r t o r g . a s p e c t j . l a n g . P r o c e e d i n g J o i n P o i n t ;
@ A s p e c t
p u b l i c c l a s s A r o u n d E x a m p l e {
@ A r o u n d ( " c o m . x y z . m y a p p . S y s t e m A r c h i t e c t u r e . b u s i n e s s S e r v i c e ( ) " )
p u b l i c O b j e c t d o B a s i c P r o f i l i n g ( P r o c e e d i n g J o i n P o i n t p j p ) t h r o w s T h r o w a b l e {
/ / s t a r t s t o p w a t c h
S y s t e m . o u t . p r i n t l n ( " P r i m a d e l m e t o d o " ) ;
O b j e c t r e t V a l = p j p . p r o c e e d ( ) ;
/ / s t o p s t o p w a t c h
S y s t e m . o u t . p r i n t l n ( " D o p o i l m e t o d o " ) ;
r e t u r n r e t V a l ;
}
}
I l v a l o r e r i t o r n a t o d a l l ' a r o u n d a d v i c e s a r à i l v a l o r e d i r i t o r n o v i s t o d a l l ' i n v o c a t o r e d e l
m e t o d o . U n s e m p l i c e a s p e t t o c h e f a c a c h i n g , p e r e s e m p i o , p o t r e b b e r i t o r n a r e u n v a l o r e d a
u n a c a c h e s e n e h a u n a , e i n v o c a r e p r o c e e d ( ) s e n o n c e l ' h a . D a n o t a r e c h e p r o c e e d p u ò e s s e r e
i n v o c a t o u n a v o l t a , m o l t e v o l t e o n e s s u n a v o l t a a l l ' i n t e r n o d e l c o r p o d e l l ' a r o u n d d e v i c e . T u t t e
q u e s t e o p z i o n i s o n o a s s o l u t a m e n t e l e g a l i .
4 . 2 . 4 . 6 G e s t i o n e d e i p a r a m e t r i
A c c e s s o a l J o i n P o i n t c o r r e n t e O g n i a d v i c e p u ò d i c h i a r a r e c o m e s u o p r i m o p a r a m e t r o u n
p a r a m e t r o d i t i p o o r g . a s p e c t j . l a n g . J o i n P o i n t ( n o t a r e c h e l ' a r o u n d a d v i c e r i c h i e d e l a d i c h i a r a z i o n e
d i u n p r i m o p a r a m e t r o d i t i p o P r o c e e d i n g J o i n P o i n t c h e è u n a s o t t o c l a s s e d i J o i n P o i n t ) .
L ' i n t e r f a c c i a J o i n P o i n t e s p o n e u n c e r t o n u m e r o d i m e t o d i u t i l i c o m e g e t A r g s ( ) ( r i t o r n a g l i
a r g o m e n t i d e l m e t o d o ) , g e t T h i s ( ) ( r i t o r n a l ' o g g e t t o p r o x y ) , g e t T a r g e t ( ) ( r i t o r n a l ' o g g e t t o t a r -
g e t ) , g e t S i g n a t u r e ( ) ( r i t o r n a u n a d e s c r i z i o n e d e l m e t o d o c h e è s t a t o i n t e r c e t t a t o ) e t o S t r i n g ( )
( s t a m p a u n a d e s c r i z i o n e d e l m e t o d o i n t e r c e t t a t o ) . C o n s u l t a r e i l J a v a d o c s p e r m a g g i o r i
d e t t a g l i .
P a s s a r e p a r a m e t r i a l l ' a d v i c e A b b i a m o v i s t o c o m e r e c u p e r a r e u n v a l o r e d i r i t o r n o o u n ' e c -
c e z i o n e . P e r r e n d e r e i v a l o r e d e g l i a r g o m e n t i d i s p o n i b i l i a l l ' a d v i c e , è p o s s i b i l e u s a r e l a f o r m a
c o n g i u n t a d i a r g s . S e i l n o m e d i u n p a r a m e t r o è u s a t o a l p o s t o d e l n o m e s c r i t t o n e l l ' e s p r e s -
s i o n e d e l d e s c r i t t o r e a r g s , a l l o r a i l v a l o r e d e l l ' a r g o m e n t o c o r r i s p o n d e n t e s a r à p a s s a t o c o m e
v a l o r e q u a n d o l ' a d v i c e v i e n e i n v o c a t o . U n e s e m p i o r e n d e r à p i ù c h i a r o . S u p p o n i a m o d i v o l e r
i n t e r c e t t a r e l ' e s e c u z i o n e d i u n m e t o d o d e l d a o c h e p r e n d e u n o g g e t t o A c c o u n t c o m e p r i -
m o p a r a m e t r o e d i v o l e r a c c e d e r e a q u e s t ' o g g e t t o a l l ' i n t e r n o d e l l ' a d v i c e . P o s s i a m o s c r i v e r e
q u a l c o s a d e l g e n e r e :
@ B e f o r e ( " c o m . x y z . m y a p p . S y s t e m A r c h i t e c t u r e . d a t a A c c e s s O p e r a t i o n ( ) & & " +
" a r g s ( a c c o u n t , . . ) " )
p u b l i c v o i d v a l i d a t e A c c o u n t ( A c c o u n t a c c o u n t ) {
/ / . . .
}
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 53/86
C A P I T O L O 4 . S P R I N G A O P 4 6
L a p a r t e a r g s ( a c c o u n t , . . ) d e l l ' e s p r e s s i o n e d e l p o i n t c u t s o d d i s f a d u e s c o p i : r e s t r i n g e i l
m a t c h i n g s o l o a q u e i m e t o d i c h e p r e n d o n o a l m e n o u n p a r a m e t r o e c h e t a l e p a r a m e t r o è
u n ' i s t a n z a d i A c c o u n t ; r e n d e l ' o g g e t t o A c c o u n t a t t u a l e d i s p o n i b i l e a l l ' a d v i c e a t t r a v e r s o i l
p a r a m e t r o a c c o u n t .
L ' o g g e t t o p r o x y ( t h i s ) , l ' o g g e t t o t a r g e t ( t a r g e t ) e l e a n n o t a z i o n i ( @ w i t h i n , @ t a r g e t ,
@ a n n o t a t i o n , @ a r g s ) p o s s o n o t u t t e e s s e r e u s a t e n e l l o s t e s s o m o d o .
4 . 2 . 4 . 7 P r i o r i t à
C o s a s u c c e d e q u a n d o p i ù a d v i c e d e v o n o p a r t i r e i n c o r r i s p o n d e n z a d e l l o s t e s s o j o i n p o i n t ?
S p r i n g A O P s e g u e l e s t e s s e r e g o l e d i p r e c e d e n z a d i A s p e c t J p e r d e t e r m i n a r e l e p r i o r i t à d i
e s e c u z i o n e . L ' a d v i c e c o n p r e c e d e n z a p i ù a l t a p a r t e p e r p r i m o o n t h e w a y i n ( q u i n d i d a t i t u e
a d v i c e b e f o r e , q u e l l o c o n p r e c e d e n z a m a g g i o r e p a r t e p e r p r i m o ) . A l l ' u s c i t a d i u n j o i n p o i n t
( o n t h e w a y o u t ) , l ' a d v i c e c o n p r e c e d e n z a p i ù a l t a p a r t e p e r u l t i m o .
Q u a n d o d u e a d v i c e d e n i t i i n a s p e t t i d i e r e n t i h a n n o b i s o g n o e n t r a m b i d i p a r t i r e s u l l o
s t e s s o j o i n p o i n t , a m e n o c h e n o n s i a s t a t o s p e c i c a t o d i v e r s a m e n t e , l ' o r d i n e d i e s e c u z i o n e n o n
è d e n i t o . E ' p o s s i b i l e c o n t r o l l a r l o s p e c i c a n d o l e p r i o r i t à . Q u e s t o p u ò e s s e r e f a t t o n e l m o d o
n o r m a l e d i S p r i n g i m p l e m e n t a n d o l ' i n t e r f a c c i a o r g . s p r i n g f r a m e w o r k . c o r e . O r d e r e d n e l l ' a s p e t t o
o a n n o t a n d o l o c o n l ' a n n o t a z i o n e @ O r d e r . D a t i d u e a s p e t t i , l ' a s p e t t o c h e r e s t i t u i s c e i l v a l o r e
p i ù b a s s o c o n O r d e r e d . g e t V a l u e ( ) ( o i l v a l o r e d e l l ' a n n o t a z i o n e ) h a l a p r e c e d e n z a p i ù a l t a .
Q u a n d o d u e a d v i c e d e n i t i n e l l o s t e s s o a s p e t t o h a n n o b i s o g n o e n t r a m b i d i p a r i r e s u l l o
s t e s s o j o i n p o i n t , l ' o r d i n e d i e s e c u z i o n e n o n è d e n i t o e n o n è p o s s i b i l e r e c u p e r a r e l ' o r d i n e d i
d i c h i a r a z i o n e a t t r a v e r s o l e r e e c t i o n s . I n q u e s t o c a s o c o n s i d e r a r e u n a r i o r g a n i z z a z i o n e d e g l i
a s p e t t i e d e g l i a d v i c e .
4 . 2 . 5 I n t r o d u c t i o n
L e i n t r o d u z i o n i ( n o t e i n A s p e c t J c o m e d i c h i a r a z i o n i i n t e r - t y p e ) c o n s e n t o n o a d u n a s p e t -
t o d i d i c h i a r a r e c h e l ' o g g e t t o a d v i s e d i m p l e m e n t i u n a d a t a i n t e r f a c c i a e p r o v v e d a a l l a s u a
i m p l e m e n t a z i o n e .
U n ' i n t r o d u z i o n e v i e n e d e n i t a t r a m i t e l ' a n n o t a z i o n e @ D e c l a r e P a r e n t s . Q u e s t ' a n n o -
t a z i o n e è u t i l i z z a t a p e r d i c h i a r a r e c h e i l t i p o c h e m a t c h a h a u n n u o v o g e n i t o r e . P e r e s e m -
p i o , d a t a u n ' i n t e r f a c c i a U s a g e T r a c k e d , e u n a s u a i m p l e m e n t a z i o n e , D e f a u l t U s a g e T r a c k e d , i l
s e g u e n t e a s p e t t o d i c h i a r a c h e t u t t e l e c l a s s i c h e i m p l e m e n t a n o l e i n t e r f a c c e l e g a t e a l p a c k a g e
s e r v i c e , i m p l e m e n t e r a n n o a n c h e l ' i n t e r f a c c i a U s a g e T r a c k e d .
@ A s p e c t
p u b l i c c l a s s U s a g e T r a c k i n g {
@ D e c l a r e P a r e n t s ( v a l u e = " c o m . x z y . m y a p p . s e r v i c e . * + " ,
d e f a u l t I m p l = D e f a u l t U s a g e T r a c k e d . c l a s s )
p u b l i c s t a t i c U s a g e T r a c k e d m i x i n ;
@ B e f o r e ( " c o m . x y z . m y a p p . S y s t e m A r c h i t e c t u r e . b u s i n e s s S e r v i c e ( ) & & " +
" t h i s ( u s a g e T r a c k e d ) " )
p u b l i c v o i d r e c o r d U s a g e ( U s a g e T r a c k e d u s a g e T r a c k e d ) {
u s a g e T r a c k e d . i n c r e m e n t U s e C o u n t ( ) ;
}
}
L ' i n t e r f a c c i a c h e d e v e e s s e r e i m p l e m e n t a t a è d e t e r m i n a t a d a l t i p o d e l c a m p o a n n o t a t o
( m i x i n , d i t i p o U s a g e T r a c k e d . L ' a t t r i b u t o v a l u e d i @ D e c l a r e P a r e n t s è u n p a t t e r n A s p e c t J :
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 54/86
C A P I T O L O 4 . S P R I N G A O P 4 7
o g n i b e a n c h e m a t c h a i m p l e m e n t e r à l ' i n t e r f a c c i a U s a g e T r a c k e d . V i e n e a n c h e f o r n i t a l ' i m p l e -
m e n t a z i o n e d i d e f a u l t . D a n o t a r e c h e n e l l ' a d v i c e b e f o r e n e l l ' e s e m p i o , i b e a n s e r v i c e p o s s o n o
e s s e r e d i r e t t a m e n t e u s a t i c o m e i m p l e m e n t a z i o n i d i U s a g e T r a c k e d . S e s i a c c e d e a l b e a n , s i p u ò
s c r i v e r e :
U s a g e T r a c k e d u s a g e T r a c k e d = ( U s a g e T r a c k e d ) c o n t e x t . g e t B e a n ( " m y S e r v i c e " ) ;
4 . 2 . 6 M o d e l l o d i i n s t a n z i a z i o n e d i u n a s p e t t o
D i d e f a u l t c ' è u n a s i n g o l a i s t a n z a d i o g n i a s p e t t o n e l c o n t e s t o d e l l ' a p p l i c a z i o n e . I n A s p e c t J
q u e s t a c a r a t t e r i s t i c a v i e n e c h i a m a t a m o d e l l o s i n g l e t o n d i i n s t a n z i a z i o n e . E ' p o s s i b i l e , p e r ò ,
d e n i r e a s p e t t i c o n c i c l i d i v i t a d i v e r s i . S p r i n g s u p p o r t a i m o d e l l i p e r t h i s e p e r t a r g e t d i
A s p e c t J ( p e r c o w , p e r c o w b e l o w e p e r t y p e w i t h i n a t t u a l m e n t e n o n s o n o s u p p o r t a t i ) .
U n a s p e t t o p e r t h i s v i e n e d i c h i a r a t o s p e c i c a t o l a c l a u s o l a p e r t h i s n e l l ' a n n o t a z i o n e @ A s -
p e c t . V e d i a m o u n e s e m p i o :
@ A s p e c t ( " p e r t h i s ( c o m . x y z . m y a p p . S y s t e m A r c h i t e c t u r e . b u s i n e s s S e r v i c e ( ) ) " )
p u b l i c c l a s s M y A s p e c t {
p r i v a t e i n t s o m e S t a t e ;
@ B e f o r e ( c o m . x y z . m y a p p . S y s t e m A r c h i t e c t u r e . b u s i n e s s S e r v i c e ( ) )
p u b l i c v o i d r e c o r d S e r v i c e U s a g e ( ) {
/ / . . .
}
}
L ' e e t t o d e l l a c l a u s o l a p e r t h i s è c h e v e r r à c r e a t a u n ' i n s t a n z a d e l l ' a s p e t t o p e r o g n i o g g e t -
t o c h e e s e g u e u n s e r v i z i o d i b u s i n e s s . L ' i s t a n z a v i e n e c r e a t a l a p r i m a v o l t a c h e u n m e t o d o
d e l l ' o g g e t t o s e r v i c e v i e n e i n v o c a t o . L ' a s p e t t o v i e n e p o i d i s t r u t t o q u a n d o l ' o g g e t t o v i e n e d i s -
t r u t t o . P r i m a c h e l ' i s t a n z a d e l l ' a s p e t t o s i a c r e a t a , n e s s u n o d e g l i a d v i c e a l s u o i n t e r n o v i e n e
e s e g u i t o . U n a v o l t a c r e a t a l ' i s t a n z a d e l l ' a s p e t t o , g l i a d v i c e d i c h i a r a t i a l l ' i n t e r n o s a r a n n o e s e -
g u i t i a d o g n i m a t c h i n g c o n i j o i n p o i n t s d ' i n t e r e s s e , m a s o l o q u a n d o l ' o g g e t t o s e r v i c e è q u e l l o
a c u i l ' i s t a n z a d e l l ' a s p e t t o è s t a t a a s s o c i a t a .
L a c l a u s o l a p e r t a r g e t f u n z i o n a n e l l o s t e s s o m o d o , m a c r e a u n ' i s t a n z a d e l l ' a s p e t t o p e r o g n i
o g g e t t o t a r g e t n e l j o i n p o i n t c h e m a t c h a .
4 . 2 . 7 E s e m p i o
V e d i a m o i n q u e s t o p a r a g r a f o u n s e m p l i c e e s e m p i o d e l f u n z i o n a m e n t o d i q u a n t o v i s t o n o r a .
I m m a g i n i a m o d i a v e r e l ' i n t e r f a c c i a I D a o e l a s u a i m p l e m e n t a z i o n e D a o , v i s t e p r e c e d e n t e -
m e n t e .
/ / i n t e r f a c c i a
p u b l i c i n t e r f a c e I D a o {
p u b l i c v o i d s a l v a ( ) ;
p u b l i c v o i d r e c u p e r a ( ) ;
}
/ / c l a s s e d a o
p u b l i c c l a s s D a o i m p l e m e n t s I D a o {
p u b l i c v o i d s a l v a ( ) {
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 55/86
C A P I T O L O 4 . S P R I N G A O P 4 8
S y s t e m . o u t . p r i n t l n ( " S a l v o u n d a t o s u l d b " ) ;
}
p u b l i c v o i d r e c u p e r a ( ) {
S y s t e m . o u t . p r i n t l n ( " H o r e c u p e r a t o u n d a t o d a l d b " ) ;
}
}
S u p p o n i a m o d i v o l e r l o g g a r e t u t t e l e o p e r a z i o n i e e t t u a t e d a l D a o , p r i m a e d o p o l a l o r o
e s e c u z i o n e . P o s s i a m o d e n i r e q u i n d i i l s e g u e n t e a s p e t t o :
@ A s p e c t
p u b l i c c l a s s L o g g e r W i t h A n n o t a t i o n {
@ P o i n t c u t ( " e x e c u t i o n ( * e s e m p i o s p r i n g . D a o . * ( . . ) ) " )
p u b l i c v o i d i n D a o ( ) { }
@ B e f o r e ( " i n D a o ( ) " )
p u b l i c v o i d b e f o r e D a o O p e r a t i o n A d v i s e ( J o i n P o i n t j p ) {
S y s t e m . o u t . p r i n t l n ( j p . g e t T a r g e t ( ) . g e t C l a s s ( ) . g e t N a m e ( ) +
" : S t o p e r e s e g u i r e i l m e t o d o " +
j p . g e t S i g n a t u r e ( ) . g e t N a m e ( ) ) ;
}
@ A f t e r ( " i n D a o ( ) " )
p u b l i c v o i d a f t e r D a o O p e r a t i o n A d v i s e ( J o i n P o i n t j p ) {
S y s t e m . o u t . p r i n t l n ( j p . g e t T a r g e t ( ) . g e t C l a s s ( ) . g e t N a m e ( ) +
" : H o e s e g u i t o i l m e t o d o " +
j p . g e t S i g n a t u r e ( ) . g e t N a m e ( ) ) ;
}
}
Q u e l l o c h e s e g u e è i l l e d i c o n g u r a z i o n e d i S p r i n g :
< ? x m l v e r s i o n = " 1 . 0 " e n c o d i n g = " U T F - 8 " ? >
< b e a n s x m l n s = " h t t p : / / w w w . s p r i n g f r a m e w o r k . o r g / s c h e m a / b e a n s "
x m l n s : x s i = " h t t p : / / w w w . w 3 . o r g / 2 0 0 1 / X M L S c h e m a - i n s t a n c e "
x m l n s : a o p = " h t t p : / / w w w . s p r i n g f r a m e w o r k . o r g / s c h e m a / a o p "
x m l n s : c o n t e x t = " h t t p : / / w w w . s p r i n g f r a m e w o r k . o r g / s c h e m a / c o n t e x t "
x s i : s c h e m a L o c a t i o n =
" h t t p : / / w w w . s p r i n g f r a m e w o r k . o r g / s c h e m a / b e a n s
h t t p : / / w w w . s p r i n g f r a m e w o r k . o r g / s c h e m a / b e a n s / s p r i n g - b e a n s - 3 . 0 . x s d
h t t p : / / w w w . s p r i n g f r a m e w o r k . o r g / s c h e m a / c o n t e x t
h t t p : / / w w w . s p r i n g f r a m e w o r k . o r g / s c h e m a / c o n t e x t / s p r i n g - c o n t e x t - 3 . 0 . x s d
h t t p : / / w w w . s p r i n g f r a m e w o r k . o r g / s c h e m a / a o p
h t t p : / / w w w . s p r i n g f r a m e w o r k . o r g / s c h e m a / a o p / s p r i n g - a o p - 2 . 5 . x s d " >
< ! - - = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = - - >
< ! - - = = = A t t i v a z i o n e A O P = = = - - >
< ! - - = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = - - >
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 56/86
C A P I T O L O 4 . S P R I N G A O P 4 9
< a o p : a s p e c t j - a u t o p r o x y / >
< ! - - = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = - - >
< ! - - = = = D e f i n i z i o n e a s p e t t i = = = - - >
< ! - - = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = - - >
< b e a n i d = " d a o A s p e c t " c l a s s = " e s e m p i o s p r i n g . L o g g e r W i t h A n n o t a t i o n " / >
< ! - - = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = - - >
< ! - - = = = D e f i n i z i o n e d e i b e a n s = = = - - >
< ! - - = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = - - >
< b e a n i d = " d a o " c l a s s = " e s e m p i o s p r i n g . D a o " / >
< / b e a n s >
I l m e t o d o m a i n p e r f a r e u n t e s t è i l s e g u e n t e :
p u b l i c s t a t i c v o i d m a i n ( S t r i n g [ ] a r g s ) {
A p p l i c a t i o n C o n t e x t c o n t e x t =
n e w C l a s s P a t h X m l A p p l i c a t i o n C o n t e x t ( n e w S t r i n g [ ] { " / c o n f i g S p r i n g . x m l " } ) ;
/ / T e s t c o n u n b e a n g e s t i t o d a l c o n t e n i t o r e
I D a o d a o = c o n t e x t . g e t B e a n ( " d a o " , I D a o . c l a s s ) ;
d a o . s a l v a ( ) ;
d a o . r e c u p e r a ( ) ;
/ / T e s t c o n u n b e a n n o n g e s t i t o d a l c o n t e n i t o r e
I D a o a l t r o d a o = n e w D a o ( ) ;
a l t r o d a o . s a l v a ( ) ;
a l t r o d a o . r e c u p e r a ( ) ;
}
E s e g u e n d o l o , l ' o u t p u t s a r à :
e s e m p i o s p r i n g . D a o : S t o p e r e s e g u i r e i l m e t o d o s a l v a
S a l v o u n d a t o s u l d b
e s e m p i o s p r i n g . D a o : H o e s e g u i t o i l m e t o d o s a l v a
e s e m p i o s p r i n g . D a o : S t o p e r e s e g u i r e i l m e t o d o r e c u p e r a
H o r e c u p e r a t o u n d a t o d a l d b
e s e m p i o s p r i n g . D a o : H o e s e g u i t o i l m e t o d o r e c u p e r a
S a l v o u n d a t o s u l d b
H o r e c u p e r a t o u n d a t o d a l d b
C o m e s i p u ò v e d e r e d a l l e u l t i m e d u e r i g h e , i b e a n a l d i f u o r i d e l c o n t a i n e r n o n s u b i s c o n o
i n t e r c e t t a z i o n i .
4 . 3 A O P c o n X M L
S e s i è i m p o s s i b i l i t a t i a l l ' u s o d i J a v a 5 o s e m p l i c e m e n t e s i p r e f e r i s c e l a v o r a r e c o n l ' X M L ,
S p r i n g s u p p o r t a l ' u s o d e l l ' A O P a n c h e t r a m i t e i l l e d i c o n g u r a z i o n e . S o n o s u p p o r t a t e l e
s t e s s e e s p r e s s i o n i p e r i p o i n t c u t s e l e s t e s s e t i p o l o g i e d i a d v i c e v i s t e n e l p a r a g r a f o 4 . 2 .
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 57/86
C A P I T O L O 4 . S P R I N G A O P 5 0
4 . 3 . 1 D i c h i a r a r e u n a s p e t t o
U t i l i z z a n d o l ' X M L , u n a s p e t t o v i e n e d i c h i a r a t o u s a n d o i l t a g < a o p : a s p e c t > , e i l b e a n c h e
l o d e n i s c e è r e f e r e n z i a t o u s a n d o l ' a t t r i b u t o r e f . R i p r e n d e n d o l ' e s e m p i o v i s t o n e l p a r a g r a f o
4 . 2 . 7 , l ' a s p e t t o è i m p l e m e n t a t o d a l s e g u e n t e b e a n :
p u b l i c c l a s s L o g g e r W i t h X M L {
p u b l i c v o i d b e f o r e D a o O p e r a t i o n A d v i s e ( J o i n P o i n t j p ) {
S y s t e m . o u t . p r i n t l n ( j p . g e t T a r g e t ( ) . g e t C l a s s ( ) . g e t N a m e ( ) +
" : S t o p e r e s e g u i r e i l m e t o d o " +
j p . g e t S i g n a t u r e ( ) . g e t N a m e ( ) ) ;
}
p u b l i c v o i d a f t e r D a o O p e r a t i o n A d v i s e ( J o i n P o i n t j p ) {
S y s t e m . o u t . p r i n t l n ( j p . g e t T a r g e t ( ) . g e t C l a s s ( ) . g e t N a m e ( ) +
" : H o e s e g u i t o i l m e t o d o " +
j p . g e t S i g n a t u r e ( ) . g e t N a m e ( ) ) ;
}
}
L a s u a c o n g u r a z i o n e , a l l ' i n t e r n o d e l l e X M L è l a s e g u e n t e :
< a o p : c o n f i g >
< a o p : a s p e c t i d = " m y A s p e c t " r e f = " d a o A s p e c t " >
. . .
< / a o p : a s p e c t >
< / a o p : c o n f i g >
< b e a n i d = " d a o A s p e c t " c l a s s = " e s e m p i o s p r i n g . L o g g e r W i t h X M L " / >
4 . 3 . 2 D i c h i a r a r e u n p o i n t c u t
U n p o i n t c u t p u ò e s s e r e d i c h i a r a t o a l l ' i n t e r n o d e l l ' e l e m e n t o < a o p : c o n g > , i n m o d o c h e s i a
d i s p o n i b i l e a d i v e r s i a s p e t t i e a d v i s o r s .
U n p o i n t c u t c h e r a p p r e s e n t a l ' e s e c u z i o n e d i u n q u a l u n q u e m e t o d o d i e s e m p i o s p r i n g . D a o
è s c r i t t o c o m e s e g u e :
< a o p : c o n f i g >
< a o p : p o i n t c u t i d = " i n D a o " e x p r e s s i o n = " e x e c u t i o n ( * e s e m p i o s p r i n g . D a o . * ( . . ) ) " / >
< ! - - D e f i n i z i o n e d e g l i a s p e t t i - - >
. . .
< / a o p : c o n f i g >
N o t a r e c h e l a s i n t a s s i p e r l ' e s p r e s s i o n e d e l p o i n t c u t è e s a t t a m e n t e l a s t e s s a p r e s e n t a t a n e i
p a r a g r a p r e c e d e n t i .
U n p o i n t c u t p u ò e s s e r e a n c h e d e n i t o a l l ' i n t e r n o d i u n a s p e t t o . L a s u a d i c h i a r a z i o n e è
m o l t o s i m i l e a l l a p r e c e d e n t e :
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 58/86
C A P I T O L O 4 . S P R I N G A O P 5 1
< a o p : c o n f i g >
< a o p : a s p e c t i d = " m y A s p e c t " r e f = " d a o A s p e c t " >
< a o p : p o i n t c u t i d = " i n D a o " e x p r e s s i o n = " e x e c u t i o n ( * e s e m p i o s p r i n g . D a o . * ( . . ) ) " / >
. . .
< / a o p : a s p e c t >
< / a o p : c o n f i g >
4 . 3 . 3 D i c h i a r a r e u n a d v i c e
I t i p i d i a d v i c e s u p p o r t a t i s o n o g l i s t e s s i v i s t i i n p r e c e d e n z a .
4 . 3 . 3 . 1 B e f o r e
Q u e s t o t i p o d i a d v i c e è d i c h i a r a t o a l l ' i n t e r n o d e l n o d o < a o p : a s p e c t > u t i l i z z a n d o l ' e l e m e n t o
< a o p : b e f o r e > .
< a o p : c o n f i g >
< a o p : p o i n t c u t i d = " d a o S e r v i c e " e x p r e s s i o n = " e x e c u t i o n ( * e s e m p i o s p r i n g . I D a o . * ( . . ) ) " / >
< a o p : a s p e c t i d = " m i o A s p e c t " r e f = " d a o A s p e c t " >
< a o p : b e f o r e p o i n t c u t - r e f = " d a o S e r v i c e " m e t h o d = " b e f o r e D a o O p e r a t i o n A d v i s e " / >
< / a o p : a s p e c t >
< / a o p : c o n f i g >
Q u i d a o S e r v i c e è l ' i d d e l p o i n t c u t d e n i t o a l i v e l l o d i < a o p : c o n g > .
4 . 3 . 3 . 2 A f t e r r e t u r n i n g
Q u e s t o t i p o d i a d v i c e è d e n i t o i n q u e s t o m o d o :
< a o p : a s p e c t i d = " a f t e r R e t u r n i n g E x a m p l e " r e f = " a B e a n " >
< a o p : a f t e r - r e t u r n i n g
p o i n t c u t - r e f = " d a t a A c c e s s O p e r a t i o n "
m e t h o d = " d o A c c e s s C h e c k " / >
. . .
< / a o p : a s p e c t >
E ' p o s s i b i l e n a t u r a l m e n t e c a t t u r a r e i l v a l o r e d i r i t o r n o p e r u s a r l o a l l ' i n t e r n o d e l l ' a d v i c e .
L a s i n t a s s i è l a s e g u e n t e :
< a o p : a s p e c t i d = " a f t e r R e t u r n i n g E x a m p l e " r e f = " a B e a n " >
< a o p : a f t e r - r e t u r n i n g
p o i n t c u t - r e f = " d a t a A c c e s s O p e r a t i o n "
r e t u r n i n g = " r e t V a l "
m e t h o d = " d o A c c e s s C h e c k " / >
. . .
< / a o p : a s p e c t >
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 59/86
C A P I T O L O 4 . S P R I N G A O P 5 2
4 . 3 . 3 . 3 A f t e r t h r o w i n g
Q u e s t o t i p o d i a d v i c e è d e n i t o n e l s e g u e n t e m o d o :
< a o p : a s p e c t i d = " a f t e r T h r o w i n g E x a m p l e " r e f = " a B e a n " >
< a o p : a f t e r - t h r o w i n g
p o i n t c u t - r e f = " d a t a A c c e s s O p e r a t i o n "
m e t h o d = " d o R e c o v e r y A c t i o n s " / >
. . .
< / a o p : a s p e c t >
E ' p o s s i b i l e n a t u r a l m e n t e c a t t u r a r e l ' e c c e z i o n e p e r u s a r l a a l l ' i n t e r n o d e l l ' a d v i c e . L a s i n -
t a s s i è l a s e g u e n t e :
< a o p : a s p e c t i d = " a f t e r T h r o w i n g E x a m p l e " r e f = " a B e a n " >
< a o p : a f t e r - t h r o w i n g
p o i n t c u t - r e f = " d a t a A c c e s s O p e r a t i o n "
t h r o w i n g = " d a t a A c c e s s E x "
m e t h o d = " d o R e c o v e r y A c t i o n s " / >
. . .
< / a o p : a s p e c t >
4 . 3 . 3 . 4 A f t e r ( n a l l y )
Q u e s t o t i p o d i a d v i c e è d e n i t o n e l s e g u e n t e m o d o :
< a o p : a s p e c t i d = " m i o A s p e c t " r e f = " d a o A s p e c t " >
< a o p : a f t e r p o i n t c u t - r e f = " d a o S e r v i c e " m e t h o d = " a f t e r D a o O p e r a t i o n A d v i s e " / >
. . .
< / a o p : a s p e c t >
4 . 3 . 3 . 5 A r o u n d
Q u e s t o t i p o d i a d v i c e è d e n i t o n e l m o d o s e g u e n t e :
< a o p : a s p e c t i d = " a r o u n d E x a m p l e " r e f = " a B e a n " >
< a o p : a r o u n d p o i n t c u t - r e f = " b u s i n e s s S e r v i c e " m e t h o d = " d o B a s i c P r o f i l i n g " / >
. . .
< / a o p : a s p e c t >
4 . 3 . 3 . 6 G e s t i o n e d e i p a r a m e t r i
L a d i c h i a r a z i o n e b a s a t a s u X M L s u p p o r t a l e s t e s s e f u n z i o n a l i t à d i q u e l l a b a s a t a s u @ A s p e c t J .
S e s i v u o l e e s p l i c i t a m e n t e s p e c i c a r e i n o m i d e g l i a r g o m e n t i p e r i m e t o d i a d v i c e s i d e v e
u t i l i z z a r e l ' a t t r i b u t o a r g - n a m e s n e l n o d o d e l l ' a d v i c e , c h e è t r a t t a t o n e l l o s t e s s o m o d o d e l l ' a t -
t r i b u t o a r g N a m e s p e r l e a n n o t a z i o n i . A d e s e m p i o :
< a o p : b e f o r e
p o i n t c u t = " c o m . x y z . l i b . P o i n t c u t s . a n y P u b l i c M e t h o d ( ) a n d @ a n n o t a t i o n ( a u d i t a b l e ) "
m e t h o d = " a u d i t "
a r g - n a m e s = " a u d i t a b l e " / >
L ' a t t r i b u t o a r g - n a m e s a c c e t t a u n a l i s t a d i n o m i d i p a r a m e t r i s e p a r a t i d a v i r g o l e .
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 60/86
C A P I T O L O 4 . S P R I N G A O P 5 3
4 . 3 . 4 I n t r o d u z i o n i
U n ' i n t r o d u z i o n e v i e n e d e n i t a a t t r a v e r s o i l n o d o < a o p : d e c l a r e - p a r e n t s > a l l ' i n t e r n o d e l
n o d o < a o p : a s p e c t > . T a l e e l e m e n t o è u t i l i z z a t o p e r d i c h i a r a r e c h e i l t i p o c h e m a t c h a h a u n
n u o v o g e n i t o r e . P e r e s e m p i o , d a t a u n ' i n t e r f a c c i a U s a g e T r a c k e d e u n a s u a i m p l e m e n t a z i o n e ,
D e f a u l t U s a g e T r a c k e d , i l s e g u e n t e a s p e t t o d i c h i a r a c h e t u t t i g l i i m p l e m e n t a t o r i d e l l e i n t e r f a c c e
r e l a t i v e a i s e r v i z i d o v r a n n o i m p l e m e n t a r e a n c h e l ' i n t e r f a c c i a U s a g e T r a c k e d .
< a o p : a s p e c t i d = " u s a g e T r a c k e r A s p e c t " r e f = " u s a g e T r a c k i n g " >
< a o p : d e c l a r e - p a r e n t s
t y p e s - m a t c h i n g = " c o m . x z y . m y a p p . s e r v i c e . * + "
i m p l e m e n t - i n t e r f a c e = " c o m . x y z . m y a p p . s e r v i c e . t r a c k i n g . U s a g e T r a c k e d "
d e f a u l t - i m p l = " c o m . x y z . m y a p p . s e r v i c e . t r a c k i n g . D e f a u l t U s a g e T r a c k e d " / >
< a o p : b e f o r e
p o i n t c u t = " c o m . x y z . m y a p p . S y s t e m A r c h i t e c t u r e . b u s i n e s s S e r v i c e ( )
a n d t h i s ( u s a g e T r a c k e d ) "
m e t h o d = " r e c o r d U s a g e " / >
< / a o p : a s p e c t >
4 . 3 . 5 M o d e l l o d i i n s t a n z i a z i o n e d i u n a s p e t t o
L ' u n i c o m o d e l l o d i i n s t a n z i a z i o n e n e l l a d e n i z i o n e d e g l i a s p e t t i t r a m i t e X M L è i l m o d e l l o
s i n g l e t o n . A l t r i m o d e l l i p o t r e b b e r o e s s e r e s u p p o r t a t i i n r e l e a s e f u t u r e .
4 . 3 . 6 A d v i s o r s
I l c o n c e t t o d i a d v i s o r s p r o v i e n e d a l s u p p o r t o a l l a A O P d i S p r i n g 1 . 2 e n o n h a u n e q u i v a l e n t e
i n A s p e c t J . U n a d v i s o r è c o m e u n p i c c o l o a s p e t t o a u t o c o n t e n u t o c h e h a u n s i n g o l o a d v i c e .
L ' a d v i c e è r a p p r e s e n t a t o d a u n b e a n e d e v e i m p l e m e n t a r e u n a d e l l e i n t e r f a c c e a d v i c e d e s c r i t t e
n e l l a s e z i o n e ? ? .
S p r i n g 2 . 0 s u p p o r t a i l c o n c e t t o d i a d v i s o r s t r a m i t e l ' e l e m e n t o < a o p : a d v i s o r s > . M o l t o
f r e q u e n t e m e n t e è u t i l i z z a t o i n c o n g i u n z i o n e c o n l ' a d v i c e t r a n s a z i o n a l e . Q u i a b b i a m o u n
e s e m p i o :
< a o p : c o n f i g >
< a o p : p o i n t c u t i d = " b u s i n e s s S e r v i c e "
e x p r e s s i o n = " e x e c u t i o n ( * c o m . x y z . m y a p p . s e r v i c e . * . * ( . . ) ) " / >
< a o p : a d v i s o r
p o i n t c u t - r e f = " b u s i n e s s S e r v i c e "
a d v i c e - r e f = " t x - a d v i c e " / >
< / a o p : c o n f i g >
< t x : a d v i c e i d = " t x - a d v i c e " >
< t x : a t t r i b u t e s >
< t x : m e t h o d n a m e = " * " p r o p a g a t i o n = " R E Q U I R E D " / >
< / t x : a t t r i b u t e s >
< / t x : a d v i c e >
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 61/86
C A P I T O L O 4 . S P R I N G A O P 5 4
4 . 3 . 7 E s e m p i o
R i v e d i a m o l ' e s e m p i o p r e s e n t a t o i n 4 . 2 . 7 u t i l i z z a n d o l ' X M L .
p u b l i c c l a s s L o g g e r W i t h X M L {
p u b l i c v o i d b e f o r e D a o O p e r a t i o n A d v i s e ( J o i n P o i n t j p ) {
S y s t e m . o u t . p r i n t l n ( j p . g e t T a r g e t ( ) . g e t C l a s s ( ) . g e t N a m e ( ) +
" : S t o p e r e s e g u i r e i l m e t o d o " +
j p . g e t S i g n a t u r e ( ) . g e t N a m e ( ) ) ;
}
p u b l i c v o i d a f t e r D a o O p e r a t i o n A d v i s e ( J o i n P o i n t j p ) {
S y s t e m . o u t . p r i n t l n ( j p . g e t T a r g e t ( ) . g e t C l a s s ( ) . g e t N a m e ( ) +
" : H o e s e g u i t o i l m e t o d o " +
j p . g e t S i g n a t u r e ( ) . g e t N a m e ( ) ) ;
}
}
Q u e l l o c h e s e g u e è i l l e d i c o n g u r a z i o n e d i S p r i n g :
< ? x m l v e r s i o n = " 1 . 0 " e n c o d i n g = " U T F - 8 " ? >
< b e a n s x m l n s = " h t t p : / / w w w . s p r i n g f r a m e w o r k . o r g / s c h e m a / b e a n s "
x m l n s : x s i = " h t t p : / / w w w . w 3 . o r g / 2 0 0 1 / X M L S c h e m a - i n s t a n c e "
x m l n s : a o p = " h t t p : / / w w w . s p r i n g f r a m e w o r k . o r g / s c h e m a / a o p "
x m l n s : c o n t e x t = " h t t p : / / w w w . s p r i n g f r a m e w o r k . o r g / s c h e m a / c o n t e x t "
x s i : s c h e m a L o c a t i o n =
" h t t p : / / w w w . s p r i n g f r a m e w o r k . o r g / s c h e m a / b e a n s
h t t p : / / w w w . s p r i n g f r a m e w o r k . o r g / s c h e m a / b e a n s / s p r i n g - b e a n s - 3 . 0 . x s d
h t t p : / / w w w . s p r i n g f r a m e w o r k . o r g / s c h e m a / c o n t e x t
h t t p : / / w w w . s p r i n g f r a m e w o r k . o r g / s c h e m a / c o n t e x t / s p r i n g - c o n t e x t - 3 . 0 . x s d
h t t p : / / w w w . s p r i n g f r a m e w o r k . o r g / s c h e m a / a o p
h t t p : / / w w w . s p r i n g f r a m e w o r k . o r g / s c h e m a / a o p / s p r i n g - a o p - 2 . 5 . x s d " >
< ! - - = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = - - >
< ! - - = = = A t t i v a z i o n e A O P = = = - - >
< ! - - = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = - - >
< a o p : a s p e c t j - a u t o p r o x y / >
< ! - - = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = - - >
< ! - - = = = D e f i n i z i o n e a s p e t t i = = = - - >
< ! - - = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = - - >
< b e a n i d = " d a o A s p e c t " c l a s s = " e s e m p i o s p r i n g . L o g g e r W i t h X M L " / >
< a o p : c o n f i g >
< a o p : p o i n t c u t i d = " i n D a o " e x p r e s s i o n = " e x e c u t i o n ( * e s e m p i o s p r i n g . I D a o . * ( . . ) ) " / >
< a o p : a s p e c t i d = " m i o A s p e c t " r e f = " d a o A s p e c t " >
< a o p : b e f o r e p o i n t c u t - r e f = " i n D a o " m e t h o d = " b e f o r e D a o O p e r a t i o n A d v i s e " / >
< a o p : a f t e r p o i n t c u t - r e f = " i n D a o " m e t h o d = " a f t e r D a o O p e r a t i o n A d v i s e " / >
< / a o p : a s p e c t >
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 62/86
C A P I T O L O 4 . S P R I N G A O P 5 5
< / a o p : c o n f i g >
< ! - - = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = - - >
< ! - - = = = D e f i n i z i o n e d e i b e a n s = = = - - >
< ! - - = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = - - >
< b e a n i d = " d a o " c l a s s = " e s e m p i o s p r i n g . D a o " / >
< / b e a n s >
I l m e t o d o m a i n p e r f a r e u n t e s t è i l s e g u e n t e :
p u b l i c s t a t i c v o i d m a i n ( S t r i n g [ ] a r g s ) {
A p p l i c a t i o n C o n t e x t c o n t e x t =
n e w C l a s s P a t h X m l A p p l i c a t i o n C o n t e x t ( n e w S t r i n g [ ] { " / c o n f i g S p r i n g . x m l " } ) ;
/ / T e s t c o n u n b e a n g e s t i t o d a l c o n t e n i t o r e
I D a o d a o = c o n t e x t . g e t B e a n ( " d a o " , I D a o . c l a s s ) ;
d a o . s a l v a ( ) ;
d a o . r e c u p e r a ( ) ;
/ / T e s t c o n u n b e a n n o n g e s t i t o d a l c o n t e n i t o r e
I D a o a l t r o d a o = n e w D a o ( ) ;
a l t r o d a o . s a l v a ( ) ;
a l t r o d a o . r e c u p e r a ( ) ;
}
E s e g u e n d o l o , l ' o u t p u t s a r à :
e s e m p i o s p r i n g . D a o : S t o p e r e s e g u i r e i l m e t o d o s a l v a
S a l v o u n d a t o s u l d b
e s e m p i o s p r i n g . D a o : H o e s e g u i t o i l m e t o d o s a l v a
e s e m p i o s p r i n g . D a o : S t o p e r e s e g u i r e i l m e t o d o r e c u p e r a
H o r e c u p e r a t o u n d a t o d a l d b
e s e m p i o s p r i n g . D a o : H o e s e g u i t o i l m e t o d o r e c u p e r a
S a l v o u n d a t o s u l d b
H o r e c u p e r a t o u n d a t o d a l d b
4 . 4 S c e g l i e r e l o s t r u m e n t o p e r g e s t i r e l ' A O P
U n a v o l t a c h e s i è d e c i s o c h e u n a s p e t t o è l ' a p p r o c c i o m i g l i o r e p e r i m p l e m e n t a r e u n c e r t o
r e q u i s i t o d e l l ' a p p l i c a z i o n e , c o m e d e c i d e r e s e u t i l i z z a r e S p r i n g A O P o A s p e c t J , e t r a l o s t i l e
b a s a t o s u l l i n g u a g g i o , s u l l e a n n o t a z i o n i @ A s p e c t J o l o s t i l e X M L ? Q u e s t e d e c i s i o n i s o n o
i n u e n z a t e d a u n c e r t o n u m e r o d i f a t t o r i , t r a c u i i r e q u i s i t i d e l l ' a p p l i c a z i o n e , g l i s t r u m e n t i d i
s v i l u p p o e l a f a m i l i a r i t à d e l t e a m c o n A O P .
4 . 4 . 1 S p r i n g A O P o A s p e c t J ?
U s a l a c o s a p i ù s e m p l i c e c h e p u ò f u n z i o n a r e !
S p r i n g A O P è p i ù s e m p l i c e r i s p e t t o a d A s p e c t J p o i c h è n o n r i c h i e d e d i i n t r o d u r r e i l c o m -
p i l a t o r e o i l w e a v e r d i A s p e c t J n e l p r o c e s s o d i s v i l u p p o . S e s i h a b i s o g n o d i i n t e r c e t t a r e s o l o
l ' e s e c u z i o n e d e l l e o p e r a z i o n i d e i b e a n s d i S p r i n g , a l l o r a S p r i n g A O P è l a s c e l t a m i g l i o r e .
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 63/86
C A P I T O L O 4 . S P R I N G A O P 5 6
S e i n v e c e s i h a b i s o g n o d i i n t e r c e t t a r e o g g e t t i c h e S p r i n g n o n g e s t i s c e ( c o m e g l i o g g e t t i d i
d o m i n i o , s p e s s o ) a l l o r a c ' è b i s o g n o d i A s p e c t J .
E ' c o n s i g l i a t o A s p e c t J a n c h e q u a n d o c ' è b i s o g n o d i i n t e r c e t t a r e j o i n p o i n t s c h e n o n r i g u a r d i -
n o l a s e m p l i c e e s e c u z i o n e d i u n m e t o d o ( p e r e s e m p i o l ' a c c e s s o i n l e t t u r a / s c r i t t u r a d i u n
c a m p o ) .
Q u a n d o s i u t i l i z z a A s p e c t J s i p u ò s c e g l i e r e t r a l ' a p p r o c c i o b a s a t o s u l l i n g u a g g i o o l ' a p -
p r o c c i o b a s a t o s u l l e a n n o t a z i o n i . O v v i a m e n t e , s e n o n s i u s a a l m e n o l a v e r s i o n e 5 d i J a v a , l a
s c e l t a è o b b l i g a t a .
S e g l i a s p e t t i g i o c a n o u n r u o l o i m p o r t a n t e a l l ' i n t e r n o d e l p r o g e t t o e s i h a l a p o s s i b i l i t à
d i u s a r e A s p e c t J D e v e l o p m e n t T o o l s ( A J D T ) , i l p l u g i n p e r E c l i p s e , a l l o r a l ' a p p r o c c i o b a s a t o
s u l l i n g u a g g i o d i A s p e c t J è l a s c e l t a m i g l i o r e e p i ù s e m p l i c e p e r c h è i l l i n g u a g g i o è s t a t o
s p e c i c a t a m e n t e p r o g e t t a t o p e r s c r i v e r e a s p e t t i . S e n o n s i h a a d i s p o s i z i o n e E c l i p s e o s i
h a n n o p o c h i a s p e t t i c h e n o n g i o c a n o r u o l i d i p r i m o p i a n o , a l l o r a v a c o n s i d e r a t a l a p o s s i b i l i t à
d i u s a r e l e a n n o t a z i o n i , r i s p a r m i a n d o s i l a f a s e d i c o m p i l a z i o n e a l d i f u o r i d i q u e l l a n o r m a l e d i
J a v a .
4 . 4 . 2 @ A s p e c t J o X M L ?
S e s i è s c e l t o d i u s a r e S p r i n g A O P , s i p u ò s c e g l i e r e t r a i d u e a p p r o c c i v i s t i n e i p a r a g r a 4 . 2 e
4 . 3 .
N a t u r a l m e n t e s e n o n s i h a a d i s p o s i z i o n e a l m e n o l a J a v a 5 , l a s c e l t a è o b b l i g a t a .
L o s t i l e X M L p o t r e b b e e s s e r e p i ù f a m i l i a r e a c h i g i à s v i l u p p a c o n S p r i n g .
Q u a n d o s i u s a A O P c o m e t o o l p e r c o n g u r a r e i s e r v i z i d i t i p o e n t e r p r i s e , a l l o r a l ' X M L
p u ò e s s e r e u n a b u o n a s c e l t a . C o n l ' X M L i n o l t r e è m o l t o s e m p l i c e v i s u a l i z z a r e q u a l i a s p e t t i
s o n o p r e s e n t i n e l s i s t e m a .
L o s t i l e X M L h a d u e s v a n t a g g i .
I l p r i m o s v a n t a g g i o è c h e n o n i n c a p s u l a c o m p l e t a m e n t e l ' i m p l e m e n t a z i o n e d e g l i a s p e t t i
i n u n s i n g o l o p u n t o . I n f a t t i l a c o n g u r a z i o n e X M L n o n è s u c i e n t e , p o i c h è l ' a s p e t t o v a
c o m u n q u e d i c h i a r a t o i n u n a c l a s s e c o n i r e l a t i v i m e t o d i a d v i c e . Q u a n d o s i u s a @ A s p e c t J c ' è
u n s i n g o l o m o d u l o , l ' a s p e t t o , c h e i n c a p s u l a t u t t e l e i n f o r m a z i o n i .
I l s e c o n d o s v a n t a g g i o s t a n e l f a t t o c h e l o s t i l e X M L è u n p o ' p i ù l i m i t a t o q u a n t o a d
e s p r e s s i v i t à r i s p e t t o a l l o s t i l e @ A s p e c t J : è s u p p o r t a t o c o m e m o d e l l o d i i n s t a n z i a z i o n e s o l o
q u e l l o p e r g l i a s p e t t i s i n g l e t o n e n o n è p o s s i b i l e c o m b i n a r e i n o m i d e i p o i n t c u t s d i c h i a r a t i
c o n l ' X M L . P e r e s e m p i o , n e l l o s t i l e @ A s p e c t J s i p u ò s c r i v e r e q u a l c o s a d e l t i p o :
@ P o i n t c u t ( e x e c u t i o n ( * g e t * ( ) ) )
p u b l i c v o i d p r o p e r t y A c c e s s ( ) { }
@ P o i n t c u t ( e x e c u t i o n ( o r g . x y z . A c c o u n t + * ( . . ) )
p u b l i c v o i d o p e r a t i o n R e t u r n i n g A n A c c o u n t ( ) { }
@ P o i n t c u t ( p r o p e r t y A c c e s s ( ) & & o p e r a t i o n R e t u r n i n g A n A c c o u n t ( ) )
v o i d a c c o u n t P r o p e r t y A c c e s s ( ) { }
N e l l o s t i l e X M L s i p o s s o n o d i c h i a r a r e i p r i m i d u e p o i n t c u t s :
< a o p : p o i n t c u t i d = " p r o p e r t y A c c e s s "
e x p r e s s i o n = " e x e c u t i o n ( * g e t * ( ) ) " / >
< a o p : p o i n t c u t i d = " o p e r a t i o n R e t u r n i n g A n A c c o u n t "
e x p r e s s i o n = " e x e c u t i o n ( o r g . x y z . A c c o u n t + * ( . . ) ) " / >
N o n è p o s s i b i l e p e r ò d i c h i a r a r e i l p o i n t c u t a c c o u n t P r o p e r t y A c c e s s c o m b i n a n d o q u e s t e
d e n i z i o n i .
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 64/86
C A P I T O L O 4 . S P R I N G A O P 5 7
U n a l t r o v a n t a g g i o d e l l ' a p p r o c c i o @ A s p e c t J è c h e p u ò e s s e r e c o m p r e s o s i a d a S p r i n g A O P
s i a d a A s p e c t J , q u i n d i s e p e r q u a l c h e m o t i v o s i d e c i d e c h e A s p e c t J d e b b a e s s e r e i n t e g r a t o n e l l a
p r o p r i a a p p l i c a z i o n e , e e t t u a r e l a m i g r a z i o n e v e r s o u n a p p r o c c i o b a s a t o s u A s p e c t J d i v e n t a
m o l t o s e m p l i c e .
I n g e n e r a l e , @ A s p e c t J è p r e f e r i b i l e i n q u e l l e s i t u a z i o n i i n c u i g l i a s p e t t i f a n n o q u a l c o s a d i
p i ù d e l l a s e m p l i c e g e s t i o n e d e i s e r v i z i d i t i p o e n t e r p r i s e .
4 . 5 I l m e c c a n i s m o d e i p r o x y
S p r i n g A O P u s a i p r o x i e s d i n a m i c i J D K o C G L I B p e r c r e a r e i p r o x y d a t o u n o g g e t t o t a r g e t
( i p r o x y J D K s o n o d a p r e f e r i r e , q u a n d o s i h a p o s s i b i l i t à d i s c e l t a ) . V e n g o n o u t i l i z z a t i i p r i m i
q u a n d o l ' o g g e t t o t a r g e t i m p l e m e n t a u n ' i n t e r f a c c i a . I n c a s o c o n t r a r i o s i u t i l i z z a n o i C G L I B .
N e l c a s o i n c u i s i v o g l i a f o r z a r e l ' u s o d e i C G L I B , è p o s s i b i l e f a r l o ( p e r e s e m p i o n e l c a s o i n c u i
s i v o g l i a n o i n t e r c e t t a r e t u t t i i m e t o d i d i u n o g g e t t o t a r g e t , e n o n s o l o q u e l l i c h e i m p l e m e n t a n o
l ' i n t e r f a c c i a ) .
C i s o n o a l c u n i p u n t i d i c u i t e n e r e c o n t o s u i p r o x y C G L I B :
i m e t o d i n a l n o n p o s s o n o e s s e r e i n t e r c e t t a t i .
è n e c e s s a r i o a v e r e i b i n a r i C G L I B 2 a l l ' i n t e r n o d e l p r o p r i o c l a s s p a t h , a l t r i m e n t i S p r i n g
s o l l e v a d e i w a r n i n g .
i l c o s t r u t t o r e d e l l ' o g g e t t o i n t e r c e t t a t o v e r r à c h i a m a t o d u e v o l t e . Q u e s t o a c a u s a d e l
m e c c a n i s m o d i f u n z i o n a m e n t o d i q u e s t o t i p o d i p r o x y .
P e r f o r z a r e l ' u s o d e i p r o x i e s C G L I B b i s o g n a s e t t a r e a t r u e i l v a l o r e d e l l ' a t t r i b u t o p r o x y -
t a r g e t - c l a s s n e l n o d o < a o p : c o n g > :
< a o p : c o n f i g p r o x y - t a r g e t - c l a s s = " t r u e " >
< ! - - o t h e r b e a n s d e f i n e d h e r e . . . - - >
< / a o p : c o n f i g >
P e r f o r z a r e l ' u s o d e i p r o x y C G L I B q u a n d o s i u s a i l s u p p o r t o a u t o p r o x y @ A s p e c t J è
n e c e s s a r i o s e t t a r e a t r u e l ' a t t r i b u t o p r o x y - t a r g e t - c l a s s d e l n o d o < a o p : a s p e c t j - a u t o p r o x y > :
< a o p : a s p e c t j - a u t o p r o x y p r o x y - t a r g e t - c l a s s = " t r u e " / >
4 . 5 . 1 C a p i r e i p r o x y A O P
C o m e g i à r i b a d i t o p i ù v o l t e , S p r i n g A O P è b a s a t o s u p r o x y . E ' d i f o n d a m e n t a l e i m p o r t a n z a
c a p i r e i l m e c c a n i s m o d e i p r o x y p o i c h è s e d a u n a p a r t e f a c i l i t a n o m o l t o l ' u s o d e l l a A O P ,
d a l l ' a l t r a p o s s o n o p r e s e n t a r e s i t u a z i o n i d i c u i p o i r i s u l t a d i c i l e c a p i r e i l f u n z i o n a m e n t o .
S u p p o n i a m o , p e r e s e m p i o , d i a v e r e u n a c l a s s e B a n k M a n a g e m e n t , c h e i m p l e m e n t a u n ' i n -
t e r f a c c i a I B a n k M a n a g e m e n t c o n u n a s e r i e d i m e t o d i p u b b l i c i p e r l a g e s t i o n e d i o p e r a z i o n i
b a n c a r i e :
p u b l i c i n t e r f a c e I B a n k M a n a g e m e n t {
p u b l i c v o i d p r o c e s s a P a g a m e n t o ( ) ;
p u b l i c v o i d c h e c k R a t i n g C r e d i t o ( ) ;
}
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 65/86
C A P I T O L O 4 . S P R I N G A O P 5 8
p u b l i c c l a s s B a n k M a n a g e m e n t {
@ T r a n s a c t i o n a l
p u b l i c v o i d p r o c e s s a P a g a m e n t o ( ) {
/ / o p e r a z i o n i v a r i e
. . .
t h i s . c h e c k R a t i n g C r e d i t o ( ) ;
. . .
}
p u b l i c v o i d c h e c k R a t i n g C r e d i t o ( ) {
/ / f a q u a l c o s a . . .
}
/ / A l t r i m e t o d i . . .
. . .
}
C o m ' è p o s s i b i l e v e d e r e , i l m e t o d o p r o c e s s a P a g a m e n t o ( ) , c h e è p u b b l i c o , f a u s o d i u n
m e t o d o i n t e r n o a l l a c l a s s e , a n c h ' e s s o p u b b l i c o , c h e c k R a t i n g C r e d i t o ( ) . S i t u a z i o n i d e l g e n e r e
n o n s o n o m o l t o f r e q u e n t i . T i p i c a m e n t e , q u a n d o u n m e t o d o u t i l i z z a u n a l t r o m e t o d o d e l l a
s t e s s a c l a s s e , q u e s t ' u l t i m o è p r i v a t o . I n q u e s t o c a s o i n v e c e l a s i t u a z i o n e è d i v e r s a : i l m e t o -
d o c h e c k R a t i n g C r e d i t o ( ) è p u b b l i c o e q u i n d i p u ò e s s e r e u s a t o a n c h e d a a l t r e c l a s s i e s t e r n e .
S u p p o n i a m o c h e e n t r a m b i i m e t o d i s i a n o s o g g e t t i a d i n t e r c e t t a z i o n e . p r o c e s s a P a g a m e n t o ( )
n e c e s s i t a d e l l ' a p e r t u r a d e l l a t r a n s a z i o n e , c h e g e s t i a m o t r a m i t e A O P , v i s t o c h e p r o b a b i l m e n t e
n o n è l ' u n i c o m e t o d o c h e n e h a b i s o g n o .
A n c h e c h e c k R a t i n g C r e d i t o ( ) v i e n e i n t e r c e t t a t o , p o i c h è c o m e a n c h e a l t r i , p r i m a d e l l a s u a
e s e c u z i o n e v a c o n t r o l l a t o i l r u o l o d e l l ' u t e n t e c h e s t a r i c h i e d e n d o l ' o p e r a z i o n e . I n f a t t i t a l e
o p e r a z i o n e p u ò e s s e r e s v o l t a s o l o d a u n B a n k M a n a g e r .
D e n i a m o q u i n d i u n a s p e t t o d o v e g e s t i a m o q u e s t e p r o b l e m a t i c h e :
@ A s p e c t
p u b l i c c l a s s B a n c a {
@ P o i n c u t ( " . . . " )
p u b l i c v o i d t r a n s a z i o n e ( ) { } ;
@ P o i n t c u t ( " . . . " )
p u b l i c v o i d p e r m e s s o B a n k M a n a g e r ( ) { }
@ B e f o r e ( " t r a n s a z i o n e ( ) " )
p u b l i c v o i d a p r i T r a n s a z i o n e ( ) {
/ / A p r i t r a n s a z i o n e . . .
. . .
}
@ B e f o r e ( " p e r m e s s o B a n k M a n a g e r ( ) " )
p u b l i c v o i d c o n t r o l l a P e r m e s s i ( ) {
/ / C o n t r o l l o c h e l ' u t e n t e a b b i a i p e r m e s s i d a B a n k M a n a g e r
. . .
}
}
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 66/86
C A P I T O L O 4 . S P R I N G A O P 5 9
I l c o d i c e d e i p o i n t c u t s è s t a t o o m e s s o , m a l a s e m a n t i c a è c h i a r a : t r a n s a z i o n e ( ) i n t e r c e t t a
t u t t i i m e t o d i c h e s o n o t r a n s a z i o n i ( p e r e s e m p i o i n d i c a t i c o n @ T r a n s a c t i o n a l ) , t r a c u i p r o -
c e s s a P a g a m e n t o ( ) , e p e r m e s s o B a n k M a n a g e r ( ) i n t e r c e t t a t u t t i i m e t o d i s u c u i d e v o n o e s s e r e
c o n t r o l l a t i i p e r m e s s i d e l l ' u t e n t e , t r a c u i c h e c k R a t i n g C r e d i t o ( ) .
Q u a n d o S p r i n g A O P c r e a i l p r o x y c h e g e s t i r à q u e s t o a s p e t t o , c r e e r à u n o g g e t t o c h e f a r à
d a p o n t e t r a c h i c h i a m a i s e r v i z i d i B a n k M a n a g e m e n t e l a c l a s s e B a n k M a n a g e m e n t s t e s s a .
I n p s e u d o c o d i c e , l ' a s p e t t o d e l p r o x y s a r à p i ù o m e n o q u e s t o :
p r o c e s s a P a g a m e n t o ( ) {
/ / A t t i v a l a t r a n s a z i o n e . . .
. . .
I N V O K E o r i g i n a l . p r o c e s s a P a g a m e n t o ( ) ;
}
c h e c k R a t i n g C r e d i t o ( ) {
/ / C o n t r o l l o i p e r m e s s i d e l l ' u t e n t e . . .
. . .
I N V O K E o r i g i n a l . c h e c k R a t i n g C r e d i t o ( ) ;
}
D o v e c o n l a p a r o l a o r i g i n a l s i i n t e n d e u n r i f e r i m e n t o a l l ' i s t a n z a d e l l a c l a s s e B a n k M a n a g e -
m e n t c h e s i t r o v a d i e t r o q u e s t o p r o x y e c h e c o n t i e n e i l m e t o d o i n v o c a t o c o n I N V O K E .
Q u a n d o u n a c l a s s e e s t e r n a c h i a m e r à i l m e t o d o p r o c e s s a P a g a m e n t o ( ) v e r r à i n e e t t i e s -
e g u i t o q u e l l o d e l p r o x y , e n o n d i r e t t a m e n t e q u e l l o d e l l a c l a s s e B a n k M a n a g e m e n t c h e s t a
d i e t r o .
C o s a c ' è c h e n o n v a i n t u t t o q u e s t o ? L a p a r o l a t h i s a l l ' i n t e r n o d e l m e t o d o p r o c e s s a P a g a -
m e n t o ( ) . . .
L a p a r o l a t h i s , f a b e n e r i c o r d a r l o , s i r i f e r i s c e s e m p r e a l l ' i s t a n z a d e l l ' o g g e t t o s t e s s o i n c u i
c o m p a r e .
C o s a s u c c e d e q u a n d o v i e n e i n v o c a t o d a l l ' e s t e r n o i l m e t o d o c h e c k R a t i n g C r e d i t o ( ) d e l l a
c l a s s e B a n k M a n a g e m e n t ? Q u e l l o c h e s u c c e d e è c h e v i e n e i n v o c a t o i n r e a l t à i l m e t o d o c h e c k -
R a t i n g C r e d i t o ( ) d e l p r o x y , i l q u a l e e e t t u a i l c o n t r o l l o s u l l o s t a t o d e l l ' u t e n t e , e p o i e s e g u e i l
c o d i c e d i c h e c k R a t i n g C r e d i t o ( ) . T u t t o q u e s t o è e s a t t a m e n t e c o n f o r m e a q u e l l o c h e v o l e v a m o .
C o s a s u c c e d e q u a n d o v i e n e i n v o c a t o d a l l ' e s t e r n o i l m e t o d o p r o c e s s a P a g a m e n t o ( ) d e l l a
c l a s s e B a n k M a n a g e m e n t ? A n c h e i n q u e s t o c a s o v i e n e i n r e a l t à i n v o c a t o i l m e t o d o p r o c e s s -
a P a g a m e n t o ( ) d e l p r o x y . V i e n e q u i n d i a p e r t a l a t r a n s a z i o n e e v i e n e p o i e s e g u i t o i l c o d i c e
d i p r o c e s s a P a g a m e n t o ( ) . I n q u e s t o m e t o d o , t u t t a v i a , v i e n e u t i l i z z a t o a n c h e i l m e t o d o c h e c k -
R a t i n g C r e d i t o ( ) . T u t t a v i a v i e n e i n v o c a t o c o n l a p a r o l a t h i s , c h e s i r i f e r i s c e q u i n d i a l l ' i s t a n z a
c o r r e n t e . N o n v i e n e q u i n d i e s e g u i t o c h e c k R a t i n g C r e d i t o ( ) d e l p r o x y , m a v i e n e e s e g u i t o q u e l l o
d e l l ' i s t a n z a c o r r e n t e d e l l a c l a s s e B a n k M a n a g e m e n t e i n t a l e m e t o d o i l c o n t r o l l o s u l l o s t a t o d e l -
l ' u t e n t e n o n v i e n e f a t t o ! ! ! I l r i s u l t a t o è c h e q u a n d o s i i n v o c a i l m e t o d o p r o c e s s a P a g a m e n t o ( ) ,
v i e n e s a l t a t o u n i m p o r t a n t e c o n t r o l l o .
Q u e s t a s i t u a z i o n e , p e r f a r e u n d i s c o r s o g e n e r a l e , s i r i s c h i a o g n i v o l t a i n c u i u n a c l a s s e h a
d u e m e t o d i p u b b l i c i c h e v e n g o n o e n t r a m b i i n t e r c e t t a t i e g e s t i t i d a u n a s p e t t o , e i n u n o v i e n e
i n v o c a t o l ' a l t r o t r a m i t e t h i s .
C o m e r i s o l v e r e q u e s t o p r o b l e m a ? L a s o l u z i o n e p u ò s e m b r a r e b a n a l e , m a v a d e t t a : v a
e v i t a t a q u e s t a o r g a n i z z a z i o n e d e l c o d i c e . I n q u e s t o c a s o s p e c i c o è m e g l i o e e t t u a r e i l c o n -
t r o l l o a n c h e d i r e t t a m e n t e d e n t r o a l m e t o d o p r o c e s s a P a g a m e n t o ( ) . P e r e s e m p i o s i c r e a u n
n u o v o m e t o d o , p r i v a t o , d e n t r o B a n k M a n a g e m e n t c h e e e t t u a i c o n t r o l l i d e l l ' a d v i c e e p o i i n -
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 67/86
C A P I T O L O 4 . S P R I N G A O P 6 0
v o c a i l m e t o d o t h i s . c h e c k R a t i n g C r e d i t o ( ) . Q u e s t o n u o v o m e t o d o è q u e l l o c h e d e v ' e s s e r e u s a t o
a l l ' i n t e r n o d i p r o c e s s a P a g a m e n t o ( ) .
U n ' a l t r a s o l u z i o n e ( a s s o l u t a m e n t e d a e v i t a r e ! ) è q u e l l a i n c u i s i r i c h i e d e a l c o n t e n i t o r e i l
p r o x y d e l l a c l a s s e c o r r e n t e e s i i n v o c a i l m e t o d o c h e c k R a t i n g C r e d i t o ( ) s u d i e s s o . L ' i s t r u z i o n e
è l a s e g u e n t e :
( ( B a n k M a n a g e m e n t ) A o p C o n t e x t . c u r r e n t P r o x y ( ) ) . c h e c k R a t i n g C r e d i t o ( ) ;
T a l e s o l u z i o n e è s c o n s i g l i a t a p o i c h è c r e a u n f o r t e a c c o p p i a m e n t o t r a i l c o d i c e d e l l ' a p p l i -
c a z i o n e e i l c o n t e n i t o r e S p r i n g e q u e s t o v a s e m p r e a s s o l u t a m e n t e e v i t a t o !
4 . 6 C r e a z i o n e p r o g r a m m a t i c a d e i p r o x y @ A s p e c t J
O l t r e a l l ' u s o d i < a o p : c o n g > o < a o p : a s p e c t j - a u t o p r o x y > è p o s s i b i l e c r e a r e d e i p r o x i e s
s u d e g l i o g g e t t i t a r g e t i n m a n i e r a p r o g r a m m a t i c a . L a c l a s s e c h e p u ò e s s e r e u s a t a p e r f a r l o
è o r g . s p r i n g f r a m e w o r k . a o p . a s p e c t j . a n n o t a t i o n . A s p e c t J P r o x y F a c t o r y . L ' u s o d i q u e s t a c l a s s e è
m o l t o s e m p l i c e e d è i l l u s t r a t o n e l l ' e s e m p i o c h e s e g u e :
/ / c r e a u n a f a c t o r y c h e p u ò g e n e r a r e u n p r o x y p e r u n d a t o o g g e t t o
A s p e c t J P r o x y F a c t o r y f a c t o r y = n e w A s p e c t J P r o x y F a c t o r y ( t a r g e t O b j e c t ) ;
/ / a g g i u n g e u n a s p e t t o ( c l a s s e m a r c a t a c o n l ' a n n o t a z i o n e @ A s p e c t J ) .
/ / q u e s t o m e t o d o p u ò e s s e r e c h i a m a t o q u a n t e v o l t e s i v u o l e i n b a s e a i
/ / d i f f e r e n t i a s p e t t i c h e s i v o g l i o n o c o n s i d e r a r e .
f a c t o r y . a d d A s p e c t ( S e c u r i t y M a n a g e r . c l a s s ) ;
/ / è p o s s i b i l e a g g i u n g e r e i s t a n z e g i à e s i s t e n t i d i a s p e t t i
f a c t o r y . a d d A s p e c t ( u s a g e T r a c k e r ) ;
/ / g e n e r a i l p r o x y c h e c i i n t e r e s s a
M y I n t e r f a c e T y p e p r o x y = f a c t o r y . g e t P r o x y ( ) ;
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 68/86
P a r t e I I
D a t a A c c e s s
6 1
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 69/86
C a p i t o l o 5
G e s t i o n e d e l l e t r a n s a z i o n i
I l s u p p o r t o p e r l a g e s t i o n e d e l l e t r a n s a z i o n i è u n o d i p u n t i d i f o r z a d i S p r i n g . I l f r a m e w o r k
i n f a t t i f o r n i s c e u n ' a s t r a z i o n e p e r l a g e s t i o n e d e l l e t r a n s a z i o n i c h e p o r t a i s e g u e n t i v a n t a g g i :
M o d e l l o d i p r o g r a m m a z i o n e a d a t t o a d A P I d i e r e n t i , c o m e J a v a T r a n s a c t i o n A P I ( J T A ) ,
J D B C , H i b e r n a t e , J a v a P e r s i s t e n c e A P I ( J P A ) , J a v a D a t a O b j e c t s ( J D O ) .
S u p p o r t o p e r l a g e s t i o n e d i c h i a r a t i v a d e l l e t r a n s a z i o n i .
A P I p e r l a g e s t i o n e p r o g r a m m a t i c a d e l l e t r a n s a z i o n i p i ù s e m p l i c i r i s p e t t o a J T A .
I n t e g r a z i o n e e c c e l l e n t e c o n l e a s t r a z i o n i d i S p r i n g p e r l ' a c c e s s o a i d a t i .
5 . 1 V a n t a g g i d e l s u p p o r t o d i S p r i n g a l l a g e s t i o n e d e l l e t r a n s a z i o n i
T i p i c a m e n t e g l i s v i l u p p a t o r i J a v a E E h a n n o d u e s c e l t e p e r l a g e s t i o n e d e l l e t r a n s a z i o n i : g l o b a l i
o l o c a l i , e n t r a m b e l e q u a l i h a n n o a l c u n e l i m i t a z i o n i .
5 . 1 . 1 T r a n s a z i o n i g l o b a l i
L e t r a n s a z i o n i g l o b a l i c o n s e n t o n o d i l a v o r a r e c o n p i ù r i s o r s e t r a n s a z i o n a l i , t i p i c a m e n t e d a t a b a s e
r e l a z i o n a l i e c o d e d i m e s s a g g i .
G l i a p p l i c a t i o n s e r v e r g e s t i s c o n o l e t r a n s a z i o n i g l o b a l i t r a m i t e J T A c h e è u n ' A P I p i u t t o s t o
a r t i c o l a t a d a u s a r e . I n o l t r e , u n U s e r T r a n s a c t i o n J T A n o r m a l m e n t e h a b i s o g n o d i e s s e r e
c o n n e s s o a d u n a r i s o r s a J N D I , i l c h e v u o l d i r e c h e b i s o g n a p r i m a g e s t i r e q u e s t o a s p e t t o e p o i
J T A . Q u e s t o l i m i t a i l r i u s o d e l c o d i c e d e l l ' a p p l i c a z i o n e , a n c h e p e r c h è J T A è d i s p o n i b i l e s o l o
i n a m b i e n t e w e b s e r v e r .
I n p r e c e d e n z a i l m o d o p r e f e r i t o p e r g e s t i r e l e t r a n s a z i o n i e r a a t t r a v e r s o g l i E J B C M T
( C o i n t a i n e r M a n a g e d T r a n s a c t i o n ) . E J B C M T è u n a f o r m a d i g e s t i o n e d i c h i a r a t i v a , c h e
r i d u c e l a q u a n t i t à d i c o d i c e J a v a d a s c r i v e r e , m a c h e è c o m u n q u e c o n n e s s a a J T A e a l w e b
s e r v e r i n u s o .
5 . 1 . 2 T r a n s a z i o n i l o c a l i
L e t r a n s a z i o n i l o c a l i s o n o s p e c i c h e p e r u n a r i s o r s a , c o m e p e r e s e m p i o l e t r a n s a z i o n i a s s o c i a t e
a d u n a c o n n e s s i o n e J D B C . S o n o p i ù s e m p l i c i d a u s a r e , m a h a n n o u n o s v a n t a g g i o s i g n i c a t i -
v o : n o n p o s s o n o l a v o r a r e s u p i ù r i s o r s e t r a n s a z i o n a l i . P e r e s e m p i o , i l c o d i c e c h e g e s t i s c e l e
t r a n s a z i o n i u s a n d o u n a c o n n e s s i o n e J D B C n o n p u ò l a v o r a r e c o n u n a t r a n s a z i o n e g l o b a l e J T A .
U n a l t r o d i f e t t o è c h e i l l o r o m o d e l l o d i p r o g r a m m a z i o n e è p i u t t o s t o i n v a s i v o .
6 2
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 70/86
C A P I T O L O 5 . G E S T I O N E D E L L E T R A N S A Z I O N I 6 3
5 . 1 . 3 M o d e l l o d i p r o g r a m m a z i o n e d i S p r i n g
S p r i n g r i s o l v e g l i s v a n t a g g i d i e n t r a m b i g l i a p p r o c c i , f o r n e n d o a g l i s v i l u p p a t o r i u n m o d e l l o d i
p r o g r a m m a z i o n e a d a t t o a d o g n i a m b i e n t e d i l a v o r o . E ' p o s s i b i l e s c r i v e r e i l c o d i c e u n a v o l t a e
b e n e c i a r e d i q u a l u n q u e s t r a t e g i a i n q u a l u n q u e a m b i e n t e .
5 . 2 C o m p r e n d e r e l ' a s t r a z i o n e d e l l e t r a n s a z i o n i d i S p r i n g
L a c h i a v e a l l a b a s e d e l l ' a s t r a z i o n e d e l l e t r a n s a z i o n i è l a n o z i o n e d i s t r a t e g i a d e l l e t r a n s a z i o n i .
U n a s t r a t e g i a è d e n i t a d a l l ' i n t e r f a c c i a o r g . s p r i n g f r a m e w o r k . t r a n s a c t i o n . P l a t f o r m T r a n s a c t i o n M a n a g e r :
p u b l i c i n t e r f a c e P l a t f o r m T r a n s a c t i o n M a n a g e r {
T r a n s a c t i o n S t a t u s g e t T r a n s a c t i o n ( T r a n s a c t i o n D e f i n i t i o n d e f i n i t i o n )
t h r o w s T r a n s a c t i o n E x c e p t i o n ;
v o i d c o m m i t ( T r a n s a c t i o n S t a t u s s t a t u s ) t h r o w s T r a n s a c t i o n E x c e p t i o n ;
v o i d r o l l b a c k ( T r a n s a c t i o n S t a t u s s t a t u s ) t h r o w s T r a n s a c t i o n E x c e p t i o n ;
}
E ' a n z i t u t t o u n ' i n t e r f a c c i a p r o v i d e r d i s e r v i z i ( S P I , S e r v i c e P r o v i d e r I n t e r f a c e ) , b e n c h è s i
p o s s a u s a r e p r o g r a m m a t i c a m e n t e a l l ' i n t e r n o d e l c o d i c e . N o n è l e g a t a a n e s s u n a s t r a t e g i a d i
l o o k u p c o m e J N D I .
L e i m p l e m e n t a z i o n i d i q u e s t a i n t e r f a c c i a s o n o d e n i t e c o m e q u a l u n q u e a l t r o o g g e t t o n e l
c o n t a i n e r I o C .
O g n i m e t o d o p u ò s o l l e v a r e u n ' e c c e z i o n e d i t i p o T r a n s a c t i o n E x c e p t i o n , c h e è u n ' e c c e z i o n e
u n c h e c k e d ( o v v e r o e s t e n d e j a v a . l a n g . R u n t i m e E x c e p t i o n ) . I m a l f u n z i o n a m e n t i d e l l ' i n f r a s t r u t -
t u r a t r a n s a z i o n a l e s o n o s p e s s o i m m a n c a b i l m e n t e f a t a l i . I n r a r i c a s i , l à d o v e t r a m i t e c o d i c e
è p o s s i b i l e r i p r i s t i n a r e l a s i t u a z i o n e , l o s v i l u p p a t o r e p u ò s c e g l i e r e s e c a t t u r a r e e g e s t i r e l a
T r a n s a c t i o n E x c e p t i o n . I l p u n t o f o n d a m e n t a l e è c h e l o s v i l u p p a t o r e n o n è c o s t r e t t o a f a r l o .
I l m e t o d o g e t T r a n s a c t i o n ( . . ) r i t o r n a u n o g g e t t o T r a n s a c t i o n S t a t u s , c h e d i p e n d e d a u n
p a r a m e t r o T r a n s a c t i o n D e n i t i o n . T a l e o g g e t t o r i t o r n a t o p o t r e b b e r a p p r e s e n t a r e u n a n u o v a
t r a n s a z i o n e , o p p u r e p u ò r a p p r e s e n t a r e u n a t r a n s a z i o n e e s i s t e n t e s e l a t r a n s a z i o n e c h i a m a t a è
g i à e s i s t e n t e n e l l o s t a c k . L e i m p l i c a z i o n i d i q u e s t o r i s i e d o n o n e l f a t t o c h e , c o s i c o m e i l c o n t e s t o
t r a n s a z i o n a l e J a v a E E , u n T r a n s a c t i o n S t a t u s è a s s o c i a t o a d u n t h r e a d d i e s e c u z i o n e .
L ' i n t e r f a c c i a T r a n s a c t i o n D e n i t i o n d e n i s c e i s e g u e n t i a s p e t t i :
I s o l a t i o n : i l g r a d o d i i s o l a m e n t o d e l l a t r a n s a z i o n e d a l l e a l t r e t r a n s a z i o n i .
P r o p a g a t i o n : t i p i c a m e n t e t u t t o i l c o d i c e e s e g u i t o a l l ' i n t e r n o d e l l o s c o p e d i u n a t r a n s a z i o n e
v i e n e e s e g u i t o a l l ' i n t e r n o d i q u e l l a t r a n s a z i o n e . C i ò n o n o s t a n t e c ' è l a p o s s i b i l i t à d i
s p e c i c a r e q u e s t o c o m p o r t a m e n t o p e r u n a t r a n s a z i o n e e s e g u i t a q u a n d o u n c o n t e s t o
t r a n s a z i o n a l e g i à e s i s t e . P e r e s e m p i o , a l l ' i n t e r n o d e l c o d i c e d i u n a t r a n s a z i o n e , v i e n e
r i c h i a m a t a u n a f u n z i o n e c h e è a n c h ' e s s a u n a t r a n s a z i o n e . I l p r o g r a m m a t o r e p u ò q u i n d i
d e c i d e r e s e a p r i r e u n a n u o v a t r a n s a z i o n e o s e u t i l i z z a r e i l c o n t e s t o g i à e s i s t e n t e .
T i m e o u t : d e t e r m i n a i l t e m p o d i e s e c u z i o n e d i s p o n i b i l e a l l a t r a n s a z i o n e , p r i m a c h e e s s a
p o s s a a n d a r e i n t i m e o u t .
R e a d - o n l y s t a t u s : u n a t r a n s a z i o n e r e a d - o n l y p u ò e s s e r e u s a t a q u a n d o i l c o d i c e d e v e
l e g g e r e d e i d a t i s e n z a m o d i c a r l i .
L ' i n t e r f a c c i a T r a n s a c t i o n S t a t u s f o r n i s c e u n a v i a s e m p l i c e p e r c o d i c a r e i l c o n t r o l l o d e l l e
t r a n s a z i o n i :
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 71/86
C A P I T O L O 5 . G E S T I O N E D E L L E T R A N S A Z I O N I 6 4
p u b l i c i n t e r f a c e T r a n s a c t i o n S t a t u s e x t e n d s S a v e p o i n t M a n a g e r {
b o o l e a n i s N e w T r a n s a c t i o n ( ) ;
b o o l e a n h a s S a v e p o i n t ( ) ;
v o i d s e t R o l l b a c k O n l y ( ) ;
b o o l e a n i s R o l l b a c k O n l y ( ) ;
v o i d f l u s h ( ) ;
b o o l e a n i s C o m p l e t e d ( ) ;
}
I n d i p e n d e n t e m e n t e c h e s i s c e l g a u n a p p r o c c i o d i c h i a r a t i v o o p r o g r a m m a t i c o p e r l a g e s t i o n e
d e l l e t r a n s a z i o n i , d e n i r e c o r r e t t a m e n t e l ' i m p l e m e n t a z i o n e d e l P l a t f o r m T r a n s a c t i o n M a n a g e r
è e s s e n z i a l e . T i p i c a m e n t e q u e s t o s i p u ò f a r e t r a m i t e D e p e n d e n c y I n j e c t i o n .
L e i m p l e m e n t a z i o n i d e l P l a t f o r m T r a n s a c t i o n M a n a g e r d i s o l i t o r i c h i e d o n o l a c o n o s c e n z a
d e l l ' a m b i e n t e a l l ' i n t e r n o d e l q u a l e l a v o r a n o : J D B C , J T A , H i b e n a t e e c o s i v i a . G l i e s e m p i c h e
s e g u i r a n n o a i u t e r a n n o a c h i a r i r e ( Q u e s t o e s e m p i o l a v o r a s u J D B C ) .
S i d e n i s c e u n d a t a s o u r c e :
< b e a n i d = " d a t a S o u r c e "
c l a s s = " o r g . a p a c h e . c o m m o n s . d b c p . B a s i c D a t a S o u r c e "
d e s t r o y - m e t h o d = " c l o s e " >
< p r o p e r t y n a m e = " d r i v e r C l a s s N a m e " v a l u e = " \ $ { j d b c . d r i v e r C l a s s N a m e } " / >
< p r o p e r t y n a m e = " u r l " v a l u e = " \ $ { j d b c . u r l } " / >
< p r o p e r t y n a m e = " u s e r n a m e " v a l u e = " \ $ { j d b c . u s e r n a m e } " / >
< p r o p e r t y n a m e = " p a s s w o r d " v a l u e = " \ $ { j d b c . p a s s w o r d } " / >
< / b e a n >
I l r e l a t i v o P l a t f o r m T r a n s a c t i o n M a n a g e r b e a n d o v r à s e t t a r e u n r i f e r i m e n t o a t a l e D a t a -
S o u r c e . S a r à q u a l c o s a d e l g e n e r e :
< b e a n i d = " t x M a n a g e r "
c l a s s = " o r g . s p r i n g f r a m e w o r k . j d b c . d a t a s o u r c e . D a t a S o u r c e T r a n s a c t i o n M a n a g e r " >
< p r o p e r t y n a m e = " d a t a S o u r c e " r e f = " d a t a S o u r c e " / >
< / b e a n >
S e s i u s a J T A a l l ' i n t e r n o d i u n c o n t a i n e r J a v a E E , a l l o r a s i p u ò u s a r e i l D a t a S o u r c e d e l
c o n t a i n e r , o t t e n u t o t r a m i t e J N D I , i n c o n g i u n z i o n e c o n i l J t a T r a n s a c t i o n M a n a g e r d i S p r i n g .
I l c o d i c e p o t r e b b e e s s e r e q u a l c o s a d e l g e n e r e :
< ? x m l v e r s i o n = " 1 . 0 " e n c o d i n g = " U T F - 8 " ? >
< b e a n s x m l n s = " h t t p : / / w w w . s p r i n g f r a m e w o r k . o r g / s c h e m a / b e a n s "
x m l n s : x s i = " h t t p : / / w w w . w 3 . o r g / 2 0 0 1 / X M L S c h e m a - i n s t a n c e "
x m l n s : j e e = " h t t p : / / w w w . s p r i n g f r a m e w o r k . o r g / s c h e m a / j e e "
x s i : s c h e m a L o c a t i o n = " h t t p : / / w w w . s p r i n g f r a m e w o r k . o r g / s c h e m a / b e a n s
h t t p : / / w w w . s p r i n g f r a m e w o r k . o r g / s c h e m a / b e a n s / s p r i n g - b e a n s - 3 . 0 . x s d
h t t p : / / w w w . s p r i n g f r a m e w o r k . o r g / s c h e m a / j e e
h t t p : / / w w w . s p r i n g f r a m e w o r k . o r g / s c h e m a / j e e / s p r i n g - j e e - 3 . 0 . x s d " >
< ! - - L o o k u p d e l l e r i s o r s e J N D I - - >
< j e e : j n d i - l o o k u p i d = " d a t a S o u r c e " j n d i - n a m e = " j d b c / e s e m p i o " / >
< ! - - D e f i n i z i o n e d e l t r a n s a c t i o n m a n a g e r - - >
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 72/86
C A P I T O L O 5 . G E S T I O N E D E L L E T R A N S A Z I O N I 6 5
< b e a n i d = " t x M a n a g e r "
c l a s s = " o r g . s p r i n g f r a m e w o r k . t r a n s a c t i o n . j t a . J t a T r a n s a c t i o n M a n a g e r " / >
< / b e a n s >
I l J t a T r a n s a c t i o n M a n a g e r n o n n e c e s s i t a d i s a p e r e n u l l a s u l D a t a S o u r c e , o s u a l t r e s p e c i -
c h e r i s o r s e , p e r c h è u s a l ' i n f r a s t r u t t u r a d e l c o n t a i n e r p e r l a g e s t i o n e d e l l e t r a n s a z i o n i g l o b a l i .
Q u e s t a d e n i z i o n e d e l d a t a S o u r c e u t i l i z z a i l t a g < j n d i - l o o k u p / > d a l n a m e s p a c e j e e . P e r
m a g g i o r i i n f o r m a z i o n i g u a r d a r e l ' a p p e n d i c e ? ? .
E ' p o s s i b i l e u t i l i z z a r e m o l t o f a c i l m e n t e a n c h e l e t r a n s a z i o n i H i b e r n a t e , c o m e m o s t r a t o n e l
s e g u e n t e e s e m p i o . I n q u e s t o c a s o v a d e n i t o u n L o c a l S e s s i o n F a c t o r y B e a n , c h e l ' a p p l i c a z i o n e
u s e r à p e r o t t e n e r e i s t a n z e d i S e s s i o n d i H i b e r n a t e .
L a d e n i z i o n e d e l b e a n D a t a S o u r c e è s i m i l e a q u e l l a J D B C v i s t a p o c o s o p r a e q u i n d i
n e l l ' e s e m p i o n o n s a r à m o s t r a t a .
I l b e a n t x M a n a g e r i n q u e s t o c a s o è u n H i b e r n a t e T r a n s a c t i o n M a n a g e r . C o s i c o m e i l D a t a -
S o u r c e T r a n s a c t i o n M a n a g e r n e c e s s i t a d i u n r i f e r i m e n t o a l D a t a S o u r c e , l ' H i b e r n a t e T r a n s a c t i o n M a n a g e r
n e c e s s i t à d i u n r i f e r i m e n t o a l S e s s i o n F a c t o r y .
< b e a n i d = " s e s s i o n F a c t o r y "
c l a s s = " o r g . s p r i n g f r a m e w o r k . o r m . h i b e r n a t e 3 . L o c a l S e s s i o n F a c t o r y B e a n " >
< p r o p e r t y n a m e = " d a t a S o u r c e " r e f = " d a t a S o u r c e " / >
< p r o p e r t y n a m e = " m a p p i n g R e s o u r c e s " >
< l i s t >
< v a l u e > e s e m p i o s p r i n g / h i b e r n a t e / p e r s o n a . h b m . x m l < / v a l u e >
< / l i s t >
< / p r o p e r t y >
< p r o p e r t y n a m e = " h i b e r n a t e P r o p e r t i e s " >
< v a l u e >
h i b e r n a t e . d i a l e c t = \ $ { h i b e r n a t e . d i a l e c t }
< / v a l u e >
< / p r o p e r t y >
< / b e a n >
< b e a n i d = " t x M a n a g e r "
c l a s s = " o r g . s p r i n g f r a m e w o r k . o r m . h i b e r n a t e 3 . H i b e r n a t e T r a n s a c t i o n M a n a g e r " >
< p r o p e r t y n a m e = " s e s s i o n F a c t o r y " r e f = " s e s s i o n F a c t o r y " / >
< / b e a n >
S e s i s t a u t i l i z z a n d o H i b e r n a t e l a g e s t i o n e d e l l e t r a n s a z i o n i J T A d i u n c o n t a i n e r J a v a E E ,
a l l o r a s i p u ù u t i l i z z a r e i l J t a T r a n s a c t i o n M a n a g e r c o m e n e l p r e c e d e n t e e s e m p i o p e r J D B C .
< b e a n i d = " t x M a n a g e r " c l a s s = " o r g . s p r i n g f r a m e w o r k . t r a n s a c t i o n . j t a . J t a T r a n s a c t i o n M a n a g e r " / >
I n t u t t i q u e s t i c a s i , i l c o d i c e d e l l ' a p p l i c a z i o n e n o n n e c e s s i t a d i c a m b i a m e n t i . E ' p o s s i b i l e
c a m b i a r e i l m o d o i n c u i l e t r a n s a z i o n i s o n o g e s t i t e c a m b i a n d o s o l o l a c o n g u r a z i o n e .
5 . 3 G e s t i o n e d i c h i a r a t i v a d e l l e t r a n s a z i o n i
S o n o m o l t i t r a g l i s v i l u p p a t o r i S p r i n g a d u s a r e l a g e s t i o n e d i c h i a r a t i v a d e l l e t r a n s a z i o n i .
Q u e s t a o p z i o n e è l a m e n o i n v a s i v a .
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 73/86
C A P I T O L O 5 . G E S T I O N E D E L L E T R A N S A Z I O N I 6 6
Q u e s t o t i p o d i g e s t i o n e d e l l e t r a n s a z i o n i è r e s a p o s s i b i l e g r a z i e a d A O P .
C o m e p e r g l i E J B C M T , a n c h e n e l l ' a p p r o c c i o a d o t t a t o d a S p r i n g è p o s s i b i l e s p e c i c a r e i l
c o m p o r t a m e n t o d e l l e t r a n s a z i o n i a l i v e l l o d e i s i n g o l i m e t o d i . E ' p o s s i b i l e f a r e u n a c h i a m a t a
s e t R o l l b a c k O n l y ( ) n e l c o n t e s t o t r a n s a z i o n a l e , s e n e c e s s a r i o . Q u e s t e s o n o l e d i e r e n z e t r a i d u e
s t r u m e n t i :
m e n t r e E J B C M T è l e g a t o a J T A , S p r i n g l a v o r a i n q u a l s i a s i a m b i e n t e . P u ò l a v o r a r e
c o n t r a n s a z i o n i J T A o c o n t r a n s a z i o n i l o c a l i u s a n d o J D B C , J P A , H i b e r n a t e o J D O ,
s e m p l i c e m e n t e a g g i u s t a n d o i n m a n i e r a o p p o r t u n a i l l e d i c o n g u r a z i o n e .
è p o s s i b i l e a p p l i c a r e l a g e s t i o n e d i c h i a r a t i v a a d o g n i c l a s s e , e n o n s o l a m e n t e a c l a s s i
s p e c i a l i c o m e s o n o g l i E J B .
S p r i n g o r e r e g o l e d i c h i a r a t i v e p e r i l r o l l b a c k , u n a c a r a t t e r i s t i c a c h e n o n h a e q u i v a l e n t i
c o n g l i E J B .
S p r i n g c o n s e n t e d i c u s t o m i z z a r e i l c o m p o r t a m e n t o t r a n s a z i o n a l e , u s a n d o A O P .
S p r i n g n o n c o n s e n t e l a p r o p a g a z i o n e d e l c o n t e s t o t r a n s a z i o n a l e a t t r a v e r s o l e c h i a m a t e
r e m o t e .
I l c o n c e t t o d i r e g o l e d i r o l l b a c k è i m p o r t a n t e : c o n s e n t o n o , i n f a t t i , d i s p e c i c a r e q u a l i e c -
c e z i o n i p o t r e b b e r o c a u s a r e a u t o m a t i c a m e n t e i l r o l l b a c k . Q u e s t o s i p u ò f a r e d i c h i a r a t i v a m e n t e ,
s e n z a u s o d i c o d i c e J a v a . Q u i n d i , b e n c h è s i a p o s s i b i l e c h i a m a r e i l m e t o d o s e t R o l l b a c k O n l y ( )
s u l l ' o g g e t t o T r a n s a c t i o n S t a t u s , p i ù s p e s s o s i s p e c i c a n o r e g o l e p e r c u i u n ' e c c e z i o n e s p e c i c a t a
g e n e r a i l r o l l b a c k . I l v a n t a g g i o s i g n i c a t i v o d i q u e s t o a p p r o c c i o s t a n e l f a t t o c h e g l i o g g e t t i
d i b u s i n e s s n o n d i p e n d o n o d a l l ' i n f r a s t r u t t u r a d e l l e t r a n s a z i o n i .
5 . 3 . 1 C o m p r e n d e r e l ' a p p r o c c i o d i c h i a r a t i v o
N o n è s u c i e n t e d i r e c h e b i s o g n a a n n o t a r e u n a c l a s s e c o m e @ T r a n s a c t i o n a l , a g g i u n g e r e
l a l i n e a < t x : a n n o t a t i o n - d r i v e n / > a l l a c o n g u r a z i o n e , e a s p e t t a r s i c h e s i c a p i s c a c o m e f a
t u t t o a f u n z i o n a r e . Q u e s t a s e z i o n e s p i e g h e r à i n c h e m o d o l ' a p p r o c c i o d i c h i a r a t i v o p e r m e t t e a
S p r i n g d i f u n z i o n a r e . A l l a b a s e d e l m e c c a n i s m o c ' è i l m o d u l o A O P .
5 . 3 . 2 E s e m p i o
C o n s i d e r i a m o l a s e g u e n t e i n t e r f a c c i a e l a s u a p o s s i b i l e i m p l e m e n t a z i o n e . Q u e s t a c l a s s e c o n -
t i e n e d e i m e t o d i c h e h a n n o i l s o l o s c o p o d i e s s e r e d a e s e m p i o , c o n c e n t r a n d o c i s u l l a t r a n s a z i o n e
e n o n s u l m o d e l l o d i d o m i n i o . L a c l a s s e D e f a u l t F o o S e r v i c e s o l l e v a e c c e z i o n i d i t i p o U n s u p -
p o r t e d O p e r a t i o n E x c e p t i o n a l l ' i n t e r n o d e l c o r p o d i o g n i m e t o d o ; q u e s t o c i d a r à l a p o s s i b i l i t à
d i v e d e r e l a c r e a z i o n e d e l l e t r a n s a z i o n i e i l l o r o r o l l b a c k .
/ / l ' i n t e r f a c c i a d e i s e r v i z i c h e v o g l i a m o c h e s i a n o t r a n s a z i o n a l i
p a c k a g e e s e m p i o s p r i n g . s e r v i c e ;
p u b l i c i n t e r f a c e F o o S e r v i c e {
F o o g e t F o o ( S t r i n g f o o N a m e ) ;
F o o g e t F o o ( S t r i n g f o o N a m e , S t r i n g b a r N a m e ) ;
v o i d i n s e r t F o o ( F o o f o o ) ;
v o i d u p d a t e F o o ( F o o f o o ) ;
}
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 74/86
C A P I T O L O 5 . G E S T I O N E D E L L E T R A N S A Z I O N I 6 7
/ / u n ' i m p l e m e n t a z i o n e d i t a l i s e r v i z i
p a c k a g e e s e m p i o s p r i n g . s e r v i c e ;
p u b l i c c l a s s D e f a u l t F o o S e r v i c e i m p l e m e n t s F o o S e r v i c e {
p u b l i c F o o g e t F o o ( S t r i n g f o o N a m e ) {
t h r o w n e w U n s u p p o r t e d O p e r a t i o n E x c e p t i o n ( ) ;
}
p u b l i c F o o g e t F o o ( S t r i n g f o o N a m e , S t r i n g b a r N a m e ) {
t h r o w n e w U n s u p p o r t e d O p e r a t i o n E x c e p t i o n ( ) ;
}
p u b l i c v o i d i n s e r t F o o ( F o o f o o ) {
t h r o w n e w U n s u p p o r t e d O p e r a t i o n E x c e p t i o n ( ) ;
}
p u b l i c v o i d u p d a t e F o o ( F o o f o o ) {
t h r o w n e w U n s u p p o r t e d O p e r a t i o n E x c e p t i o n ( ) ;
}
}
A s s u m i a m o c h e i p r i m i d u e m e t o d i , g e t F o o ( S t r i n g ) e g e t F o o ( S t r i n g , S t r i n g ) , d e b b a n o e s -
s e r e e s e g u i t i n e l c o n t e s t o d i u n a t r a n s a z i o n e r e a d - o n l y , e c h e g l i a l t r i m e t o d i , i n s e r t F o o ( F o o )
e u p d a t e F o o ( F o o ) , d e b b a n o e s s e r e e s e g u i t i n e l c o n t e s t o d i u n a t r a n s a z i o n e r e a d - w r i t e . L a
s e g u e n t e c o n g u r a z i o n e è d e s c r i t t a n e l d e t t a g l i o n e i p r o s s i m i p a r a g r a :
< ! - - d a l s p r i n g - c o n f i g . x m l - - >
< ? x m l v e r s i o n = " 1 . 0 " e n c o d i n g = " U T F - 8 " ? >
< b e a n s x m l n s = " h t t p : / / w w w . s p r i n g f r a m e w o r k . o r g / s c h e m a / b e a n s "
x m l n s : x s i = " h t t p : / / w w w . w 3 . o r g / 2 0 0 1 / X M L S c h e m a - i n s t a n c e "
x m l n s : a o p = " h t t p : / / w w w . s p r i n g f r a m e w o r k . o r g / s c h e m a / a o p "
x m l n s : t x = " h t t p : / / w w w . s p r i n g f r a m e w o r k . o r g / s c h e m a / t x "
x s i : s c h e m a L o c a t i o n = "
h t t p : / / w w w . s p r i n g f r a m e w o r k . o r g / s c h e m a / b e a n s
h t t p : / / w w w . s p r i n g f r a m e w o r k . o r g / s c h e m a / b e a n s / s p r i n g - b e a n s - 3 . 0 . x s d
h t t p : / / w w w . s p r i n g f r a m e w o r k . o r g / s c h e m a / t x
h t t p : / / w w w . s p r i n g f r a m e w o r k . o r g / s c h e m a / t x / s p r i n g - t x - 3 . 0 . x s d
h t t p : / / w w w . s p r i n g f r a m e w o r k . o r g / s c h e m a / a o p
h t t p : / / w w w . s p r i n g f r a m e w o r k . o r g / s c h e m a / a o p / s p r i n g - a o p - 3 . 0 . x s d " >
< ! - - d e f i n i z i o n e d e l D a t a S o u r c e - - >
< b e a n i d = " d a t a S o u r c e "
c l a s s = " o r g . a p a c h e . c o m m o n s . d b c p . B a s i c D a t a S o u r c e " d e s t r o y - m e t h o d = " c l o s e " >
< p r o p e r t y n a m e = " d r i v e r C l a s s N a m e " v a l u e = " $ { d r i v e r } " / >
< p r o p e r t y n a m e = " u r l " v a l u e = " $ { u r l } " / >
< p r o p e r t y n a m e = " u s e r n a m e " v a l u e = " $ { u s e r n a m e } " / >
< p r o p e r t y n a m e = " p a s s w o r d " v a l u e = " $ { p a s s w o r d } " / >
< / b e a n >
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 75/86
C A P I T O L O 5 . G E S T I O N E D E L L E T R A N S A Z I O N I 6 8
< ! - - d e f i n i z i o n e d e l P l a t f o r m T r a n s a c t i o n M a n a g e r - - >
< b e a n i d = " t x M a n a g e r "
c l a s s = " o r g . s p r i n g f r a m e w o r k . j d b c . d a t a s o u r c e . D a t a S o u r c e T r a n s a c t i o n M a n a g e r " >
< p r o p e r t y n a m e = " d a t a S o u r c e " r e f = " d a t a S o u r c e " / >
< / b e a n >
< ! - - Q u e s t o è i l s e r v i z i o c h e v o g l i a m o r e n d e r e t r a n s a z i o n a l e - - >
< b e a n i d = " f o o S e r v i c e " c l a s s = " x . y . s e r v i c e . D e f a u l t F o o S e r v i c e " / >
< ! - - A d v i c e - - >
< t x : a d v i c e i d = " t x A d v i c e " t r a n s a c t i o n - m a n a g e r = " t x M a n a g e r " >
< ! - - s e m a n t i c a d e l l a t r a n s a z i o n e - - >
< t x : a t t r i b u t e s >
< ! - - t u t t i i m e t o d i c h e i n i z i a n o c o n ' g e t ' s o n o r e a d - o n l y - - >
< t x : m e t h o d n a m e = " g e t * " r e a d - o n l y = " t r u e " / >
< ! - - g l i a l t r i m e t o d i u s a n o i l s e t t a g g i o d i d e f a u l t - - >
< t x : m e t h o d n a m e = " * " / >
< / t x : a t t r i b u t e s >
< / t x : a d v i c e >
< ! - - D o b b i a m o a s s i c u r a r c i c h e l ' a d v i c e p a r t a p e r o g n i e s e c u z i o n e
d i o g n i o p e r a z i o n e d e f i n i t a n e l l ' i n t e r f a c c i a F o o S e r v i c e - - >
< a o p : c o n f i g >
< a o p : p o i n t c u t i d = " f o o S e r v i c e O p e r a t i o n "
e x p r e s s i o n = " e x e c u t i o n ( * x . y . s e r v i c e . F o o S e r v i c e . * ( . . ) ) " / >
< a o p : a d v i s o r a d v i c e - r e f = " t x A d v i c e " p o i n t c u t - r e f = " f o o S e r v i c e O p e r a t i o n " / >
< / a o p : c o n f i g >
< / b e a n s >
E s a m i n i a m o q u e s t a c o n g u r a z i o n e . V o g l i a m o r e n d e r e u n o g g e t t o d i s e r v i z i o , i l b e a n
f o o S e r v i c e , t r a n s a z i o n a l e . L a s e m a n t i c a d a a p p l i c a r e p e r l e t r a n s a z i o n i è i n c a p s u l a t a n e l l a
d e n i z i o n e < t x : a d v i c e / > . Q u e s t a d e n i z i o n e s i p u ò l e g g e r e i n q u e s t o m o d o : . . . t u t t i i m e t o -
d i c h e c o m i n c i a n o c o n g e t s o n o d a e s e g u i r e n e l c o n t e s t o d i u n a t r a n s a z i o n e r e a d - o n l y , e t u t t i
g l i a l t r i m e t o d i s o n o d a e s e g u i r e n e l c o n t e s t o d i d e a f u l t . .
L ' a t t r i b u t o t r a n s a c t i o n - m a n a g e r n e l l ' a d v i c e è c o n g u r a t o c o n i l n o m e d e l b e a n P l a t f o r m -
T r a n s a c t i o n M a n a g e r , c h e è q u e l l o c h e d e v e g e s t i r e l a t r a n s a z i o n e , i n q u e s t o c a s o t x M a n a g e r .
L a d e n i z i o n e < a o p : c o n g / > a s s i c u r a c h e l ' a d v i c e t r a n s a z i o n a l e d e n i t o d a l b e a n t x -
A d v i c e v i e n e e s e g u i t o n e i p u n t i a p p r o p r i a t i . P r i m a s i d e n i s c e u n p o i n t c u t c h e m a t c h a c o n
l ' e s e c u z i o n e d i o g n i o p e r a z i o n e d e n i t a n e l l ' i n t e r f a c c i a F o o S e r v i c e . P o i s i a s s o c i a i l p o i n t c u t
c o n i l t x A d v i c e .
U n r e q u i s i t o d i u s o è q u e l l o d i r e n d e r e t r a n s a z i o n a l e u n i n t e r o s t r a t o d e i s e r v i z i . L a m i g l i o r
v i a p e r f a r l o è s e m p l i c e m e n t e q u e l l a d i c a m b i a r e l ' e s p r e s s i o n e d e l p o i n t c u t p e r m a t c h a r e o g n i
o p e r a z i o n e c h e r i g u a r d i l o s t r a t o d e i s e r v i z i . P e r e s e m p i o :
< a o p : c o n f i g >
< a o p : p o i n t c u t i d = " f o o S e r v i c e M e t h o d s " e x p r e s s i o n = " e x e c u t i o n ( * x . y . s e r v i c e . * . * ( . . ) ) " / >
< a o p : a d v i s o r a d v i c e - r e f = " t x A d v i c e " p o i n t c u t - r e f = " f o o S e r v i c e M e t h o d s " / >
< / a o p : c o n f i g >
Q u e s t a c o n g u r a z i o n e v i s t a n o r a è u t i l i z z a t a d a S p r i n g p e r c r e a r e u n p r o x y t r a n s a z i o n a l e
a t t o r n o a l l ' o g g e t t o c r e a t o d a l l a d e n i z i o n e d e l b e a n f o o S e r v i c e .
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 76/86
C A P I T O L O 5 . G E S T I O N E D E L L E T R A N S A Z I O N I 6 9
5 . 3 . 3 R o l l b a c k
Q u e s t a s e z i o n e d e s c r i v e c o m e s i a p o s s i b i l e c o n t r o l l a r e i l r o l l b a c k d i u n a t r a n s a z i o n e i n m o d o
d i c h i a r a t i v o .
I l m o d o m i g l i o r e p e r c o m u n i c a r e a l c o n t a i n e r c o m e g e s t i r e i l r o l l b a c k è q u e l l o d i s o l l e v a r e
u n ' E x c e p t i o n d a c o d i c e c h e v i e n e e s e g u i t a n e l c o n t e s t o d i u n a t r a n s a z i o n e . S p r i n g c a t t u r e r à
o g n i E x c e p t i o n n o n g e s t i t a d e t e r m i n a n d o s e m a r c a r e l a t r a n s a z i o n e p e r i l r o l l b a c k o n o .
I n q u e s t a c o n g u r a z i o n e d i d e f a u l t , S p r i n g m a r c a p e r i l r o l l b a c k s o l o l e t r a n s a z i o n i c h e
s o l l e v a n o u n ' e c c e z i o n e u n c h e c k e d , o v v e r o q u a n d o v i e n e s o l l e v a t a u n ' e c c e z i o n e i s t a n z a o s o t -
t o c l a s s e d i R u n t i m e E x c e p t i o n . P e r l e e c c e z i o n i c h e c k e d n o n v i e n e a t t i v a t o n e s s u n r o l l b a c k d i
d e f a u l t .
E ' p o s s i b i l e c o n g u r a r e e s a t t a m e n t e p e r q u a l i e c c e z i o n i a t t i v a r e i l r o l l b a c k , i n c l u s e l e
e c c e z i o n i c h e c k e d . I l s e g u e n t e f r a m m e n t o X M L m o s t r a c o m e f a r e :
< t x : a d v i c e i d = " t x A d v i c e " t r a n s a c t i o n - m a n a g e r = " t x M a n a g e r " >
< t x : a t t r i b u t e s >
< t x : m e t h o d n a m e = " g e t * " r e a d - o n l y = " t r u e " r o l l b a c k - f o r = " N o P r o d u c t I n S t o c k E x c e p t i o n " / >
< t x : m e t h o d n a m e = " * " / >
< / t x : a t t r i b u t e s >
< / t x : a d v i c e >
E ' p o s s i b i l e s p e c i c a r e a n c h e l e r e g o l e p e r n o n a t t i v a r e i l r o l l b a c k , s e n o n s i v u o l e a n -
n u l l a r e l a t r a n s a z i o n e a l s o l l e v a m e n t o d i u n ' e c c e z i o n e . I l s e g u e n t e f r a m m e n t o X M L m o s t r a
u n e s e m p i o :
< t x : a d v i c e i d = " t x A d v i c e " >
< t x : a t t r i b u t e s >
< t x : m e t h o d n a m e = " u p d a t e S t o c k " n o - r o l l b a c k - f o r = " I n s t r u m e n t N o t F o u n d E x c e p t i o n " / >
< t x : m e t h o d n a m e = " * " / >
< / t x : a t t r i b u t e s >
< / t x : a d v i c e >
Q u a n d o c o e s i s t o n o e n t r a m b e l e n o t a z i o n i , l a p i ù s t r i n g e n t e è q u e l l a c h e v i n c e . V e d i a m o l o
n e l s e g u e n t e e s e m p i o :
< t x : a d v i c e i d = " t x A d v i c e " >
< t x : a t t r i b u t e s >
< t x : m e t h o d n a m e = " * "
r o l l b a c k - f o r = " T h r o w a b l e "
n o - r o l l b a c k - f o r = " I n s t r u m e n t N o t F o u n d E x c e p t i o n " / >
< / t x : a t t r i b u t e s >
< / t x : a d v i c e >
O g n i e c c e z i o n e t r a n n e q u e l l e d i t i p o I n s t r u m e n t N o t F o u n d E x c e p t i o n p r o v o c h e r a n n o u n
r o l l b a c k d e l l a t r a n s a z i o n e c h e l e h a s o l l e v a t e .
5 . 3 . 4 C o n g u r a z i o n e d i e r e n t i p e r b e a n d i e r e n t i
C o n s i d e r i a m o u n o s c e n a r i o d o v e s i h a u n c e r t o n u m e r o d i o g g e t t i n e l l o s t r a t o d e i s e r v i z i e s i
v o g l i o n o a p p l i c a r e r e g o l e t r a n s a z i o n a l i d i e r e n t i t r a i v a r i o g g e t t i i n q u e s t i o n e . E ' p o s s i b i l e
f a r l o d e n e n d o d i e r e n t i < a o p : a d v i s o r / > c o n d i e r e n t i p o i n t c u t .
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 77/86
C A P I T O L O 5 . G E S T I O N E D E L L E T R A N S A Z I O N I 7 0
A s s u m i a m o c h e t u t t i l e c l a s s i d i s e r v i z i o s o n o d e n i t e a l l ' i n t e r n o d e l p a c k a g e x . y . s e r v i c e .
P e r a v e r e u n a c o n g u r a z i o n e t r a n s a z i o n a l e d i d e f a u l t t u t t i i b e a n s c h e s o n o i s t a n z e d i c l a s s i
d e n i t e i n q u e s t o p a c k a g e ( e n e i s o t t o p a c k a g e ) e c h e h a n n o i n o m i c h e t e r m i n a n o c o n S e r v i c e ,
s i p u ò s c r i v e r e q u e l l o c h e s e g u e :
< a o p : c o n f i g >
< a o p : p o i n t c u t i d = " s e r v i c e O p e r a t i o n " e x p r e s s i o n = " e x e c u t i o n ( * x . y . s e r v i c e . . * S e r v i c e . * ( . . ) )
< a o p : a d v i s o r p o i n t c u t - r e f = " s e r v i c e O p e r a t i o n " a d v i c e - r e f = " t x A d v i c e " / >
< / a o p : c o n f i g >
< ! - - q u e s t i d u e b e a n s s a r a n n o t r a n s a z i o n a l i . . . - - >
< b e a n i d = " f o o S e r v i c e " c l a s s = " x . y . s e r v i c e . D e f a u l t F o o S e r v i c e " / >
< b e a n i d = " b a r S e r v i c e " c l a s s = " x . y . s e r v i c e . e x t r a s . S i m p l e B a r S e r v i c e " / >
< ! - - . . . e q u e s t i d u e n o - - >
< b e a n i d = " a n o t h e r S e r v i c e " c l a s s = " o r g . x y z . S o m e S e r v i c e " / > / / n o n è n e l p a c k a g e g i u s t o
< b e a n i d = " b a r M a n a g e r " c l a s s = " x . y . s e r v i c e . S i m p l e B a r M a n a g e r " / > / / n o n f i n i s c e c o n ' S e r v i c e '
< t x : a d v i c e i d = " t x A d v i c e " >
< t x : a t t r i b u t e s >
< t x : m e t h o d n a m e = " g e t * " r e a d - o n l y = " t r u e " / >
< t x : m e t h o d n a m e = " * " / >
< / t x : a t t r i b u t e s >
< / t x : a d v i c e >
L ' e s e m p i o c h e s e g u e m o s t r a c o m e r e a l i z z a r e d u e c o n g u r a z i o n e c o m p l e t a m e n t e d i e r e n t i .
< a o p : c o n f i g >
< a o p : p o i n t c u t i d = " d e f a u l t S e r v i c e O p e r a t i o n "
e x p r e s s i o n = " e x e c u t i o n ( * x . y . s e r v i c e . * S e r v i c e . * ( . . ) ) " / >
< a o p : p o i n t c u t i d = " n o T x S e r v i c e O p e r a t i o n "
e x p r e s s i o n = " e x e c u t i o n ( * x . y . s e r v i c e . d d l . D e f a u l t D d l M a n a g e r . * ( . . ) ) " / >
< a o p : a d v i s o r p o i n t c u t - r e f = " d e f a u l t S e r v i c e O p e r a t i o n " a d v i c e - r e f = " d e f a u l t T x A d v i c e " / >
< a o p : a d v i s o r p o i n t c u t - r e f = " n o T x S e r v i c e O p e r a t i o n " a d v i c e - r e f = " n o T x A d v i c e " / >
< / a o p : c o n f i g >
< ! - - q u e s t o b e a n s a r à t r a n s a z i o n a l e - - >
< b e a n i d = " f o o S e r v i c e " c l a s s = " x . y . s e r v i c e . D e f a u l t F o o S e r v i c e " / >
< ! - - a n c h e q u e s t o b e a n s a r à t r a n s a z i o n a l e , m a c o n u n a c o n f i g u r a z i o n e d i f f e r e n t e - - >
< b e a n i d = " a n o t h e r F o o S e r v i c e " c l a s s = " x . y . s e r v i c e . d d l . D e f a u l t D d l M a n a g e r " / >
< t x : a d v i c e i d = " d e f a u l t T x A d v i c e " >
< t x : a t t r i b u t e s >
< t x : m e t h o d n a m e = " g e t * " r e a d - o n l y = " t r u e " / >
< t x : m e t h o d n a m e = " * " / >
< / t x : a t t r i b u t e s >
< / t x : a d v i c e >
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 78/86
C A P I T O L O 5 . G E S T I O N E D E L L E T R A N S A Z I O N I 7 1
< t x : a d v i c e i d = " n o T x A d v i c e " >
< t x : a t t r i b u t e s >
< t x : m e t h o d n a m e = " * " p r o p a g a t i o n = " N E V E R " / >
< / t x : a t t r i b u t e s >
< / t x : a d v i c e >
5 . 3 . 5 < t x : a d v i c e / >
Q u e s t a s e z i o n e r i a s s u m e l e v a r i e c o n g u r a z i o n i c h e p o s s o n o e s s e r e s p e c i c a t e u s a n d o q u e s t o
t a g . L e i m p o s t a z i o n i d i d e f a u l t s o n o l e s e g u e n t i :
P r o p a g a t i o n è s e t t a t a c o m e R E Q U I R E D .
I s o l a t i o n è s e t t a t o c o m e D E F A U L T .
T r a s a c t i o n è s e t t a t o c o m e r e a d / w r i t e
T i m e o u t è s e t t a t o a l v a l o r e d i d e f a u l t d e l s i s t e m a d i t r a n s a z i o n e i n u s o , o p p u r e n o n è
s e t t a t o s e q u e s t a f u n z i o n a l i t à n o n è s u p p o r t a t a .
T u t t e l e t r a n s a z i o n i c h e s o l l e v a n o u n a R u n t i m e E x c e p t i o n v e n g o n o r o l l b a c k a t e , e t u t t e
l e e c c e z i o n i c h e c k e d n o .
Q u e s t i s e t t a g g i s i p o s s o n o c a m b i a r e . I v a r i a t t r i b u t i d e l l ' e l e m e n t o < t x : m e t h o d / > s o n o
r i a s s u n t i i n t a b e l l a 5 . 1 .
A t t r i b u t o R i c h i e s t o ? D e f a u l t D e s c r i z i o n e
n a m e s i N o m e d e l m e t o d o c h e s i v u o l e
a s s o c i a r e a d u n a o p i ù t r a n s a z i o n i
p r o p a g a t i o n n o R E Q U I R E D C o m p o r t a m e n t o d i p r o p a g a t i o n
i s o l a t i o n n o D E F A U L T L i v e l l o d i i s o l a t i o n
t i m e o u t n o - 1 T i m e o u t d e l l a t r a n s a z i o n e
r e a d - o n l y n o f a l s e L a t r a n s a z i o n e è r e a d - o n l y ?
r o l l b a c k - f o r n o E x c e p t i o n ( s ) c h e d e t e r m i n a n o r o l l b a c k
n o - r o l l b a c k - f o r n o E x c e p t i o n ( s ) c h e n o n d e t e r m i n a n o r o l l b a c k
T a b e l l a 5 . 1 : o p z i o n i d i < t x : m e t h o d / >
5 . 3 . 6 @ T r a n s a c t i o n a l
O l t r e a l l ' a p p r o c c i o d i c h i a r a t i v o , è p o s s i b i l e u t i l i z z a r e l e a n n o t a z i o n i . D i c h i a r a r e l e t r a n s a z i o n i
d i r e t t a m e n t e a l l ' i n t e r n o d e l c o d i c e J a v a p o n e q u e s t e d i c h i a r a z i o n i m o l t o v i c i n e a l c o d i c e .
L ' u s o d e l l ' a n n o t a z i o n e @ T r a n s a c t i o n a l è i l l u s t r a t o n e l s e g u e n t e e s e m p i o :
/ / l a c l a s s e c h e i m p l e m e n t a i l s e r v i z i o c h e v o g l i a m o r e n d e r e t r a n s a z i o n a l e
@ T r a n s a c t i o n a l
p u b l i c c l a s s D e f a u l t F o o S e r v i c e i m p l e m e n t s F o o S e r v i c e {
F o o g e t F o o ( S t r i n g f o o N a m e ) ;
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 79/86
C A P I T O L O 5 . G E S T I O N E D E L L E T R A N S A Z I O N I 7 2
F o o g e t F o o ( S t r i n g f o o N a m e , S t r i n g b a r N a m e ) ;
v o i d i n s e r t F o o ( F o o f o o ) ;
v o i d u p d a t e F o o ( F o o f o o ) ;
}
Q u a n d o t a l e b e a n è d e n i t o a l l ' i n t e r n o d e l c o n t a i n e r I o C , l ' i s t a n z a d e l b e a n p u ò e s s e r e
r e s a t r a n s a z i o n a l e a g g i u n g e n d o u n a r i g a a l l ' X M L :
< ! - - q u e s t o è l ' o g g e t t o c h e v o g l i a m o r e n d e r e t r a n s a z i o n a l e - - >
< b e a n i d = " f o o S e r v i c e " c l a s s = " x . y . s e r v i c e . D e f a u l t F o o S e r v i c e " / >
< ! - - a b i l i t a l a c o n f i g u r a z i o n e d e l l e t r a n s a z i o n i t r a m i t e a n n o t a z i o n i - - >
< t x : a n n o t a t i o n - d r i v e n t r a n s a c t i o n - m a n a g e r = " t x M a n a g e r " / >
< ! - - u n P l a t f o r m T r a n s a c t i o n M a n a g e r è r i c h i e s t o - - >
< b e a n i d = " t x M a n a g e r " c l a s s = " o r g . s p r i n g f r a m e w o r k . j d b c . d a t a s o u r c e . D a t a S o u r c e T r a n s a c t i o n M a n a g e
< p r o p e r t y n a m e = " d a t a S o u r c e " r e f = " d a t a S o u r c e " / >
< / b e a n >
Q u a n d o s i u s a n o i p r o x y , s i d o v r e b b e a p p l i c a r e l ' a n n o t a z i o n e @ T r a n s a c t i o n a l s o l o s u i
m e t o d i p u b b l i c i . S e l o s i a p p l i c a s u m e t o d i p r o t e t t i o p r i v a t i , n o n v i e n e s o l l e v a t o n e s s u n
e r r o r e , m a i l m e t o d o a n n o t a t o n o n m o s t r a l a p r o p r i a c o n g u r a z i o n e t r a n s a z i o n a l e . V a l u t a r e
i n q u e s t o c a s o l ' u s o d i A s p e c t J .
E ' p o s s i b i l e p i a z z a r e q u e s t a a n n o t a z i o n e p r i m a d e l l a d e n i z i o n e d i u n ' i n t e r f a c c i a , d i u n
m e t o d o d i u n ' i n t e r f a c c i a , d e l l a d e n i z i o n e d i u n a c l a s s e o d i u n m e t o d o p u b b l i c o d i u n a c l a s s e .
C o m u n q u e , l a s o l a p r e s e n z a d e l l ' a n n o t a z i o n e n o n è s u c i e n t e a d a t t i v a r e i l c o m p o r t a m e n t o
t r a n s a z i o n a l e . L ' a n n o t a z i o n e è i n f a t t i u n s e m p l i c e m e t a d a t o p e r c o n g u r a r e i n m o d o a p p r o -
p r i a t o i b e a n s c o n t a l e c o m p o r t a m e n t o . N e l l ' e s e m p i o a p p e n a v i s t o , t a l e c o m p o r t a m e n t o è p o i
a b i l i t a t o d a l l ' e l e m e n t o < t x : a n n o t a t i o n - d r i v e n / > .
S i c o n s i g l i a d i a n n o t a r e l e c l a s s i c o n c r e t e ( o i m e t o d i d i c l a s s i c o n c r e t e ) e n o n l e i n t e r f a c c e
( o i m e t o d i a l l ' i n t e r n o d e l l e i n t e r f a c c e ) .
I n t a b e l l a 5 . 2 s o n o r i p o r t a t e l e c o n g u r a z i o n i d e l l ' e l e m e n t o < t x : a n n o t a t i o n - d r i v e n / > .
E ' p o s s i b i l e a n n o t a r e s i a u n a c l a s s e s i a i s u o i m e t o d i i n t e r n i , p e r d a r e d i v e r s i l i v e l l i d i
c o n g u r a z i o n e . C o n s i d e r i a m o i l s e g u e n t e e s e m p i o :
@ T r a n s a c t i o n a l ( r e a d O n l y = t r u e )
p u b l i c c l a s s D e f a u l t F o o S e r v i c e i m p l e m e n t s F o o S e r v i c e {
p u b l i c F o o g e t F o o ( S t r i n g f o o N a m e ) {
/ / f a q u a l c o s a
}
/ / q u e s t a c o n f i g u r a z i o n e h a p r e c e d e n z a
@ T r a n s a c t i o n a l ( r e a d O n l y = f a l s e , p r o p a g a t i o n = P r o p a g a t i o n . R E Q U I R E S _ N E W )
p u b l i c v o i d u p d a t e F o o ( F o o f o o ) {
/ / f a q u a l c o s a
}
}
Q u a n d o v i e n e c h i a m a t o i l m e t o d o g e t F o o ( . . ) , v a l e l a r e g o l a g e n e r a l e a l l ' i n i z i o d e l l a d e n i z i o n e
d e l l a c l a s s e . Q u a n d o i n v e c e v i e n e c h i a m a t o i l m e t o d o u p d a t e F o o ( . . ) , p o i c h è a q u e s t o m e t o d o
è s t a t a a p p l i c a t a u n a r e g o l a , q u e s t a h a p r e c e d e n z a s u q u e l l a g e n e r a l e .
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 80/86
C A P I T O L O 5 . G E S T I O N E D E L L E T R A N S A Z I O N I 7 3
A t t r i b u t o D e f a u l t D e s c r i z i o n e
t r a n s a c t i o n - m a n a g e r t r a n s a c t i o n M a n a g e r N o m e d e l t r a n s a c t i o n m a n a g e r c h e s i
i n t e n d e u s a r e .
m o d e p r o x y I l c o m p o r t a m e n t o d i d e f a u l t f a s ì
c h e v e n g a u s a t o i l m e c c a n i s m o d e i
p r o x y d i S p r i n g A O P . L a m o d a l i t à
a l t e r n a t i v a , a s p e c t j , i n d i c a
c h e i l m e c c a n i s m o u s a t o s a r à q u e l l o
b a s a t o s u a s p e t t i c o s t r u i t i c o n A s p e c t J .
p r o x y - t a r g e t - c l a s s f a l s e E ' a p p l i c a t o s o l o s e m o d e = p r o x y .
C o n t r o l l a i l t i p o d i p r o x y c h e v i e n e
c r e a t o s u i b e a n a n n o t a t i c o n
@ T r a n s a c t i o n a l . Q u a n d o l ' a t t r i b u t o
è s e t t a t o a t r u e v e n g o n o
u t i l i z z a t i i p r o x y c l a s s - b a s e d .
Q u a n d o è s e t t a t o a f a l s e
v e n g o n o u t i l i z z a t i i p r o x y J D K
s t a n d a r d b a s a t i s u l l e i n t e r f a c c e .
o r d e r O r d e r e d . L O W E S T _ P R E C E D E N C E D e n i s c e l ' o r d i n e d i p r e c e d e n z e
t r a g l i a d v i c e d a e s e g u i r e s u u n
b e a n m a r c a t o c o m e @ T r a n s a c t i o n a l .
T a b e l l a 5 . 2 : o p z i o n i d i < t x : a n n o t a t i o n - d r i v e n / >
5 . 3 . 6 . 1 C o n g u r a z i o n e d i @ T r a n s a c t i o n a l
L e i m p o s t a z i o n i d i d e f a u l t d e l l ' a n n o t a t i o n @ T r a n s a c t i o n a l s o n o l e s e g u e n t i :
P r o p a g a t i o n è s e t t a t a P R O P A G A T O N _ R E Q U I R E D
I s o l a t i o n è s e t t a t o I S O L A T I O N _ D E F A U T
T r a n s a c t i o n è s e t t a t o c o m e r e a d / w r i t e
T i m e o u t è s e t t a t o a q u e l l o d i d e f a u l t d e l s i s t e m a t r a n s a z i o n a l e i n u s o , o p p u r e n o n è
s e t t a t o s e n o n è s u p p o r t a t o .
T u t t e l e t r a n s a z i o n i c h e s o l l e v a n o u n a R u n t i m e E x c e p t i o n v e n g o n o r o l l b a c k a t e , e t u t t e
l e e c c e z i o n i c h e c k e d n o .
I n t a b e l l a 5 . 3 s o n o r i p o r t a t e t u t t i i s e t t a g g i d e i v a r i a t t r i b u t i d i @ T r a n s a c t i o n a l .
5 . 3 . 7 P r o p a g a z i o n e d e l l e t r a n s a z i o n i
5 . 3 . 7 . 1 R e q u i r e d
Q u a n d o p r o p a g a t i o n è s e t t a t o c o m e P R O P A G A T I O N _ R E Q U I R E D , v i e n e c r e a t o u n o s c o p e
l o g i c o d i t r a n s a z i o n e p e r o g n i m e t o d o a c u i q u e s t o s e t t a g g i o è a p p l i c a t o . O g n u n o d i q u e s t i
s c o p e d e t e r m i n a l o s t a t u s r o l l b a c k - o n l y i n m a n i e r a i n d i v i d u a l e , c o n l o s c o p e t r a n s a z i o n a l e
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 81/86
C A P I T O L O 5 . G E S T I O N E D E L L E T R A N S A Z I O N I 7 4
A t t r i b u t o T i p o D e s c r i z i o n e
p r o p a g a t i o n e n u m : P r o p a g a t i o n O p z i o n a l e
i s o l a t i o n e n u m : I s o l a t i o n O p z i o n a l e
r e a d O n l y b o o l e a n r e a d / w r i t e v s r e a d o n l y
t i m e o u t i n t ( i n s e c o n d i ) t i m e o u t
r o l l b a c k F o r A r r a y d i C l a s s c h e A r r a y d i e c c e z i o n i c h e p o s s o n o
d e v o n o e s s e r e d e r i v a t i d a p o r t a r e a l r o l l b a c k .
T h r o w a b l e
r o l l b a c k F o r C l a s s n a m e A r r a y d i C l a s s c h e A r r a y d i n o m i d i e c c e z i o n i c h e
d e v o n o e s s e r e d e r i v a t i d a p o s s o n o p o r t a r e a l r o l l b a c k .
T h r o w a b l e
n o R o l l b a c k F o r A r r a y d i C l a s s c h e A r r a y d i e c c e z i o n i c h e n o n p o r t a n o
d e v o n o e s s e r e d e r i v a t i d a a l r o l l b a c k .
T h r o w a b l e
n o R o l l b a c k F o r C l a s s n a m e A r r a y d i C l a s s c h e A r r a y d i n o m i d i e c c e z i o n i c h e n o n
d e v o n o e s s e r e d e r i v a t i d a p o r t a n o a l r o l l b a c k .
T h r o w a b l e
T a b e l l a 5 . 3 : o p z i o n i d i < t x : a n n o t a t i o n - d r i v e n / >
e s t e r n o i n d i p e n d e n t e d a q u e l l o i n t e r n o . N a t u r a l m e n t e , n e l c a s o d e l c o m p o r t a m e n t o s t a n -
d a r d d i P R O P A G A T I O N _ R E Q U I R E D , t u t t i q u e s t i s c o p e s a r a n n o m a p p a t i v e r s o l a s t e s s a
t r a n s a z i o n e s i c a . E ' o v v i o c h e u n r o l l b a c k d e l l a t r a n s a z i o n e i n t e r n a a v r à e e t t o a n c h e s u l l a
p o s s i b i l i t à d i c o m m i t d e l l a t r a n s a z i o n e e s t e r n a .
5 . 3 . 7 . 2 R e q u i r e s N e w
P R O P A G A T I O N _ R E Q U I R E S _ N E W a d i e r e n z a d i P R O P A G A T I O N _ R E Q U I R E D , u t i l i z -
z a u n a t r a n s a z i o n e c o m p l e t a m e n t e i n d i p e n d e n t e p e r o g n i s c o p e . I n q u e s t o c a s o , l e t r a n s a z i o n i
s i c h e s o n o d i e r e n t i e q u i n d i p o s s o n o c o m m i t t a r e o e e t t u a r e u n r o l l b a c k i n m a n i e r a i n -
d i p e n d e n t e .
5 . 3 . 7 . 3 N e s t e d
P R O P A G A T I O N _ N E S T E D u s a u n a s i n g o l a t r a n s a z i o n e s i c a c o n p i ù s a v e p o i n t s v e r s o i q u a l i
è p o s s i b i l e f a r e i l r o l l b a c k . Q u e s t o c o m p o r t a m e n t o è p o s s i b i l e s o l o c o n r i s o r s e J D B C .
5 . 3 . 8 A d v i s e p e r l e t r a n s a z i o n i
S u p p o n i a m o d i v o l e r e s e g u i r e s i a u n a d v i c e t r a n s a z i o n a l e s i a u n a d v i c e c h e g e s t i s c a u n t i m e r
p e r v a l u t a r e i t e m p i d e l l e t r a n s a z i o n i . C o m e s i p u ò f a r e u t i l i z z a n d o l ' e l e m e n t o < t x : a n n o t a t i o n -
d r i v e n / > ?
Q u a n d o i n v o c h i a m o i l m e t o d o u p d a t e F o o ( F o o ) n o i v o g l i a m o v e d e r e l a s e g u e n t e s e q u e n z a
d i a z i o n i :
1 . V i e n e e s e g u i t o l ' a s p e t t o c o n g u r a t o p e r g e s t i r e i l t i m e r .
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 82/86
C A P I T O L O 5 . G E S T I O N E D E L L E T R A N S A Z I O N I 7 5
2 . V i e n e e s e g u i t o l ' a d v i c e t r a n s a z i o n a l e .
3 . V i e n e e s e g u i t o i l m e t o d o u p d a t e F o o ( . . ) .
4 . V i e n e c o m m i t t a t a l a t r a n s a z i o n e .
5 . L ' a s p e t t o i n i z i a l e r i p o r t a l ' e s a t t a d u r a t a d e l l a t r a n s a z i o n e .
Q u e s t o è i l c o d i c e d ' e s e m p i o p e r l a s i t u a z i o n e s o p r a d e s c r i t t a . L e p r e c e d e n z e d e g l i a d v i c e
s o n o c o n t r o l l a t i t r a m i t e l ' i n t e r f a c c a O r d e r e d .
p a c k a g e x . y ;
i m p o r t o r g . a s p e c t j . l a n g . P r o c e e d i n g J o i n P o i n t ;
i m p o r t o r g . s p r i n g f r a m e w o r k . u t i l . S t o p W a t c h ;
i m p o r t o r g . s p r i n g f r a m e w o r k . c o r e . O r d e r e d ;
p u b l i c c l a s s S i m p l e P r o f i l e r i m p l e m e n t s O r d e r e d {
p r i v a t e i n t o r d e r ;
/ / c i p e r m e t t e d i c o n t r o l l a r e l e p r e c e d e n z e d e g l i a d v i c e
p u b l i c i n t g e t O r d e r ( ) {
r e t u r n t h i s . o r d e r ;
}
p u b l i c v o i d s e t O r d e r ( i n t o r d e r ) {
t h i s . o r d e r = o r d e r ;
}
/ / q u e s t o m e t o d o è u n a d v i c e ' a r o u n d '
p u b l i c O b j e c t p r o f i l e ( P r o c e e d i n g J o i n P o i n t c a l l ) t h r o w s T h r o w a b l e {
O b j e c t r e t u r n V a l u e ;
S t o p W a t c h c l o c k = n e w S t o p W a t c h ( g e t C l a s s ( ) . g e t N a m e ( ) ) ;
t r y {
c l o c k . s t a r t ( c a l l . t o S h o r t S t r i n g ( ) ) ;
r e t u r n V a l u e = c a l l . p r o c e e d ( ) ;
} f i n a l l y {
c l o c k . s t o p ( ) ;
S y s t e m . o u t . p r i n t l n ( c l o c k . p r e t t y P r i n t ( ) ) ;
}
r e t u r n r e t u r n V a l u e ;
}
}
Q u e s t o è i l l e d i c o n g u r a z i o n e d i S p r i n g .
< ? x m l v e r s i o n = " 1 . 0 " e n c o d i n g = " U T F - 8 " ? >
< b e a n s x m l n s = " h t t p : / / w w w . s p r i n g f r a m e w o r k . o r g / s c h e m a / b e a n s "
x m l n s : x s i = " h t t p : / / w w w . w 3 . o r g / 2 0 0 1 / X M L S c h e m a - i n s t a n c e "
x m l n s : a o p = " h t t p : / / w w w . s p r i n g f r a m e w o r k . o r g / s c h e m a / a o p "
x m l n s : t x = " h t t p : / / w w w . s p r i n g f r a m e w o r k . o r g / s c h e m a / t x "
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 83/86
C A P I T O L O 5 . G E S T I O N E D E L L E T R A N S A Z I O N I 7 6
x s i : s c h e m a L o c a t i o n = "
h t t p : / / w w w . s p r i n g f r a m e w o r k . o r g / s c h e m a / b e a n s
h t t p : / / w w w . s p r i n g f r a m e w o r k . o r g / s c h e m a / b e a n s / s p r i n g - b e a n s - 3 . 0 . x s d
h t t p : / / w w w . s p r i n g f r a m e w o r k . o r g / s c h e m a / t x
h t t p : / / w w w . s p r i n g f r a m e w o r k . o r g / s c h e m a / t x / s p r i n g - t x - 3 . 0 . x s d
h t t p : / / w w w . s p r i n g f r a m e w o r k . o r g / s c h e m a / a o p
h t t p : / / w w w . s p r i n g f r a m e w o r k . o r g / s c h e m a / a o p / s p r i n g - a o p - 3 . 0 . x s d " >
< b e a n i d = " f o o S e r v i c e " c l a s s = " x . y . s e r v i c e . D e f a u l t F o o S e r v i c e " / >
< ! - - q u e s t o è l ' a s p e t t o , d a e s e g u i r e P R I M A d e l l ' a d i v i c e t r a n s a z i o n a l e - - >
< b e a n i d = " p r o f i l e r " c l a s s = " x . y . S i m p l e P r o f i l e r " >
< p r o p e r t y n a m e = " o r d e r " v a l u e = " 1 " / >
< / b e a n >
< t x : a n n o t a t i o n - d r i v e n t r a n s a c t i o n - m a n a g e r = " t x M a n a g e r " o r d e r = " 2 0 0 " / >
< a o p : c o n f i g >
< a o p : a s p e c t i d = " p r o f i l i n g A s p e c t " r e f = " p r o f i l e r " >
< a o p : p o i n t c u t i d = " s e r v i c e M e t h o d W i t h R e t u r n V a l u e "
e x p r e s s i o n = " e x e c u t i o n ( ! v o i d x . y . . * S e r v i c e . * ( . . ) ) " / >
< a o p : a r o u n d m e t h o d = " p r o f i l e " p o i n t c u t - r e f = " s e r v i c e M e t h o d W i t h R e t u r n V a l u e " / >
< / a o p : a s p e c t >
< / a o p : c o n f i g >
< b e a n i d = " d a t a S o u r c e "
c l a s s = " o r g . a p a c h e . c o m m o n s . d b c p . B a s i c D a t a S o u r c e "
d e s t r o y - m e t h o d = " c l o s e " >
< p r o p e r t y n a m e = " d r i v e r C l a s s N a m e " v a l u e = " $ { d r i v e r } " / >
< p r o p e r t y n a m e = " u r l " v a l u e = " $ { u r l } " / >
< p r o p e r t y n a m e = " u s e r n a m e " v a l u e = " $ { u s e r n a m e } " / >
< p r o p e r t y n a m e = " p a s s w o r d " v a l u e = " $ { p a s s w o r d } " / >
< / b e a n >
< b e a n i d = " t x M a n a g e r "
c l a s s = " o r g . s p r i n g f r a m e w o r k . j d b c . d a t a s o u r c e . D a t a S o u r c e T r a n s a c t i o n M a n a g e r " >
< p r o p e r t y n a m e = " d a t a S o u r c e " r e f = " d a t a S o u r c e " / >
< / b e a n >
< / b e a n s >
I l r i s u l t a t o d i q u e s t a c o n g u r a z i o n e è u n b e a n f o o S e r v i c e c h e h a u n a s p e t t o t r a n s a z i o n a l e
e u n a s p e t t o d i t i m i n g a p p l i c a t i n e l l ' o r d i n e d e s i d e r a t o . E ' p o s s i b i l e , o v v i a m e n t e , c o n g u r a r e
u n q u a l u n q u e n u m e r o d i a s p e t t i i n q u e s t o m o d o .
L ' e s e m p i o c h e s e g u e f a e s a t t a m e n t e l a s t e s s a c o s a , m a u s a n d o s o l o l ' a p p r o c c i o d i c h i a r a t i v o
X M L .
< ? x m l v e r s i o n = " 1 . 0 " e n c o d i n g = " U T F - 8 " ? >
< b e a n s x m l n s = " h t t p : / / w w w . s p r i n g f r a m e w o r k . o r g / s c h e m a / b e a n s "
x m l n s : x s i = " h t t p : / / w w w . w 3 . o r g / 2 0 0 1 / X M L S c h e m a - i n s t a n c e "
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 84/86
C A P I T O L O 5 . G E S T I O N E D E L L E T R A N S A Z I O N I 7 7
x m l n s : a o p = " h t t p : / / w w w . s p r i n g f r a m e w o r k . o r g / s c h e m a / a o p "
x m l n s : t x = " h t t p : / / w w w . s p r i n g f r a m e w o r k . o r g / s c h e m a / t x "
x s i : s c h e m a L o c a t i o n = "
h t t p : / / w w w . s p r i n g f r a m e w o r k . o r g / s c h e m a / b e a n s
h t t p : / / w w w . s p r i n g f r a m e w o r k . o r g / s c h e m a / b e a n s / s p r i n g - b e a n s - 3 . 0 . x s d
h t t p : / / w w w . s p r i n g f r a m e w o r k . o r g / s c h e m a / t x
h t t p : / / w w w . s p r i n g f r a m e w o r k . o r g / s c h e m a / t x / s p r i n g - t x - 3 . 0 . x s d
h t t p : / / w w w . s p r i n g f r a m e w o r k . o r g / s c h e m a / a o p
h t t p : / / w w w . s p r i n g f r a m e w o r k . o r g / s c h e m a / a o p / s p r i n g - a o p - 3 . 0 . x s d " >
< b e a n i d = " f o o S e r v i c e " c l a s s = " x . y . s e r v i c e . D e f a u l t F o o S e r v i c e " / >
< ! - - a d v i c e t i m e r - - >
< b e a n i d = " p r o f i l e r " c l a s s = " x . y . S i m p l e P r o f i l e r " >
< p r o p e r t y n a m e = " o r d e r " v a l u e = " 1 " / >
< / b e a n >
< a o p : c o n f i g >
< a o p : p o i n t c u t i d = " e n t r y P o i n t M e t h o d " e x p r e s s i o n = " e x e c u t i o n ( * x . y . . * S e r v i c e . * ( . . ) ) " / >
< a o p : a d v i s o r a d v i c e - r e f = " t x A d v i c e " p o i n t c u t - r e f = " e n t r y P o i n t M e t h o d " o r d e r = " 2 " / >
< a o p : a s p e c t i d = " p r o f i l i n g A s p e c t " r e f = " p r o f i l e r " >
< a o p : p o i n t c u t i d = " s e r v i c e M e t h o d W i t h R e t u r n V a l u e "
e x p r e s s i o n = " e x e c u t i o n ( ! v o i d x . y . . * S e r v i c e . * ( . . ) ) " / >
< a o p : a r o u n d m e t h o d = " p r o f i l e " p o i n t c u t - r e f = " s e r v i c e M e t h o d W i t h R e t u r n V a l u e " / >
< / a o p : a s p e c t >
< / a o p : c o n f i g >
< t x : a d v i c e i d = " t x A d v i c e " t r a n s a c t i o n - m a n a g e r = " t x M a n a g e r " >
< t x : a t t r i b u t e s >
< t x : m e t h o d n a m e = " g e t * " r e a d - o n l y = " t r u e " / >
< t x : m e t h o d n a m e = " * " / >
< / t x : a t t r i b u t e s >
< / t x : a d v i c e >
< / b e a n s >
5 . 4 G e s t i o n e p r o g r a m m a t i c a d e l l e t r a n s a z i o n i
5 . 4 . 1 U s a r e i l P l a t f o r m T r a n s a c t i o n M a n a g e r
P e r g e s t i r e l e t r a n s a z i o n i è p o s s i b i l e u s a r e i l o r g . s p r i n g f r a m e w o r k . t r a n s a c t i o n . P l a t f o r m T r a n s a c t i o n M a n a g e r
d i r e t t a m e n t e . B i s o g n a s e m p l i c e m e n t e p a s s a r e l ' i m p l e m e n t a z i o n e d e l P l a t f o r m T r a n s a c t i o n -
M a n a g e r a l b e a n c h e l o d e v e u s a r e , t r a m i t e u n r i f e r i m e n t o . P o i , è s u c i e n t e u s a r e i l T r a n s -
a c t i o n D e n i t i o n e i l T r a n s a c t i o n S t a t u s p e r i n i z i a r e l a t r a n s a z i o n e , p e r i l r o l l b a c k e p e r i l
c o m m i t .
D e f a u l t T r a n s a c t i o n D e f i n i t i o n d e f = n e w D e f a u l t T r a n s a c t i o n D e f i n i t i o n ( ) ;
d e f . s e t N a m e ( " S o m e T x N a m e " ) ;
d e f . s e t P r o p a g a t i o n B e h a v i o r ( T r a n s a c t i o n D e f i n i t i o n . P R O P A G A T I O N _ R E Q U I R E D ) ;
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 85/86
C A P I T O L O 5 . G E S T I O N E D E L L E T R A N S A Z I O N I 7 8
T r a n s a c t i o n S t a t u s s t a t u s = t x M a n a g e r . g e t T r a n s a c t i o n ( d e f ) ;
t r y {
/ / f a i q u a l c o s a
t x M a n a g e r . c o m m i t ( s t a t u s ) ;
} c a t c h ( M y E x c e p t i o n e x ) {
t x M a n a g e r . r o l l b a c k ( s t a t u s ) ;
t h r o w e x ;
}
5 . 5 G e s t i o n e d i c h i a r a t i v a V s g e s t i o n e p r o g r a m m a t i c a
L a s c e l t a c a d e s u l l ' u n o o s u l l ' a l t r o a p p r o c c i o p r i n c i p a l m e n t e i n b a s e a l n u m e r o d i m e t o d i
t r a n s a z i o n a l i d e l l a n o s t r a a p p l i c a z i o n i . S e s o n o p o c h i , p u ò e s s e r e u n a b u o n a i d e a u t i l i z z a r e l a
g e s t i o n e p r o g r a m m a t i c a . A l c o n t r a r i o , s e l e t r a n s a z i o n i s o n o m o l t e , l ' a p p r o c c i o d i c h i a r a t i v o è
s e n z ' a l t r o p i ù s e m p l i c e e c o m o d o .
5/13/2018 Manuale Spring3 - slidepdf.com
http://slidepdf.com/reader/full/manuale-spring3 86/86
B i b l i o g r a a
[ b o o ] W i k i p e d i a .
[ b o o 0 9 ] S p r i n g - J a v a A p p l i c a t i o n F r a m e w o r k - R e f e r e n c e D o c u m e n t a t i o n . S p r i n g S o u r c e ,
2 0 0 9 .
[ T e a 0 3 ] T h e A s p e c t J T e a m . T h e A s p e c t J P r o g r a m m i n g G u i d e . X e r o x C o r p o r a t i o n , 2 0 0 3 .
7 9