SlideShare a Scribd company logo
1 of 70
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 1 / 41
Programowanie Komponentowe 
Wykład #B: Komponentowe aspekty Springa 
Mikołaj Olszewski 
Wydział Zastosowan Informatyki i Matematyki 
Szkoły Głównej Gospodarstwa Wiejskiego 
30.12.2014 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 2 / 41
Plan wykładu 
1 Automatyzacja obsługi komponentów 
Automatyczne wiazanie 
Automatyczne definiowanie 
2 Programowanie aspektowe 
Wprowadzenie do Spring AOP 
Deklarowanie aspektów 
3 Podsumowanie 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 3 / 41
Automatyzacja obsługi komponentów 
Plan wykładu 
1 Automatyzacja obsługi komponentów 
Automatyczne wiazanie 
Automatyczne definiowanie 
2 Programowanie aspektowe 
Wprowadzenie do Spring AOP 
Deklarowanie aspektów 
3 Podsumowanie 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 4 / 41
Automatyzacja obsługi komponentów 
Konfiguracja w XML-u 
Niezaleznosc od implementacji + 
Mozliwosc rekonfiguracji bez ponownej kompilacji + 
Mała czytelnosc - 
Trudne do utrzymania w duzych projektach - 
(mozliwosc dywersyfikacji plików) 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 5 / 41
Automatyzacja obsługi komponentów 
Konfiguracja w XML-u 
Niezaleznosc od implementacji + 
Mozliwosc rekonfiguracji bez ponownej kompilacji + 
Mała czytelnosc - 
Trudne do utrzymania w duzych projektach - 
(mozliwosc dywersyfikacji plików) 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 5 / 41
Automatyzacja obsługi komponentów 
Konfiguracja w XML-u 
Niezaleznosc od implementacji + 
Mozliwosc rekonfiguracji bez ponownej kompilacji + 
Mała czytelnosc - 
Trudne do utrzymania w duzych projektach - 
(mozliwosc dywersyfikacji plików) 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 5 / 41
Automatyzacja obsługi komponentów 
Konfiguracja w XML-u 
Niezaleznosc od implementacji + 
Mozliwosc rekonfiguracji bez ponownej kompilacji + 
Mała czytelnosc - 
Trudne do utrzymania w duzych projektach - 
(mozliwosc dywersyfikacji plików) 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 5 / 41
Automatyzacja obsługi komponentów Automatyczne wiazanie 
Rodzaje dopasowan 
byName (id _ name) 
byType (0 _ 1) 
constructor (1) 
autodetect (constructor, byType) 
Uzycie 
<bean ... autowire="<type>" /> 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 6 / 41
Automatyzacja obsługi komponentów Automatyczne wiazanie 
Rodzaje dopasowan 
byName (id _ name) 
byType (0 _ 1) 
constructor (1) 
autodetect (constructor, byType) 
Uzycie 
<bean ... autowire="<type>" /> 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 6 / 41
Automatyzacja obsługi komponentów Automatyczne wiazanie 
Wiazanie po nazwie 
1 <bean i d=” super−s t r e n g t h ” c l a s s=”pk . demo . s p r i n g . EnormousStrength ”/> 
2 
3 <bean i d=” h e r c u l e s ” c l a s s=”pk . demo . s p r i n g . DemiGod”> 
4 <p r o p e r t y name=”name” v a l u e=” He r c u l e s ” /> 
5 <p r o p e r t y name=” power ” r e f=” super−s t r e n g t h ” /> 
6 </ bean> 
1 <bean i d=” power ” c l a s s=”pk . demo . s p r i n g . EnormousStrength ”/> 
2 
3 <bean i d=” h e r c u l e s ” c l a s s=”pk . demo . s p r i n g . DemiGod” a u t owi r e=”byName 
”> 
4 <p r o p e r t y name=”name” v a l u e=” He r c u l e s ” /> 
5 </ bean> 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 7 / 41
Automatyzacja obsługi komponentów Automatyczne wiazanie 
Wiazanie po nazwie 
1 <bean i d=” super−s t r e n g t h ” c l a s s=”pk . demo . s p r i n g . EnormousStrength ”/> 
2 
3 <bean i d=” h e r c u l e s ” c l a s s=”pk . demo . s p r i n g . DemiGod”> 
4 <p r o p e r t y name=”name” v a l u e=” He r c u l e s ” /> 
5 <p r o p e r t y name=” power ” r e f=” super−s t r e n g t h ” /> 
6 </ bean> 
1 <bean i d=” power ” c l a s s=”pk . demo . s p r i n g . EnormousStrength ”/> 
2 
3 <bean i d=” h e r c u l e s ” c l a s s=”pk . demo . s p r i n g . DemiGod” a u t owi r e=”byName 
”> 
4 <p r o p e r t y name=”name” v a l u e=” He r c u l e s ” /> 
5 </ bean> 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 7 / 41
Automatyzacja obsługi komponentów Automatyczne wiazanie 
Wiazanie po typie 
1 <bean i d=” super−s t r e n g t h ” c l a s s=”pk . demo . s p r i n g . EnormousStrength ”/> 
2 
3 <bean i d=” h e r c u l e s ” c l a s s=”pk . demo . s p r i n g . DemiGod” a u t owi r e=” byType 
”> 
4 <p r o p e r t y name=”name” v a l u e=” He r c u l e s ” /> 
5 </ bean> 
Jak sobie radzic z mnogoscia implementacji? 
primary="false" 
autowire-candidate="false" 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 8 / 41
Automatyzacja obsługi komponentów Automatyczne wiazanie 
Wiazanie po typie 
1 <bean i d=” super−s t r e n g t h ” c l a s s=”pk . demo . s p r i n g . EnormousStrength ”/> 
2 
3 <bean i d=” h e r c u l e s ” c l a s s=”pk . demo . s p r i n g . DemiGod” a u t owi r e=” byType 
”> 
4 <p r o p e r t y name=”name” v a l u e=” He r c u l e s ” /> 
5 </ bean> 
Jak sobie radzic z mnogoscia implementacji? 
primary="false" 
autowire-candidate="false" 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 8 / 41
Automatyzacja obsługi komponentów Automatyczne wiazanie 
Pozostałe rodzaje wiazan 
1 <bean i d=” super−s t r e n g t h ” c l a s s=”pk . demo . s p r i n g . EnormousStrength ”/> 
2 
3 <bean i d=” h e r c u l e s ” c l a s s=”pk . demo . s p r i n g . DemiGod” a u t owi r e=” 
c o n s t r u c t o r ” /> 
1 <bean i d=” super−s t r e n g t h ” c l a s s=”pk . demo . s p r i n g . EnormousStrength ”/> 
2 
3 <bean i d=” h e r c u l e s ” c l a s s=”pk . demo . s p r i n g . DemiGod” a u t owi r e=” 
a u t o d e t e c t ” /> 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 9 / 41
Automatyzacja obsługi komponentów Automatyczne wiazanie 
Pozostałe rodzaje wiazan 
1 <bean i d=” super−s t r e n g t h ” c l a s s=”pk . demo . s p r i n g . EnormousStrength ”/> 
2 
3 <bean i d=” h e r c u l e s ” c l a s s=”pk . demo . s p r i n g . DemiGod” a u t owi r e=” 
c o n s t r u c t o r ” /> 
1 <bean i d=” super−s t r e n g t h ” c l a s s=”pk . demo . s p r i n g . EnormousStrength ”/> 
2 
3 <bean i d=” h e r c u l e s ” c l a s s=”pk . demo . s p r i n g . DemiGod” a u t owi r e=” 
a u t o d e t e c t ” /> 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 9 / 41
Automatyzacja obsługi komponentów Automatyczne wiazanie 
Dodatkowe mozliwosci wiazan 
Domyslny rodzaj wiazania (w pliku) 
<beans ... default-autowire="<type>" > ... </beans> 
Nadpisywanie 
jawna deklaracja argumentu 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 10 / 41
Automatyzacja obsługi komponentów Automatyczne wiazanie 
Rozpoznawanie adnotacji 
1 <? xml v e r s i o n=” 1 . 0 ” enc oding=”UTF−8” ?> 
2 <beans xmlns=” h t t p : //www. s p r i n g f r amewo r k . org / schema / beans ” 
3 xml n s : x s i=” h t t p : //www.w3 . org /2001/XMLSchema−i n s t a n c e ” 
4 xml n s : c o n t e x t=” h t t p : //www. s p r i n g f r amewo r k . org / schema / c o n t e x t 
” 
5 x s i : s c h ema L o c a t i o n=” h t t p : //www. s p r i n g f r amewo r k . org / schema / 
beans 
6 h t t p : //www. s p r i n g f r amewo r k . org / schema / beans / s p r i n g−beans 
−3.0. xsd 
7 h t t p : //www. s p r i n g f r amewo r k . org / schema / c o n t e x t 
8 h t t p : //www. s p r i n g f r amewo r k . org / schema / c o n t e x t / s p r i n g− 
cont e x t −3.0. xsd ”> 
9 
10 <c o n t e x t : a n n o t a t i o n −c o n f i g /> 
11 
12 <!−− d e k l a r a c j a z i a r e n −−> 
13 
14 </ beans> 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 11 / 41
Automatyzacja obsługi komponentów Automatyczne wiazanie 
@Autowired 
1 @Autowired // byType 
2 p u b l i c void setPower ( Power power ) f 
3 t h i s . power = power ; 
4 g 
1 @Autowired // byType 
2 p u b l i c void ustawMiMoc ( Power power ) f 
3 t h i s . power = power ; 
4 g 
1 @Autowired // c o n s t r u c t o r 
2 p u b l i c DemiGod ( Power power ) f 
3 t h i s . power = power ; 
4 g 
1 @Autowired ( r e q u i r e d=f a l s e ) // byType 
2 p r i v a t e Power power ; 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 12 / 41
Automatyzacja obsługi komponentów Automatyczne wiazanie 
@Autowired 
1 @Autowired // byType 
2 p u b l i c void setPower ( Power power ) f 
3 t h i s . power = power ; 
4 g 
1 @Autowired // byType 
2 p u b l i c void ustawMiMoc ( Power power ) f 
3 t h i s . power = power ; 
4 g 
1 @Autowired // c o n s t r u c t o r 
2 p u b l i c DemiGod ( Power power ) f 
3 t h i s . power = power ; 
4 g 
1 @Autowired ( r e q u i r e d=f a l s e ) // byType 
2 p r i v a t e Power power ; 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 12 / 41
Automatyzacja obsługi komponentów Automatyczne wiazanie 
@Autowired 
1 @Autowired // byType 
2 p u b l i c void setPower ( Power power ) f 
3 t h i s . power = power ; 
4 g 
1 @Autowired // byType 
2 p u b l i c void ustawMiMoc ( Power power ) f 
3 t h i s . power = power ; 
4 g 
1 @Autowired // c o n s t r u c t o r 
2 p u b l i c DemiGod ( Power power ) f 
3 t h i s . power = power ; 
4 g 
1 @Autowired ( r e q u i r e d=f a l s e ) // byType 
2 p r i v a t e Power power ; 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 12 / 41
Automatyzacja obsługi komponentów Automatyczne wiazanie 
@Autowired 
1 @Autowired // byType 
2 p u b l i c void setPower ( Power power ) f 
3 t h i s . power = power ; 
4 g 
1 @Autowired // byType 
2 p u b l i c void ustawMiMoc ( Power power ) f 
3 t h i s . power = power ; 
4 g 
1 @Autowired // c o n s t r u c t o r 
2 p u b l i c DemiGod ( Power power ) f 
3 t h i s . power = power ; 
4 g 
1 @Autowired ( r e q u i r e d=f a l s e ) // byType 
2 p r i v a t e Power power ; 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 12 / 41
Automatyzacja obsługi komponentów Automatyczne wiazanie 
@Autowired + @Qualifier 
1 @Autowired 
2 @Qu a l i f i e r ( ” s t r e n g t h ” ) // byName++ 
3 p r i v a t e Power power ; 
1 <bean i d=” s t r e n g t h ” c l a s s=”pk . demo . s p r i n g . EnormousStrength ”/> 
1 <bean i d=” super−s t r e n g t h ” c l a s s=”pk . demo . s p r i n g . EnormousStrength ”> 
2 <q u a l i f i e r v a l u e=” s t r e n g t h ” /> 
3 </ bean> 
1 @Qu a l i f i e r ( ” s t r e n g t h ” ) 
2 @Qu a l i f i e r ( ” b o r r i n g ” ) 
3 p u b l i c c l a s s EnormousStrength implements Power f 
4 . . . 
5 g 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 13 / 41
Automatyzacja obsługi komponentów Automatyczne wiazanie 
@Autowired + @Qualifier 
1 @Autowired 
2 @Qu a l i f i e r ( ” s t r e n g t h ” ) // byName++ 
3 p r i v a t e Power power ; 
1 <bean i d=” s t r e n g t h ” c l a s s=”pk . demo . s p r i n g . EnormousStrength ”/> 
1 <bean i d=” super−s t r e n g t h ” c l a s s=”pk . demo . s p r i n g . EnormousStrength ”> 
2 <q u a l i f i e r v a l u e=” s t r e n g t h ” /> 
3 </ bean> 
1 @Qu a l i f i e r ( ” s t r e n g t h ” ) 
2 @Qu a l i f i e r ( ” b o r r i n g ” ) 
3 p u b l i c c l a s s EnormousStrength implements Power f 
4 . . . 
5 g 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 13 / 41
Automatyzacja obsługi komponentów Automatyczne wiazanie 
@Autowired + @Qualifier 
1 @Autowired 
2 @Qu a l i f i e r ( ” s t r e n g t h ” ) // byName++ 
3 p r i v a t e Power power ; 
1 <bean i d=” s t r e n g t h ” c l a s s=”pk . demo . s p r i n g . EnormousStrength ”/> 
1 <bean i d=” super−s t r e n g t h ” c l a s s=”pk . demo . s p r i n g . EnormousStrength ”> 
2 <q u a l i f i e r v a l u e=” s t r e n g t h ” /> 
3 </ bean> 
1 @Qu a l i f i e r ( ” s t r e n g t h ” ) 
2 @Qu a l i f i e r ( ” b o r r i n g ” ) 
3 p u b l i c c l a s s EnormousStrength implements Power f 
4 . . . 
5 g 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 13 / 41
Automatyzacja obsługi komponentów Automatyczne wiazanie 
@Autowired + @Qualifier 
1 @Autowired 
2 @Qu a l i f i e r ( ” s t r e n g t h ” ) // byName++ 
3 p r i v a t e Power power ; 
1 <bean i d=” s t r e n g t h ” c l a s s=”pk . demo . s p r i n g . EnormousStrength ”/> 
1 <bean i d=” super−s t r e n g t h ” c l a s s=”pk . demo . s p r i n g . EnormousStrength ”> 
2 <q u a l i f i e r v a l u e=” s t r e n g t h ” /> 
3 </ bean> 
1 @Qu a l i f i e r ( ” s t r e n g t h ” ) 
2 @Qu a l i f i e r ( ” b o r r i n g ” ) 
3 p u b l i c c l a s s EnormousStrength implements Power f 
4 . . . 
5 g 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 13 / 41
Automatyzacja obsługi komponentów Automatyczne wiazanie 
Własny kwalifikator 
1 @Target (f ElementType . FIELD , ElementType .PARAMETER, ElementType .TYPE 
g) 
2 @Re t ent ion ( Re t e n t i o nPo l i c y .RUNTIME) 
3 @Qu a l i f i e r 
4 p u b l i c @i n t e r f a c e StrengthPower f g 
1 @StrengthPower 
2 p u b l i c c l a s s EnormousStrength implements Power f 
3 . . . 
4 g 
1 @Autowired 
2 @StrengthPower 
3 p r i v a t e Power power ; 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 14 / 41
Automatyzacja obsługi komponentów Automatyczne wiazanie 
Własny kwalifikator 
1 @Target (f ElementType . FIELD , ElementType .PARAMETER, ElementType .TYPE 
g) 
2 @Re t ent ion ( Re t e n t i o nPo l i c y .RUNTIME) 
3 @Qu a l i f i e r 
4 p u b l i c @i n t e r f a c e StrengthPower f g 
1 @StrengthPower 
2 p u b l i c c l a s s EnormousStrength implements Power f 
3 . . . 
4 g 
1 @Autowired 
2 @StrengthPower 
3 p r i v a t e Power power ; 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 14 / 41
Automatyzacja obsługi komponentów Automatyczne wiazanie 
Własny kwalifikator 
1 @Target (f ElementType . FIELD , ElementType .PARAMETER, ElementType .TYPE 
g) 
2 @Re t ent ion ( Re t e n t i o nPo l i c y .RUNTIME) 
3 @Qu a l i f i e r 
4 p u b l i c @i n t e r f a c e StrengthPower f g 
1 @StrengthPower 
2 p u b l i c c l a s s EnormousStrength implements Power f 
3 . . . 
4 g 
1 @Autowired 
2 @StrengthPower 
3 p r i v a t e Power power ; 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 14 / 41
Automatyzacja obsługi komponentów Automatyczne wiazanie 
@Value 
1 @Value ( ” He r k u l e s ” ) 
2 p r i v a t e S t r i n g name ; 
1 @Value ( ”#fs y s t emPr o p e r t i e s . heroNameg” ) 
2 p r i v a t e S t r i n g name ; 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 15 / 41
Automatyzacja obsługi komponentów Automatyczne wiazanie 
@Value 
1 @Value ( ” He r k u l e s ” ) 
2 p r i v a t e S t r i n g name ; 
1 @Value ( ”#fs y s t emPr o p e r t i e s . heroNameg” ) 
2 p r i v a t e S t r i n g name ; 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 15 / 41
Automatyzacja obsługi komponentów Automatyczne definiowanie 
Skanowanie komponentów 
1 <? xml v e r s i o n=” 1 . 0 ” enc oding=”UTF−8” ?> 
2 <beans xmlns=” h t t p : //www. s p r i n g f r amewo r k . org / schema / beans ” 
3 xml n s : x s i=” h t t p : //www.w3 . org /2001/XMLSchema−i n s t a n c e ” 
4 xml n s : c o n t e x t=” h t t p : //www. s p r i n g f r amewo r k . org / schema / c o n t e x t 
” 
5 x s i : s c h ema L o c a t i o n=” h t t p : //www. s p r i n g f r amewo r k . org / schema / 
beans 
6 h t t p : //www. s p r i n g f r amewo r k . org / schema / beans / s p r i n g−beans 
−3.0. xsd 
7 h t t p : //www. s p r i n g f r amewo r k . org / schema / c o n t e x t 
8 h t t p : //www. s p r i n g f r amewo r k . org / schema / c o n t e x t / s p r i n g− 
cont e x t −3.0. xsd ”> 
9 
10 <cont e x t : component−scan base−package=”pk . demo . s p r i n g ” /> 
11 <!−− z automatu c o n t e x t : a n n o t a t i o n −c o n f i g −−> 
12 
13 <!−− d e k l a r a c j a z i a r e n −−> 
14 
15 </ beans> 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 16 / 41
Automatyzacja obsługi komponentów Automatyczne definiowanie 
Rodzaje komponentów 
@Component 
@Controller 
@Repository 
@Service 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 17 / 41
Automatyzacja obsługi komponentów Automatyczne definiowanie 
Definiowanie komponentów 
1 @Component // name == enormousSt r ength 
2 p u b l i c EnormousStrength implements Power f 
3 . . . 
4 g 
1 @Component ( ” h e r c u l e s ” ) // name == h e r c u l e s 
2 p u b l i c DemiGod implements Hero f 
3 . . . 
4 g 
1 @Component 
2 @Qu a l i f i e r ( ” c a r t o o n ” ) 
3 @Scope ( ” p r o t o t y p e ” ) 
4 p u b l i c SuperHero implements Hero f 
5 . . . 
6 g 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 18 / 41
Automatyzacja obsługi komponentów Automatyczne definiowanie 
Definiowanie komponentów 
1 @Component // name == enormousSt r ength 
2 p u b l i c EnormousStrength implements Power f 
3 . . . 
4 g 
1 @Component ( ” h e r c u l e s ” ) // name == h e r c u l e s 
2 p u b l i c DemiGod implements Hero f 
3 . . . 
4 g 
1 @Component 
2 @Qu a l i f i e r ( ” c a r t o o n ” ) 
3 @Scope ( ” p r o t o t y p e ” ) 
4 p u b l i c SuperHero implements Hero f 
5 . . . 
6 g 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 18 / 41
Automatyzacja obsługi komponentów Automatyczne definiowanie 
Definiowanie komponentów 
1 @Component // name == enormousSt r ength 
2 p u b l i c EnormousStrength implements Power f 
3 . . . 
4 g 
1 @Component ( ” h e r c u l e s ” ) // name == h e r c u l e s 
2 p u b l i c DemiGod implements Hero f 
3 . . . 
4 g 
1 @Component 
2 @Qu a l i f i e r ( ” c a r t o o n ” ) 
3 @Scope ( ” p r o t o t y p e ” ) 
4 p u b l i c SuperHero implements Hero f 
5 . . . 
6 g 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 18 / 41
Automatyzacja obsługi komponentów Automatyczne definiowanie 
Filtrowanie zakresu skanowania 
annotation 
assignable 
aspectj 
custom 
regex 
1 <cont e x t : component−scan base−package=”pk . demo . s p r i n g ”> 
2 <c o n t e x t : i n c l u d e −f i l t e r t ype=” a s s i g n a b l e ” 
3 e x p r e s s i o n=”pk . demo . s p r i n g . Power ”/> 
4 <c o n t e x t : e x c l u d e −f i l t e r t ype=” a n n o t a t i o n ” 
5 e x p r e s s i o n=”pk . demo . s p r i n g . S k i p I t ”/> 
6 </ cont e x t : component−scan> 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 19 / 41
Automatyzacja obsługi komponentów Automatyczne definiowanie 
Filtrowanie zakresu skanowania 
annotation 
assignable 
aspectj 
custom 
regex 
1 <cont e x t : component−scan base−package=”pk . demo . s p r i n g ”> 
2 <c o n t e x t : i n c l u d e −f i l t e r t ype=” a s s i g n a b l e ” 
3 e x p r e s s i o n=”pk . demo . s p r i n g . Power ”/> 
4 <c o n t e x t : e x c l u d e −f i l t e r t ype=” a n n o t a t i o n ” 
5 e x p r e s s i o n=”pk . demo . s p r i n g . S k i p I t ”/> 
6 </ cont e x t : component−scan> 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 19 / 41
Automatyzacja obsługi komponentów Automatyczne definiowanie 
Standardowe zamienniki 
Spring javax.inject.* 
@Autowired @Inject (bez required) 
@Qualifier @Named 
@Component @Named 
@Scope("singleton") @Singleton * 
@Value — 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 20 / 41
Programowanie aspektowe 
Plan wykładu 
1 Automatyzacja obsługi komponentów 
Automatyczne wiazanie 
Automatyczne definiowanie 
2 Programowanie aspektowe 
Wprowadzenie do Spring AOP 
Deklarowanie aspektów 
3 Podsumowanie 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 21 / 41
Programowanie aspektowe 
O co tyle chałasu? 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 22 / 41
Programowanie aspektowe Wprowadzenie do Spring AOP 
Czym jest programowanie aspektowe? 
Pomocnicze funkcjonalnosci 
przekrojowe 
OOP 
dziedziczenie 
delegacja 
AOP 
implementacja w jednym 
miejscu 
modularyzacja w aspekty 
opis, gdzie i jak uzyc 
główna funkcjonalnosc nie jest 
zasmiecona 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 23 / 41
Programowanie aspektowe Wprowadzenie do Spring AOP 
Podstawowa terminologia 
Advice (rada) — odczyt licznika 
(before, after, after-returning, 
after-throwing, around) 
Join points (punkty złaczen) — 
wszelkie urzadzenia elektryczne 
Pointcuts (punkty interakcji) — 
lista liczników (i domów) 
Aspect = Advice + Pointcuts 
Introduction (wprowadzenie) 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 24 / 41
Programowanie aspektowe Wprowadzenie do Spring AOP 
Podstawowa terminologia 
Advice (rada) — odczyt licznika 
(before, after, after-returning, 
after-throwing, around) 
Join points (punkty złaczen) — 
wszelkie urzadzenia elektryczne 
Pointcuts (punkty interakcji) — 
lista liczników (i domów) 
Aspect = Advice + Pointcuts 
Introduction (wprowadzenie) 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 24 / 41
Programowanie aspektowe Wprowadzenie do Spring AOP 
Podstawowa terminologia 
Advice (rada) — odczyt licznika 
(before, after, after-returning, 
after-throwing, around) 
Join points (punkty złaczen) — 
wszelkie urzadzenia elektryczne 
Pointcuts (punkty interakcji) — 
lista liczników (i domów) 
Aspect = Advice + Pointcuts 
Introduction (wprowadzenie) 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 24 / 41
Programowanie aspektowe Wprowadzenie do Spring AOP 
Podstawowa terminologia 
Advice (rada) — odczyt licznika 
(before, after, after-returning, 
after-throwing, around) 
Join points (punkty złaczen) — 
wszelkie urzadzenia elektryczne 
Pointcuts (punkty interakcji) — 
lista liczników (i domów) 
Aspect = Advice + Pointcuts 
Introduction (wprowadzenie) 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 24 / 41
Programowanie aspektowe Wprowadzenie do Spring AOP 
Podstawowa terminologia 
Advice (rada) — odczyt licznika 
(before, after, after-returning, 
after-throwing, around) 
Join points (punkty złaczen) — 
wszelkie urzadzenia elektryczne 
Pointcuts (punkty interakcji) — 
lista liczników (i domów) 
Aspect = Advice + Pointcuts 
Introduction (wprowadzenie) 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 24 / 41
Programowanie aspektowe Wprowadzenie do Spring AOP 
Aspekty w Springu 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 25 / 41
Programowanie aspektowe Wprowadzenie do Spring AOP 
Tworzenie punktów interakcji 
struktura 
1 e x e c u t i o n (* pk . demo . s p r i n g . Power . use ( . . ) 
2 && wi t h i n ( pk . demo . s p r i n g . c a r t o o n s . * ) 
3 and ! bean ( spiderMan ) ) 
args(), @args() 
execution() 
this() 
target(), @target() 
within(), @within() 
@annotation() 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 26 / 41
Programowanie aspektowe Wprowadzenie do Spring AOP 
Tworzenie punktów interakcji 
struktura 
1 e x e c u t i o n (* pk . demo . s p r i n g . Power . use ( . . ) 
2 && wi t h i n ( pk . demo . s p r i n g . c a r t o o n s . * ) 
3 and ! bean ( spiderMan ) ) 
args(), @args() 
execution() 
this() 
target(), @target() 
within(), @within() 
@annotation() 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 26 / 41
Programowanie aspektowe Deklarowanie aspektów 
Deklarowanie aspektów 
xmlns:aop="http://www.springframework.org/schema/aop" 
xsi:schemaLocation="... 
http://www.springframework.org/schema/aop 
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd" 
<aop:config> 
<aop:aspect> 
<aop:pointcut> 
Czas wykonania 
<aop:before> 
<aop:around> 
<aop:after>, <aop:after-returning>, <aop:after-throwing> 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 27 / 41
Programowanie aspektowe Deklarowanie aspektów 
Reporter 
1 package pk . demo . s p r i n g ; 
2 
3 p u b l i c c l a s s Re p o r t e r f 
4 
5 // Be f o r e r e s c u e 
6 p u b l i c void t a k eVi ewp o i n t ( ) f 
7 System . out . p r i n t l n ( ”The r e p o r t e r i s t a k i n g p e r f e c t v i ewp o i n t ” ) ; 
8 g 
9 // Be f o r e r e s c u e 
10 p u b l i c void prepareCamera ( ) f 
11 System . out . p r i n t l n ( ”The r e p o r t e r i s p r e p a r i n g camera f o r t a k i n g 
photos ” ) ; 
12 g 
13 // Af t e r r e s c u e 
14 p u b l i c void w r i t e A r t i c l e ( ) f 
15 System . out . p r i n t l n ( ”The r e p o r t e r i s wr i t i n g a r t i c l e ” ) ; 
16 g 
17 // Af t e r f a i l e d r e s c u e 
18 p u b l i c void e s c ape ( ) f 
19 System . out . p r i n t l n ( ”The r e p o r t e r s c r eams : Help me ! ” ) ; 
20 g 
21 g 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 28 / 41
Programowanie aspektowe Deklarowanie aspektów 
Zatrudnienie reportera I 
1 <bean i d=” r e p o r t e r ” c l a s s=”pk . demo . s p r i n g . Re p o r t e r ” /> 
2 
3 <a o p : c o n f i g> 
4 <a o p : a s p e c t r e f=” r e p o r t e r ”> 
5 <a o p : b e f o r e p o i n t c u t=” e x e c u t i o n (* pk . demo . s p r i n g . Hero . r e s c u e 
( . . ) ) ” method=” t a k eVi ewp o i n t ” /> 
6 <a o p : b e f o r e p o i n t c u t=” e x e c u t i o n (* pk . demo . s p r i n g . Hero . r e s c u e 
( . . ) ) ” method=” prepareCamera ” /> 
7 <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=” e x e c u t i o n (* pk . demo . s p r i n g . Hero . 
r e s c u e ( . . ) ) ” method=” w r i t e A r t i c l e ” /> 
8 <a o p : a f t e r −thr owing p o i n t c u t=” e x e c u t i o n (* pk . demo . s p r i n g . Hero . 
r e s c u e ( . . ) ) ” method=” e s c ape ” /> 
9 </ a o p : a s p e c t> 
10 </ a o p : c o n f i g> 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 29 / 41
Programowanie aspektowe Deklarowanie aspektów 
Zatrudnienie reportera II 
1 <bean i d=” r e p o r t e r ” c l a s s=”pk . demo . s p r i n g . Re p o r t e r ” /> 
2 
3 <a o p : c o n f i g> 
4 <a o p : a s p e c t r e f=” r e p o r t e r ”> 
5 <a o p : p o i n t c u t i d=” r e s c u e ” e x p r e s s i o n=” e x e c u t i o n (* pk . demo . s p r i n g 
. Hero . r e s c u e ( . . ) ) ” /> 
6 <a o p : b e f o r e p o i n t c u t−r e f=” r e s c u e ” method=” t a k eVi ewp o i n t ” /> 
7 <a o p : b e f o r e p o i n t c u t−r e f=” r e s c u e ” method=” prepareCamera ” /> 
8 <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=” r e s c u e ” method=” w r i t e A r t i c l e 
” /> 
9 <a o p : a f t e r −thr owing p o i n t c u t−r e f=” r e s c u e ” method=” e s c ape ” /> 
10 </ a o p : a s p e c t> 
11 </ a o p : c o n f i g> 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 30 / 41
Programowanie aspektowe Deklarowanie aspektów 
Jak reporter (współ-)pracuje? 
logika biznesowa aspekt logika aspektowa 
try f 
<aop:before ... 
method="takeViewpoint"/> reporter.takeViewpoint(); 
<aop:before ... 
method="prepareCamera"/> reporter.prepareCamera(); 
hero.rescue() 
<aop:after-returning ... 
method="writeArticle"/> reporter.writeArticle(); 
g catch(Exception e) f 
<aop:after-throwing ... 
method="escape"/> reporter.escape(); 
g 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 31 / 41
Programowanie aspektowe Deklarowanie aspektów 
Sprytny reporter 
1 package pk . demo . s p r i n g ; 
2 
3 p u b l i c c l a s s Smar tRepor t e r f 
4 
5 p u b l i c void o b s e r v e ( Pr o c e e d i n g J o i nPo i n t j o i n p o i n t ) f 
6 t r y f 
7 System . out . p r i n t l n ( ”The r e p o r t e r i s t a k i n g p e r f e c t v i ewp o i n t ” 
) ; 
8 System . out . p r i n t l n ( ”The r e p o r t e r i s p r e p a r i n g camera f o r 
t a k i n g photos ” ) ; 
9 
10 wh i l e ( ! takeGoodPhoto ( ) ) f 
11 j o i n p o i n t . proc e ed ( ) ; 
12 g 
13 
14 System . out . p r i n t l n ( ”The r e p o r t e r i s wr i t i n g a r t i c l e ” ) ; 
15 g catch ( Ex c e p t i o n e ) f 
16 System . out . p r i n t l n ( ”The r e p o r t e r s c r eams : Help me ! ” ) ; 
17 g 
18 g 
19 g 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 32 / 41
Programowanie aspektowe Deklarowanie aspektów 
Zatrudnienie sprytnego reportera 
1 <bean i d=” r e p o r t e r ” c l a s s=”pk . demo . s p r i n g . Smar tRepor t e r ” /> 
2 
3 <a o p : c o n f i g> 
4 <a o p : a s p e c t r e f=” r e p o r t e r ”> 
5 <a o p : p o i n t c u t i d=” r e s c u e ” e x p r e s s i o n=” e x e c u t i o n (* pk . demo . s p r i n g 
. Hero . r e s c u e ( . . ) ) ” /> 
6 <aop: a round p o i n t c u t−r e f=” r e s c u e ” method=” o b s e r v e ” /> 
7 </ a o p : a s p e c t> 
8 </ a o p : c o n f i g> 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 33 / 41
Programowanie aspektowe Deklarowanie aspektów 
Przekazywanie parametru 
1 package pk . demo . s p r i n g ; 
2 
3 p u b l i c i n t e r f a c e Thinke r f 
4 void thinkOfSome thing ( S t r i n g thought s ) ; 
5 g 
1 package pk . demo . s p r i n g ; 
2 
3 p u b l i c c l a s s Magician f 
4 p u b l i c void i n t e r c e p tTh o u g h t s ( S t r i n g thought s ) f 
5 System . out . p r i n t l n ( ” Vo l u n t e e r t h i n k s about ’ thought s ’ ” ) ; 
6 g 
7 g 
1 <a o p : c o n f i g> 
2 <a o p : a s p e c t r e f=”magi c i an ”> 
3 <a o p : p o i n t c u t i d=” t h i n k i n g ” e x p r e s s i o n=” e x e c u t i o n (* pk . demo . 
s p r i n g . Thinke r . thinkOfSome thing ( S t r i n g ) ) and a r g s ( thought s ) ” 
/> 
4 <a o p : b e f o r e p o i n t c u t−r e f=” t h i n k i n g ” method=” i n t e r c e p tTh o u g h t s ” 
arg−names=” thought s ” /> 
5 </ a o p : a s p e c t> 
6 <M/ikaołoajpO:lsczeownskfi i(gW>ZIM SGGW) Programowanie Komponentowe Wykład #B 34 / 41
Programowanie aspektowe Deklarowanie aspektów 
Przekazywanie parametru 
1 package pk . demo . s p r i n g ; 
2 
3 p u b l i c i n t e r f a c e Thinke r f 
4 void thinkOfSome thing ( S t r i n g thought s ) ; 
5 g 
1 package pk . demo . s p r i n g ; 
2 
3 p u b l i c c l a s s Magician f 
4 p u b l i c void i n t e r c e p tTh o u g h t s ( S t r i n g thought s ) f 
5 System . out . p r i n t l n ( ” Vo l u n t e e r t h i n k s about ’ thought s ’ ” ) ; 
6 g 
7 g 
1 <a o p : c o n f i g> 
2 <a o p : a s p e c t r e f=”magi c i an ”> 
3 <a o p : p o i n t c u t i d=” t h i n k i n g ” e x p r e s s i o n=” e x e c u t i o n (* pk . demo . 
s p r i n g . Thinke r . thinkOfSome thing ( S t r i n g ) ) and a r g s ( thought s ) ” 
/> 
4 <a o p : b e f o r e p o i n t c u t−r e f=” t h i n k i n g ” method=” i n t e r c e p tTh o u g h t s ” 
arg−names=” thought s ” /> 
5 </ a o p : a s p e c t> 
6 <M/ikaołoajpO:lsczeownskfi i(gW>ZIM SGGW) Programowanie Komponentowe Wykład #B 34 / 41
Programowanie aspektowe Deklarowanie aspektów 
Przekazywanie parametru 
1 package pk . demo . s p r i n g ; 
2 
3 p u b l i c i n t e r f a c e Thinke r f 
4 void thinkOfSome thing ( S t r i n g thought s ) ; 
5 g 
1 package pk . demo . s p r i n g ; 
2 
3 p u b l i c c l a s s Magician f 
4 p u b l i c void i n t e r c e p tTh o u g h t s ( S t r i n g thought s ) f 
5 System . out . p r i n t l n ( ” Vo l u n t e e r t h i n k s about ’ thought s ’ ” ) ; 
6 g 
7 g 
1 <a o p : c o n f i g> 
2 <a o p : a s p e c t r e f=”magi c i an ”> 
3 <a o p : p o i n t c u t i d=” t h i n k i n g ” e x p r e s s i o n=” e x e c u t i o n (* pk . demo . 
s p r i n g . Thinke r . thinkOfSome thing ( S t r i n g ) ) and a r g s ( thought s ) ” 
/> 
4 <a o p : b e f o r e p o i n t c u t−r e f=” t h i n k i n g ” method=” i n t e r c e p tTh o u g h t s ” 
arg−names=” thought s ” /> 
5 </ a o p : a s p e c t> 
6 <M/ikaołoajpO:lsczeownskfi i(gW>ZIM SGGW) Programowanie Komponentowe Wykład #B 34 / 41
Programowanie aspektowe Deklarowanie aspektów 
JoinPoint 
interfejs JoinPoint 
getArgs() 
getSignature() 
getSourceLocation() 
getTarget() 
getThis() 
. . . 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 35 / 41
Programowanie aspektowe Deklarowanie aspektów 
Wprowadzenie nowej funkcjonalnosci 
Co to przypomina? 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 36 / 41
Programowanie aspektowe Deklarowanie aspektów 
Wprowadzenie nowej funkcjonalnosci 
Co to przypomina? 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 36 / 41
Programowanie aspektowe Deklarowanie aspektów 
Domieszkowanie 
1 package pk . demo . s p r i n g . 
2 
3 p u b l i c i n t e r f a c e S t o r yTe l l e r f 
4 p u b l i c S t r i n g t e l lTh e S t o r y ( ) ; 
5 g 
1 <a o p : c o n f i g> 
2 <a o p : d e c l a r e −p a r e n t s 
3 t ype s−matching=”pk . demo . s p r i n g . Hero+” 
4 implement−i n t e r f a c e=”pk . demo . s p r i n g . S t o r yTe l l e r ” 
5 d e f a u l t−impl=”pk . demo . s p r i n g . F a n t a s i s t ” /> 
6 </ a o p : c o n f i g> 
1 <bean i d=” f a n t a s i s t ” c l a s s=”pk . demo . s p r i n g . F a n t a s i s t ” /> 
2 <a o p : c o n f i g> 
3 <a o p : d e c l a r e −p a r e n t s 
4 t ype s−matching=”pk . demo . s p r i n g . Hero+” 
5 implement−i n t e r f a c e=”pk . demo . s p r i n g . S t o r yTe l l e r ” 
6 d e l e g a t e−r e f=” f a n t a s i s t ” /> 
7 </ a o p : c o n f i g> 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 37 / 41
Programowanie aspektowe Deklarowanie aspektów 
Domieszkowanie 
1 package pk . demo . s p r i n g . 
2 
3 p u b l i c i n t e r f a c e S t o r yTe l l e r f 
4 p u b l i c S t r i n g t e l lTh e S t o r y ( ) ; 
5 g 
1 <a o p : c o n f i g> 
2 <a o p : d e c l a r e −p a r e n t s 
3 t ype s−matching=”pk . demo . s p r i n g . Hero+” 
4 implement−i n t e r f a c e=”pk . demo . s p r i n g . S t o r yTe l l e r ” 
5 d e f a u l t−impl=”pk . demo . s p r i n g . F a n t a s i s t ” /> 
6 </ a o p : c o n f i g> 
1 <bean i d=” f a n t a s i s t ” c l a s s=”pk . demo . s p r i n g . F a n t a s i s t ” /> 
2 <a o p : c o n f i g> 
3 <a o p : d e c l a r e −p a r e n t s 
4 t ype s−matching=”pk . demo . s p r i n g . Hero+” 
5 implement−i n t e r f a c e=”pk . demo . s p r i n g . S t o r yTe l l e r ” 
6 d e l e g a t e−r e f=” f a n t a s i s t ” /> 
7 </ a o p : c o n f i g> 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 37 / 41
Programowanie aspektowe Deklarowanie aspektów 
Domieszkowanie 
1 package pk . demo . s p r i n g . 
2 
3 p u b l i c i n t e r f a c e S t o r yTe l l e r f 
4 p u b l i c S t r i n g t e l lTh e S t o r y ( ) ; 
5 g 
1 <a o p : c o n f i g> 
2 <a o p : d e c l a r e −p a r e n t s 
3 t ype s−matching=”pk . demo . s p r i n g . Hero+” 
4 implement−i n t e r f a c e=”pk . demo . s p r i n g . S t o r yTe l l e r ” 
5 d e f a u l t−impl=”pk . demo . s p r i n g . F a n t a s i s t ” /> 
6 </ a o p : c o n f i g> 
1 <bean i d=” f a n t a s i s t ” c l a s s=”pk . demo . s p r i n g . F a n t a s i s t ” /> 
2 <a o p : c o n f i g> 
3 <a o p : d e c l a r e −p a r e n t s 
4 t ype s−matching=”pk . demo . s p r i n g . Hero+” 
5 implement−i n t e r f a c e=”pk . demo . s p r i n g . S t o r yTe l l e r ” 
6 d e l e g a t e−r e f=” f a n t a s i s t ” /> 
7 </ a o p : c o n f i g> 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 37 / 41
Podsumowanie 
Plan wykładu 
1 Automatyzacja obsługi komponentów 
Automatyczne wiazanie 
Automatyczne definiowanie 
2 Programowanie aspektowe 
Wprowadzenie do Spring AOP 
Deklarowanie aspektów 
3 Podsumowanie 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 38 / 41
Podsumowanie 
Podsumowanie 
Automatyczne rozwiazywanie zaleznosci z mozliwoscia konfiguracji 
Skanowanie w poszukiwaniu komponentów z mozliwoscia 
doprecyzowania rodzaju i filtrowaniem 
Grupowanie przekrojowych funkcjonalnosci za pomoca aspektów 
Wprowadzanie nowych funkcjonalnosci za pomoca domieszek 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 39 / 41
Podsumowanie 
Do domu 
Przeczytac rozdziały 3, 4 ze „Spring w Akcji” (3. lub 4. ed.) 
W praktyce zapoznac sie z adnotacjami i aspektami springowymi 
Poznac funkcjonalnosc interfejsów JoinPoint i 
ProceedingJoinPoint 
Komponenty w javie 
jak na poprzednie zajecia 
interfejsy w pakiecie pk.labs.LabB.Contracts 
automatyczna rejestracja przez springa 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 40 / 41
Podsumowanie 
Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 41 / 41

More Related Content

Viewers also liked

Programowanie Komponentowe: #9 Java Beans
Programowanie Komponentowe: #9 Java BeansProgramowanie Komponentowe: #9 Java Beans
Programowanie Komponentowe: #9 Java BeansMikołaj Olszewski
 
Programowanie Komponentowe: #6 Wersjonowanie
Programowanie Komponentowe: #6 WersjonowanieProgramowanie Komponentowe: #6 Wersjonowanie
Programowanie Komponentowe: #6 WersjonowanieMikołaj Olszewski
 
Kwantowe struktury półprzewodnikowe
Kwantowe struktury półprzewodnikoweKwantowe struktury półprzewodnikowe
Kwantowe struktury półprzewodnikoweMikołaj Olszewski
 
Optyczne solitony przestrzenne
Optyczne solitony przestrzenneOptyczne solitony przestrzenne
Optyczne solitony przestrzenneMikołaj Olszewski
 
Programowanie Komponentowe: #1 Wprowadzenie
Programowanie Komponentowe: #1 WprowadzenieProgramowanie Komponentowe: #1 Wprowadzenie
Programowanie Komponentowe: #1 WprowadzenieMikołaj Olszewski
 

Viewers also liked (9)

Parallel quicksort cz. 2
Parallel quicksort cz. 2Parallel quicksort cz. 2
Parallel quicksort cz. 2
 
Programowanie Komponentowe: #9 Java Beans
Programowanie Komponentowe: #9 Java BeansProgramowanie Komponentowe: #9 Java Beans
Programowanie Komponentowe: #9 Java Beans
 
Programowanie Komponentowe: #6 Wersjonowanie
Programowanie Komponentowe: #6 WersjonowanieProgramowanie Komponentowe: #6 Wersjonowanie
Programowanie Komponentowe: #6 Wersjonowanie
 
Kwantowe struktury półprzewodnikowe
Kwantowe struktury półprzewodnikoweKwantowe struktury półprzewodnikowe
Kwantowe struktury półprzewodnikowe
 
Optyczne solitony przestrzenne
Optyczne solitony przestrzenneOptyczne solitony przestrzenne
Optyczne solitony przestrzenne
 
Programowanie Komponentowe: #1 Wprowadzenie
Programowanie Komponentowe: #1 WprowadzenieProgramowanie Komponentowe: #1 Wprowadzenie
Programowanie Komponentowe: #1 Wprowadzenie
 
Architektura heksagonalna
Architektura heksagonalnaArchitektura heksagonalna
Architektura heksagonalna
 
Lokalne sieci światłowodowe
Lokalne sieci światłowodoweLokalne sieci światłowodowe
Lokalne sieci światłowodowe
 
Optyka ciekłych kryształów
Optyka ciekłych kryształówOptyka ciekłych kryształów
Optyka ciekłych kryształów
 

Similar to Programowanie Komponentowe: #B Komponentowe aspekty springa

Programowanie Komponentowe: #3 Podstawy programowania komponentów
Programowanie Komponentowe: #3 Podstawy programowania komponentówProgramowanie Komponentowe: #3 Podstawy programowania komponentów
Programowanie Komponentowe: #3 Podstawy programowania komponentówMikołaj Olszewski
 
WJUG #257 Just-In-Time compiler - ukryty "przyjaciel" - Krzysztof Ślusarski
WJUG #257 Just-In-Time compiler - ukryty "przyjaciel" - Krzysztof ŚlusarskiWJUG #257 Just-In-Time compiler - ukryty "przyjaciel" - Krzysztof Ślusarski
WJUG #257 Just-In-Time compiler - ukryty "przyjaciel" - Krzysztof ŚlusarskiKrzysztof Ślusarski
 
Programowanie Komponentowe: #2 Metody opisu komponentów
Programowanie Komponentowe: #2 Metody opisu komponentówProgramowanie Komponentowe: #2 Metody opisu komponentów
Programowanie Komponentowe: #2 Metody opisu komponentówMikołaj Olszewski
 
Django od developerki po produkcję (linux)
Django od developerki po produkcję (linux)Django od developerki po produkcję (linux)
Django od developerki po produkcję (linux)Marcin Grzybowski
 
Jak włamałem się do banku
Jak włamałem się do bankuJak włamałem się do banku
Jak włamałem się do bankuSlawomir Jasek
 
Programowanie komponentowe: #4 Podstawy połączeń komponentów
Programowanie komponentowe: #4 Podstawy połączeń komponentówProgramowanie komponentowe: #4 Podstawy połączeń komponentów
Programowanie komponentowe: #4 Podstawy połączeń komponentówMikołaj Olszewski
 

Similar to Programowanie Komponentowe: #B Komponentowe aspekty springa (6)

Programowanie Komponentowe: #3 Podstawy programowania komponentów
Programowanie Komponentowe: #3 Podstawy programowania komponentówProgramowanie Komponentowe: #3 Podstawy programowania komponentów
Programowanie Komponentowe: #3 Podstawy programowania komponentów
 
WJUG #257 Just-In-Time compiler - ukryty "przyjaciel" - Krzysztof Ślusarski
WJUG #257 Just-In-Time compiler - ukryty "przyjaciel" - Krzysztof ŚlusarskiWJUG #257 Just-In-Time compiler - ukryty "przyjaciel" - Krzysztof Ślusarski
WJUG #257 Just-In-Time compiler - ukryty "przyjaciel" - Krzysztof Ślusarski
 
Programowanie Komponentowe: #2 Metody opisu komponentów
Programowanie Komponentowe: #2 Metody opisu komponentówProgramowanie Komponentowe: #2 Metody opisu komponentów
Programowanie Komponentowe: #2 Metody opisu komponentów
 
Django od developerki po produkcję (linux)
Django od developerki po produkcję (linux)Django od developerki po produkcję (linux)
Django od developerki po produkcję (linux)
 
Jak włamałem się do banku
Jak włamałem się do bankuJak włamałem się do banku
Jak włamałem się do banku
 
Programowanie komponentowe: #4 Podstawy połączeń komponentów
Programowanie komponentowe: #4 Podstawy połączeń komponentówProgramowanie komponentowe: #4 Podstawy połączeń komponentów
Programowanie komponentowe: #4 Podstawy połączeń komponentów
 

More from Mikołaj Olszewski

Optoelektroniczne sieci neuronowe
Optoelektroniczne sieci neuronoweOptoelektroniczne sieci neuronowe
Optoelektroniczne sieci neuronoweMikołaj Olszewski
 
Metody efektywnego łączenia sieci neuronowych
Metody efektywnego łączenia sieci neuronowychMetody efektywnego łączenia sieci neuronowych
Metody efektywnego łączenia sieci neuronowychMikołaj Olszewski
 
Test wyszukiwarek internetowych
Test wyszukiwarek internetowychTest wyszukiwarek internetowych
Test wyszukiwarek internetowychMikołaj Olszewski
 
Programowanie Komponentowe: #5 Wprowadzenie do środowiska .NET
Programowanie Komponentowe: #5 Wprowadzenie do środowiska .NETProgramowanie Komponentowe: #5 Wprowadzenie do środowiska .NET
Programowanie Komponentowe: #5 Wprowadzenie do środowiska .NETMikołaj Olszewski
 

More from Mikołaj Olszewski (11)

Optoelektroniczne sieci neuronowe
Optoelektroniczne sieci neuronoweOptoelektroniczne sieci neuronowe
Optoelektroniczne sieci neuronowe
 
Swiatłowodowy czujnik prądu
Swiatłowodowy czujnik prąduSwiatłowodowy czujnik prądu
Swiatłowodowy czujnik prądu
 
Metody efektywnego łączenia sieci neuronowych
Metody efektywnego łączenia sieci neuronowychMetody efektywnego łączenia sieci neuronowych
Metody efektywnego łączenia sieci neuronowych
 
Parallel quicksort cz. 1
Parallel quicksort cz. 1Parallel quicksort cz. 1
Parallel quicksort cz. 1
 
Maszyna Turinga
Maszyna TuringaMaszyna Turinga
Maszyna Turinga
 
Planowanie działań cz. 2
Planowanie działań cz. 2Planowanie działań cz. 2
Planowanie działań cz. 2
 
Planowanie działań cz. 1
Planowanie działań cz. 1Planowanie działań cz. 1
Planowanie działań cz. 1
 
Model hierarchiczny
Model hierarchicznyModel hierarchiczny
Model hierarchiczny
 
Komputer genetyczny
Komputer genetycznyKomputer genetyczny
Komputer genetyczny
 
Test wyszukiwarek internetowych
Test wyszukiwarek internetowychTest wyszukiwarek internetowych
Test wyszukiwarek internetowych
 
Programowanie Komponentowe: #5 Wprowadzenie do środowiska .NET
Programowanie Komponentowe: #5 Wprowadzenie do środowiska .NETProgramowanie Komponentowe: #5 Wprowadzenie do środowiska .NET
Programowanie Komponentowe: #5 Wprowadzenie do środowiska .NET
 

Programowanie Komponentowe: #B Komponentowe aspekty springa

  • 1. Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 1 / 41
  • 2. Programowanie Komponentowe Wykład #B: Komponentowe aspekty Springa Mikołaj Olszewski Wydział Zastosowan Informatyki i Matematyki Szkoły Głównej Gospodarstwa Wiejskiego 30.12.2014 Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 2 / 41
  • 3. Plan wykładu 1 Automatyzacja obsługi komponentów Automatyczne wiazanie Automatyczne definiowanie 2 Programowanie aspektowe Wprowadzenie do Spring AOP Deklarowanie aspektów 3 Podsumowanie Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 3 / 41
  • 4. Automatyzacja obsługi komponentów Plan wykładu 1 Automatyzacja obsługi komponentów Automatyczne wiazanie Automatyczne definiowanie 2 Programowanie aspektowe Wprowadzenie do Spring AOP Deklarowanie aspektów 3 Podsumowanie Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 4 / 41
  • 5. Automatyzacja obsługi komponentów Konfiguracja w XML-u Niezaleznosc od implementacji + Mozliwosc rekonfiguracji bez ponownej kompilacji + Mała czytelnosc - Trudne do utrzymania w duzych projektach - (mozliwosc dywersyfikacji plików) Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 5 / 41
  • 6. Automatyzacja obsługi komponentów Konfiguracja w XML-u Niezaleznosc od implementacji + Mozliwosc rekonfiguracji bez ponownej kompilacji + Mała czytelnosc - Trudne do utrzymania w duzych projektach - (mozliwosc dywersyfikacji plików) Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 5 / 41
  • 7. Automatyzacja obsługi komponentów Konfiguracja w XML-u Niezaleznosc od implementacji + Mozliwosc rekonfiguracji bez ponownej kompilacji + Mała czytelnosc - Trudne do utrzymania w duzych projektach - (mozliwosc dywersyfikacji plików) Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 5 / 41
  • 8. Automatyzacja obsługi komponentów Konfiguracja w XML-u Niezaleznosc od implementacji + Mozliwosc rekonfiguracji bez ponownej kompilacji + Mała czytelnosc - Trudne do utrzymania w duzych projektach - (mozliwosc dywersyfikacji plików) Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 5 / 41
  • 9. Automatyzacja obsługi komponentów Automatyczne wiazanie Rodzaje dopasowan byName (id _ name) byType (0 _ 1) constructor (1) autodetect (constructor, byType) Uzycie <bean ... autowire="<type>" /> Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 6 / 41
  • 10. Automatyzacja obsługi komponentów Automatyczne wiazanie Rodzaje dopasowan byName (id _ name) byType (0 _ 1) constructor (1) autodetect (constructor, byType) Uzycie <bean ... autowire="<type>" /> Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 6 / 41
  • 11. Automatyzacja obsługi komponentów Automatyczne wiazanie Wiazanie po nazwie 1 <bean i d=” super−s t r e n g t h ” c l a s s=”pk . demo . s p r i n g . EnormousStrength ”/> 2 3 <bean i d=” h e r c u l e s ” c l a s s=”pk . demo . s p r i n g . DemiGod”> 4 <p r o p e r t y name=”name” v a l u e=” He r c u l e s ” /> 5 <p r o p e r t y name=” power ” r e f=” super−s t r e n g t h ” /> 6 </ bean> 1 <bean i d=” power ” c l a s s=”pk . demo . s p r i n g . EnormousStrength ”/> 2 3 <bean i d=” h e r c u l e s ” c l a s s=”pk . demo . s p r i n g . DemiGod” a u t owi r e=”byName ”> 4 <p r o p e r t y name=”name” v a l u e=” He r c u l e s ” /> 5 </ bean> Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 7 / 41
  • 12. Automatyzacja obsługi komponentów Automatyczne wiazanie Wiazanie po nazwie 1 <bean i d=” super−s t r e n g t h ” c l a s s=”pk . demo . s p r i n g . EnormousStrength ”/> 2 3 <bean i d=” h e r c u l e s ” c l a s s=”pk . demo . s p r i n g . DemiGod”> 4 <p r o p e r t y name=”name” v a l u e=” He r c u l e s ” /> 5 <p r o p e r t y name=” power ” r e f=” super−s t r e n g t h ” /> 6 </ bean> 1 <bean i d=” power ” c l a s s=”pk . demo . s p r i n g . EnormousStrength ”/> 2 3 <bean i d=” h e r c u l e s ” c l a s s=”pk . demo . s p r i n g . DemiGod” a u t owi r e=”byName ”> 4 <p r o p e r t y name=”name” v a l u e=” He r c u l e s ” /> 5 </ bean> Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 7 / 41
  • 13. Automatyzacja obsługi komponentów Automatyczne wiazanie Wiazanie po typie 1 <bean i d=” super−s t r e n g t h ” c l a s s=”pk . demo . s p r i n g . EnormousStrength ”/> 2 3 <bean i d=” h e r c u l e s ” c l a s s=”pk . demo . s p r i n g . DemiGod” a u t owi r e=” byType ”> 4 <p r o p e r t y name=”name” v a l u e=” He r c u l e s ” /> 5 </ bean> Jak sobie radzic z mnogoscia implementacji? primary="false" autowire-candidate="false" Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 8 / 41
  • 14. Automatyzacja obsługi komponentów Automatyczne wiazanie Wiazanie po typie 1 <bean i d=” super−s t r e n g t h ” c l a s s=”pk . demo . s p r i n g . EnormousStrength ”/> 2 3 <bean i d=” h e r c u l e s ” c l a s s=”pk . demo . s p r i n g . DemiGod” a u t owi r e=” byType ”> 4 <p r o p e r t y name=”name” v a l u e=” He r c u l e s ” /> 5 </ bean> Jak sobie radzic z mnogoscia implementacji? primary="false" autowire-candidate="false" Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 8 / 41
  • 15. Automatyzacja obsługi komponentów Automatyczne wiazanie Pozostałe rodzaje wiazan 1 <bean i d=” super−s t r e n g t h ” c l a s s=”pk . demo . s p r i n g . EnormousStrength ”/> 2 3 <bean i d=” h e r c u l e s ” c l a s s=”pk . demo . s p r i n g . DemiGod” a u t owi r e=” c o n s t r u c t o r ” /> 1 <bean i d=” super−s t r e n g t h ” c l a s s=”pk . demo . s p r i n g . EnormousStrength ”/> 2 3 <bean i d=” h e r c u l e s ” c l a s s=”pk . demo . s p r i n g . DemiGod” a u t owi r e=” a u t o d e t e c t ” /> Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 9 / 41
  • 16. Automatyzacja obsługi komponentów Automatyczne wiazanie Pozostałe rodzaje wiazan 1 <bean i d=” super−s t r e n g t h ” c l a s s=”pk . demo . s p r i n g . EnormousStrength ”/> 2 3 <bean i d=” h e r c u l e s ” c l a s s=”pk . demo . s p r i n g . DemiGod” a u t owi r e=” c o n s t r u c t o r ” /> 1 <bean i d=” super−s t r e n g t h ” c l a s s=”pk . demo . s p r i n g . EnormousStrength ”/> 2 3 <bean i d=” h e r c u l e s ” c l a s s=”pk . demo . s p r i n g . DemiGod” a u t owi r e=” a u t o d e t e c t ” /> Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 9 / 41
  • 17. Automatyzacja obsługi komponentów Automatyczne wiazanie Dodatkowe mozliwosci wiazan Domyslny rodzaj wiazania (w pliku) <beans ... default-autowire="<type>" > ... </beans> Nadpisywanie jawna deklaracja argumentu Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 10 / 41
  • 18. Automatyzacja obsługi komponentów Automatyczne wiazanie Rozpoznawanie adnotacji 1 <? xml v e r s i o n=” 1 . 0 ” enc oding=”UTF−8” ?> 2 <beans xmlns=” h t t p : //www. s p r i n g f r amewo r k . org / schema / beans ” 3 xml n s : x s i=” h t t p : //www.w3 . org /2001/XMLSchema−i n s t a n c e ” 4 xml n s : c o n t e x t=” h t t p : //www. s p r i n g f r amewo r k . org / schema / c o n t e x t ” 5 x s i : s c h ema L o c a t i o n=” h t t p : //www. s p r i n g f r amewo r k . org / schema / beans 6 h t t p : //www. s p r i n g f r amewo r k . org / schema / beans / s p r i n g−beans −3.0. xsd 7 h t t p : //www. s p r i n g f r amewo r k . org / schema / c o n t e x t 8 h t t p : //www. s p r i n g f r amewo r k . org / schema / c o n t e x t / s p r i n g− cont e x t −3.0. xsd ”> 9 10 <c o n t e x t : a n n o t a t i o n −c o n f i g /> 11 12 <!−− d e k l a r a c j a z i a r e n −−> 13 14 </ beans> Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 11 / 41
  • 19. Automatyzacja obsługi komponentów Automatyczne wiazanie @Autowired 1 @Autowired // byType 2 p u b l i c void setPower ( Power power ) f 3 t h i s . power = power ; 4 g 1 @Autowired // byType 2 p u b l i c void ustawMiMoc ( Power power ) f 3 t h i s . power = power ; 4 g 1 @Autowired // c o n s t r u c t o r 2 p u b l i c DemiGod ( Power power ) f 3 t h i s . power = power ; 4 g 1 @Autowired ( r e q u i r e d=f a l s e ) // byType 2 p r i v a t e Power power ; Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 12 / 41
  • 20. Automatyzacja obsługi komponentów Automatyczne wiazanie @Autowired 1 @Autowired // byType 2 p u b l i c void setPower ( Power power ) f 3 t h i s . power = power ; 4 g 1 @Autowired // byType 2 p u b l i c void ustawMiMoc ( Power power ) f 3 t h i s . power = power ; 4 g 1 @Autowired // c o n s t r u c t o r 2 p u b l i c DemiGod ( Power power ) f 3 t h i s . power = power ; 4 g 1 @Autowired ( r e q u i r e d=f a l s e ) // byType 2 p r i v a t e Power power ; Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 12 / 41
  • 21. Automatyzacja obsługi komponentów Automatyczne wiazanie @Autowired 1 @Autowired // byType 2 p u b l i c void setPower ( Power power ) f 3 t h i s . power = power ; 4 g 1 @Autowired // byType 2 p u b l i c void ustawMiMoc ( Power power ) f 3 t h i s . power = power ; 4 g 1 @Autowired // c o n s t r u c t o r 2 p u b l i c DemiGod ( Power power ) f 3 t h i s . power = power ; 4 g 1 @Autowired ( r e q u i r e d=f a l s e ) // byType 2 p r i v a t e Power power ; Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 12 / 41
  • 22. Automatyzacja obsługi komponentów Automatyczne wiazanie @Autowired 1 @Autowired // byType 2 p u b l i c void setPower ( Power power ) f 3 t h i s . power = power ; 4 g 1 @Autowired // byType 2 p u b l i c void ustawMiMoc ( Power power ) f 3 t h i s . power = power ; 4 g 1 @Autowired // c o n s t r u c t o r 2 p u b l i c DemiGod ( Power power ) f 3 t h i s . power = power ; 4 g 1 @Autowired ( r e q u i r e d=f a l s e ) // byType 2 p r i v a t e Power power ; Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 12 / 41
  • 23. Automatyzacja obsługi komponentów Automatyczne wiazanie @Autowired + @Qualifier 1 @Autowired 2 @Qu a l i f i e r ( ” s t r e n g t h ” ) // byName++ 3 p r i v a t e Power power ; 1 <bean i d=” s t r e n g t h ” c l a s s=”pk . demo . s p r i n g . EnormousStrength ”/> 1 <bean i d=” super−s t r e n g t h ” c l a s s=”pk . demo . s p r i n g . EnormousStrength ”> 2 <q u a l i f i e r v a l u e=” s t r e n g t h ” /> 3 </ bean> 1 @Qu a l i f i e r ( ” s t r e n g t h ” ) 2 @Qu a l i f i e r ( ” b o r r i n g ” ) 3 p u b l i c c l a s s EnormousStrength implements Power f 4 . . . 5 g Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 13 / 41
  • 24. Automatyzacja obsługi komponentów Automatyczne wiazanie @Autowired + @Qualifier 1 @Autowired 2 @Qu a l i f i e r ( ” s t r e n g t h ” ) // byName++ 3 p r i v a t e Power power ; 1 <bean i d=” s t r e n g t h ” c l a s s=”pk . demo . s p r i n g . EnormousStrength ”/> 1 <bean i d=” super−s t r e n g t h ” c l a s s=”pk . demo . s p r i n g . EnormousStrength ”> 2 <q u a l i f i e r v a l u e=” s t r e n g t h ” /> 3 </ bean> 1 @Qu a l i f i e r ( ” s t r e n g t h ” ) 2 @Qu a l i f i e r ( ” b o r r i n g ” ) 3 p u b l i c c l a s s EnormousStrength implements Power f 4 . . . 5 g Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 13 / 41
  • 25. Automatyzacja obsługi komponentów Automatyczne wiazanie @Autowired + @Qualifier 1 @Autowired 2 @Qu a l i f i e r ( ” s t r e n g t h ” ) // byName++ 3 p r i v a t e Power power ; 1 <bean i d=” s t r e n g t h ” c l a s s=”pk . demo . s p r i n g . EnormousStrength ”/> 1 <bean i d=” super−s t r e n g t h ” c l a s s=”pk . demo . s p r i n g . EnormousStrength ”> 2 <q u a l i f i e r v a l u e=” s t r e n g t h ” /> 3 </ bean> 1 @Qu a l i f i e r ( ” s t r e n g t h ” ) 2 @Qu a l i f i e r ( ” b o r r i n g ” ) 3 p u b l i c c l a s s EnormousStrength implements Power f 4 . . . 5 g Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 13 / 41
  • 26. Automatyzacja obsługi komponentów Automatyczne wiazanie @Autowired + @Qualifier 1 @Autowired 2 @Qu a l i f i e r ( ” s t r e n g t h ” ) // byName++ 3 p r i v a t e Power power ; 1 <bean i d=” s t r e n g t h ” c l a s s=”pk . demo . s p r i n g . EnormousStrength ”/> 1 <bean i d=” super−s t r e n g t h ” c l a s s=”pk . demo . s p r i n g . EnormousStrength ”> 2 <q u a l i f i e r v a l u e=” s t r e n g t h ” /> 3 </ bean> 1 @Qu a l i f i e r ( ” s t r e n g t h ” ) 2 @Qu a l i f i e r ( ” b o r r i n g ” ) 3 p u b l i c c l a s s EnormousStrength implements Power f 4 . . . 5 g Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 13 / 41
  • 27. Automatyzacja obsługi komponentów Automatyczne wiazanie Własny kwalifikator 1 @Target (f ElementType . FIELD , ElementType .PARAMETER, ElementType .TYPE g) 2 @Re t ent ion ( Re t e n t i o nPo l i c y .RUNTIME) 3 @Qu a l i f i e r 4 p u b l i c @i n t e r f a c e StrengthPower f g 1 @StrengthPower 2 p u b l i c c l a s s EnormousStrength implements Power f 3 . . . 4 g 1 @Autowired 2 @StrengthPower 3 p r i v a t e Power power ; Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 14 / 41
  • 28. Automatyzacja obsługi komponentów Automatyczne wiazanie Własny kwalifikator 1 @Target (f ElementType . FIELD , ElementType .PARAMETER, ElementType .TYPE g) 2 @Re t ent ion ( Re t e n t i o nPo l i c y .RUNTIME) 3 @Qu a l i f i e r 4 p u b l i c @i n t e r f a c e StrengthPower f g 1 @StrengthPower 2 p u b l i c c l a s s EnormousStrength implements Power f 3 . . . 4 g 1 @Autowired 2 @StrengthPower 3 p r i v a t e Power power ; Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 14 / 41
  • 29. Automatyzacja obsługi komponentów Automatyczne wiazanie Własny kwalifikator 1 @Target (f ElementType . FIELD , ElementType .PARAMETER, ElementType .TYPE g) 2 @Re t ent ion ( Re t e n t i o nPo l i c y .RUNTIME) 3 @Qu a l i f i e r 4 p u b l i c @i n t e r f a c e StrengthPower f g 1 @StrengthPower 2 p u b l i c c l a s s EnormousStrength implements Power f 3 . . . 4 g 1 @Autowired 2 @StrengthPower 3 p r i v a t e Power power ; Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 14 / 41
  • 30. Automatyzacja obsługi komponentów Automatyczne wiazanie @Value 1 @Value ( ” He r k u l e s ” ) 2 p r i v a t e S t r i n g name ; 1 @Value ( ”#fs y s t emPr o p e r t i e s . heroNameg” ) 2 p r i v a t e S t r i n g name ; Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 15 / 41
  • 31. Automatyzacja obsługi komponentów Automatyczne wiazanie @Value 1 @Value ( ” He r k u l e s ” ) 2 p r i v a t e S t r i n g name ; 1 @Value ( ”#fs y s t emPr o p e r t i e s . heroNameg” ) 2 p r i v a t e S t r i n g name ; Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 15 / 41
  • 32. Automatyzacja obsługi komponentów Automatyczne definiowanie Skanowanie komponentów 1 <? xml v e r s i o n=” 1 . 0 ” enc oding=”UTF−8” ?> 2 <beans xmlns=” h t t p : //www. s p r i n g f r amewo r k . org / schema / beans ” 3 xml n s : x s i=” h t t p : //www.w3 . org /2001/XMLSchema−i n s t a n c e ” 4 xml n s : c o n t e x t=” h t t p : //www. s p r i n g f r amewo r k . org / schema / c o n t e x t ” 5 x s i : s c h ema L o c a t i o n=” h t t p : //www. s p r i n g f r amewo r k . org / schema / beans 6 h t t p : //www. s p r i n g f r amewo r k . org / schema / beans / s p r i n g−beans −3.0. xsd 7 h t t p : //www. s p r i n g f r amewo r k . org / schema / c o n t e x t 8 h t t p : //www. s p r i n g f r amewo r k . org / schema / c o n t e x t / s p r i n g− cont e x t −3.0. xsd ”> 9 10 <cont e x t : component−scan base−package=”pk . demo . s p r i n g ” /> 11 <!−− z automatu c o n t e x t : a n n o t a t i o n −c o n f i g −−> 12 13 <!−− d e k l a r a c j a z i a r e n −−> 14 15 </ beans> Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 16 / 41
  • 33. Automatyzacja obsługi komponentów Automatyczne definiowanie Rodzaje komponentów @Component @Controller @Repository @Service Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 17 / 41
  • 34. Automatyzacja obsługi komponentów Automatyczne definiowanie Definiowanie komponentów 1 @Component // name == enormousSt r ength 2 p u b l i c EnormousStrength implements Power f 3 . . . 4 g 1 @Component ( ” h e r c u l e s ” ) // name == h e r c u l e s 2 p u b l i c DemiGod implements Hero f 3 . . . 4 g 1 @Component 2 @Qu a l i f i e r ( ” c a r t o o n ” ) 3 @Scope ( ” p r o t o t y p e ” ) 4 p u b l i c SuperHero implements Hero f 5 . . . 6 g Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 18 / 41
  • 35. Automatyzacja obsługi komponentów Automatyczne definiowanie Definiowanie komponentów 1 @Component // name == enormousSt r ength 2 p u b l i c EnormousStrength implements Power f 3 . . . 4 g 1 @Component ( ” h e r c u l e s ” ) // name == h e r c u l e s 2 p u b l i c DemiGod implements Hero f 3 . . . 4 g 1 @Component 2 @Qu a l i f i e r ( ” c a r t o o n ” ) 3 @Scope ( ” p r o t o t y p e ” ) 4 p u b l i c SuperHero implements Hero f 5 . . . 6 g Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 18 / 41
  • 36. Automatyzacja obsługi komponentów Automatyczne definiowanie Definiowanie komponentów 1 @Component // name == enormousSt r ength 2 p u b l i c EnormousStrength implements Power f 3 . . . 4 g 1 @Component ( ” h e r c u l e s ” ) // name == h e r c u l e s 2 p u b l i c DemiGod implements Hero f 3 . . . 4 g 1 @Component 2 @Qu a l i f i e r ( ” c a r t o o n ” ) 3 @Scope ( ” p r o t o t y p e ” ) 4 p u b l i c SuperHero implements Hero f 5 . . . 6 g Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 18 / 41
  • 37. Automatyzacja obsługi komponentów Automatyczne definiowanie Filtrowanie zakresu skanowania annotation assignable aspectj custom regex 1 <cont e x t : component−scan base−package=”pk . demo . s p r i n g ”> 2 <c o n t e x t : i n c l u d e −f i l t e r t ype=” a s s i g n a b l e ” 3 e x p r e s s i o n=”pk . demo . s p r i n g . Power ”/> 4 <c o n t e x t : e x c l u d e −f i l t e r t ype=” a n n o t a t i o n ” 5 e x p r e s s i o n=”pk . demo . s p r i n g . S k i p I t ”/> 6 </ cont e x t : component−scan> Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 19 / 41
  • 38. Automatyzacja obsługi komponentów Automatyczne definiowanie Filtrowanie zakresu skanowania annotation assignable aspectj custom regex 1 <cont e x t : component−scan base−package=”pk . demo . s p r i n g ”> 2 <c o n t e x t : i n c l u d e −f i l t e r t ype=” a s s i g n a b l e ” 3 e x p r e s s i o n=”pk . demo . s p r i n g . Power ”/> 4 <c o n t e x t : e x c l u d e −f i l t e r t ype=” a n n o t a t i o n ” 5 e x p r e s s i o n=”pk . demo . s p r i n g . S k i p I t ”/> 6 </ cont e x t : component−scan> Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 19 / 41
  • 39. Automatyzacja obsługi komponentów Automatyczne definiowanie Standardowe zamienniki Spring javax.inject.* @Autowired @Inject (bez required) @Qualifier @Named @Component @Named @Scope("singleton") @Singleton * @Value — Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 20 / 41
  • 40. Programowanie aspektowe Plan wykładu 1 Automatyzacja obsługi komponentów Automatyczne wiazanie Automatyczne definiowanie 2 Programowanie aspektowe Wprowadzenie do Spring AOP Deklarowanie aspektów 3 Podsumowanie Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 21 / 41
  • 41. Programowanie aspektowe O co tyle chałasu? Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 22 / 41
  • 42. Programowanie aspektowe Wprowadzenie do Spring AOP Czym jest programowanie aspektowe? Pomocnicze funkcjonalnosci przekrojowe OOP dziedziczenie delegacja AOP implementacja w jednym miejscu modularyzacja w aspekty opis, gdzie i jak uzyc główna funkcjonalnosc nie jest zasmiecona Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 23 / 41
  • 43. Programowanie aspektowe Wprowadzenie do Spring AOP Podstawowa terminologia Advice (rada) — odczyt licznika (before, after, after-returning, after-throwing, around) Join points (punkty złaczen) — wszelkie urzadzenia elektryczne Pointcuts (punkty interakcji) — lista liczników (i domów) Aspect = Advice + Pointcuts Introduction (wprowadzenie) Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 24 / 41
  • 44. Programowanie aspektowe Wprowadzenie do Spring AOP Podstawowa terminologia Advice (rada) — odczyt licznika (before, after, after-returning, after-throwing, around) Join points (punkty złaczen) — wszelkie urzadzenia elektryczne Pointcuts (punkty interakcji) — lista liczników (i domów) Aspect = Advice + Pointcuts Introduction (wprowadzenie) Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 24 / 41
  • 45. Programowanie aspektowe Wprowadzenie do Spring AOP Podstawowa terminologia Advice (rada) — odczyt licznika (before, after, after-returning, after-throwing, around) Join points (punkty złaczen) — wszelkie urzadzenia elektryczne Pointcuts (punkty interakcji) — lista liczników (i domów) Aspect = Advice + Pointcuts Introduction (wprowadzenie) Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 24 / 41
  • 46. Programowanie aspektowe Wprowadzenie do Spring AOP Podstawowa terminologia Advice (rada) — odczyt licznika (before, after, after-returning, after-throwing, around) Join points (punkty złaczen) — wszelkie urzadzenia elektryczne Pointcuts (punkty interakcji) — lista liczników (i domów) Aspect = Advice + Pointcuts Introduction (wprowadzenie) Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 24 / 41
  • 47. Programowanie aspektowe Wprowadzenie do Spring AOP Podstawowa terminologia Advice (rada) — odczyt licznika (before, after, after-returning, after-throwing, around) Join points (punkty złaczen) — wszelkie urzadzenia elektryczne Pointcuts (punkty interakcji) — lista liczników (i domów) Aspect = Advice + Pointcuts Introduction (wprowadzenie) Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 24 / 41
  • 48. Programowanie aspektowe Wprowadzenie do Spring AOP Aspekty w Springu Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 25 / 41
  • 49. Programowanie aspektowe Wprowadzenie do Spring AOP Tworzenie punktów interakcji struktura 1 e x e c u t i o n (* pk . demo . s p r i n g . Power . use ( . . ) 2 && wi t h i n ( pk . demo . s p r i n g . c a r t o o n s . * ) 3 and ! bean ( spiderMan ) ) args(), @args() execution() this() target(), @target() within(), @within() @annotation() Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 26 / 41
  • 50. Programowanie aspektowe Wprowadzenie do Spring AOP Tworzenie punktów interakcji struktura 1 e x e c u t i o n (* pk . demo . s p r i n g . Power . use ( . . ) 2 && wi t h i n ( pk . demo . s p r i n g . c a r t o o n s . * ) 3 and ! bean ( spiderMan ) ) args(), @args() execution() this() target(), @target() within(), @within() @annotation() Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 26 / 41
  • 51. Programowanie aspektowe Deklarowanie aspektów Deklarowanie aspektów xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="... http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd" <aop:config> <aop:aspect> <aop:pointcut> Czas wykonania <aop:before> <aop:around> <aop:after>, <aop:after-returning>, <aop:after-throwing> Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 27 / 41
  • 52. Programowanie aspektowe Deklarowanie aspektów Reporter 1 package pk . demo . s p r i n g ; 2 3 p u b l i c c l a s s Re p o r t e r f 4 5 // Be f o r e r e s c u e 6 p u b l i c void t a k eVi ewp o i n t ( ) f 7 System . out . p r i n t l n ( ”The r e p o r t e r i s t a k i n g p e r f e c t v i ewp o i n t ” ) ; 8 g 9 // Be f o r e r e s c u e 10 p u b l i c void prepareCamera ( ) f 11 System . out . p r i n t l n ( ”The r e p o r t e r i s p r e p a r i n g camera f o r t a k i n g photos ” ) ; 12 g 13 // Af t e r r e s c u e 14 p u b l i c void w r i t e A r t i c l e ( ) f 15 System . out . p r i n t l n ( ”The r e p o r t e r i s wr i t i n g a r t i c l e ” ) ; 16 g 17 // Af t e r f a i l e d r e s c u e 18 p u b l i c void e s c ape ( ) f 19 System . out . p r i n t l n ( ”The r e p o r t e r s c r eams : Help me ! ” ) ; 20 g 21 g Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 28 / 41
  • 53. Programowanie aspektowe Deklarowanie aspektów Zatrudnienie reportera I 1 <bean i d=” r e p o r t e r ” c l a s s=”pk . demo . s p r i n g . Re p o r t e r ” /> 2 3 <a o p : c o n f i g> 4 <a o p : a s p e c t r e f=” r e p o r t e r ”> 5 <a o p : b e f o r e p o i n t c u t=” e x e c u t i o n (* pk . demo . s p r i n g . Hero . r e s c u e ( . . ) ) ” method=” t a k eVi ewp o i n t ” /> 6 <a o p : b e f o r e p o i n t c u t=” e x e c u t i o n (* pk . demo . s p r i n g . Hero . r e s c u e ( . . ) ) ” method=” prepareCamera ” /> 7 <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=” e x e c u t i o n (* pk . demo . s p r i n g . Hero . r e s c u e ( . . ) ) ” method=” w r i t e A r t i c l e ” /> 8 <a o p : a f t e r −thr owing p o i n t c u t=” e x e c u t i o n (* pk . demo . s p r i n g . Hero . r e s c u e ( . . ) ) ” method=” e s c ape ” /> 9 </ a o p : a s p e c t> 10 </ a o p : c o n f i g> Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 29 / 41
  • 54. Programowanie aspektowe Deklarowanie aspektów Zatrudnienie reportera II 1 <bean i d=” r e p o r t e r ” c l a s s=”pk . demo . s p r i n g . Re p o r t e r ” /> 2 3 <a o p : c o n f i g> 4 <a o p : a s p e c t r e f=” r e p o r t e r ”> 5 <a o p : p o i n t c u t i d=” r e s c u e ” e x p r e s s i o n=” e x e c u t i o n (* pk . demo . s p r i n g . Hero . r e s c u e ( . . ) ) ” /> 6 <a o p : b e f o r e p o i n t c u t−r e f=” r e s c u e ” method=” t a k eVi ewp o i n t ” /> 7 <a o p : b e f o r e p o i n t c u t−r e f=” r e s c u e ” method=” prepareCamera ” /> 8 <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=” r e s c u e ” method=” w r i t e A r t i c l e ” /> 9 <a o p : a f t e r −thr owing p o i n t c u t−r e f=” r e s c u e ” method=” e s c ape ” /> 10 </ a o p : a s p e c t> 11 </ a o p : c o n f i g> Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 30 / 41
  • 55. Programowanie aspektowe Deklarowanie aspektów Jak reporter (współ-)pracuje? logika biznesowa aspekt logika aspektowa try f <aop:before ... method="takeViewpoint"/> reporter.takeViewpoint(); <aop:before ... method="prepareCamera"/> reporter.prepareCamera(); hero.rescue() <aop:after-returning ... method="writeArticle"/> reporter.writeArticle(); g catch(Exception e) f <aop:after-throwing ... method="escape"/> reporter.escape(); g Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 31 / 41
  • 56. Programowanie aspektowe Deklarowanie aspektów Sprytny reporter 1 package pk . demo . s p r i n g ; 2 3 p u b l i c c l a s s Smar tRepor t e r f 4 5 p u b l i c void o b s e r v e ( Pr o c e e d i n g J o i nPo i n t j o i n p o i n t ) f 6 t r y f 7 System . out . p r i n t l n ( ”The r e p o r t e r i s t a k i n g p e r f e c t v i ewp o i n t ” ) ; 8 System . out . p r i n t l n ( ”The r e p o r t e r i s p r e p a r i n g camera f o r t a k i n g photos ” ) ; 9 10 wh i l e ( ! takeGoodPhoto ( ) ) f 11 j o i n p o i n t . proc e ed ( ) ; 12 g 13 14 System . out . p r i n t l n ( ”The r e p o r t e r i s wr i t i n g a r t i c l e ” ) ; 15 g catch ( Ex c e p t i o n e ) f 16 System . out . p r i n t l n ( ”The r e p o r t e r s c r eams : Help me ! ” ) ; 17 g 18 g 19 g Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 32 / 41
  • 57. Programowanie aspektowe Deklarowanie aspektów Zatrudnienie sprytnego reportera 1 <bean i d=” r e p o r t e r ” c l a s s=”pk . demo . s p r i n g . Smar tRepor t e r ” /> 2 3 <a o p : c o n f i g> 4 <a o p : a s p e c t r e f=” r e p o r t e r ”> 5 <a o p : p o i n t c u t i d=” r e s c u e ” e x p r e s s i o n=” e x e c u t i o n (* pk . demo . s p r i n g . Hero . r e s c u e ( . . ) ) ” /> 6 <aop: a round p o i n t c u t−r e f=” r e s c u e ” method=” o b s e r v e ” /> 7 </ a o p : a s p e c t> 8 </ a o p : c o n f i g> Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 33 / 41
  • 58. Programowanie aspektowe Deklarowanie aspektów Przekazywanie parametru 1 package pk . demo . s p r i n g ; 2 3 p u b l i c i n t e r f a c e Thinke r f 4 void thinkOfSome thing ( S t r i n g thought s ) ; 5 g 1 package pk . demo . s p r i n g ; 2 3 p u b l i c c l a s s Magician f 4 p u b l i c void i n t e r c e p tTh o u g h t s ( S t r i n g thought s ) f 5 System . out . p r i n t l n ( ” Vo l u n t e e r t h i n k s about ’ thought s ’ ” ) ; 6 g 7 g 1 <a o p : c o n f i g> 2 <a o p : a s p e c t r e f=”magi c i an ”> 3 <a o p : p o i n t c u t i d=” t h i n k i n g ” e x p r e s s i o n=” e x e c u t i o n (* pk . demo . s p r i n g . Thinke r . thinkOfSome thing ( S t r i n g ) ) and a r g s ( thought s ) ” /> 4 <a o p : b e f o r e p o i n t c u t−r e f=” t h i n k i n g ” method=” i n t e r c e p tTh o u g h t s ” arg−names=” thought s ” /> 5 </ a o p : a s p e c t> 6 <M/ikaołoajpO:lsczeownskfi i(gW>ZIM SGGW) Programowanie Komponentowe Wykład #B 34 / 41
  • 59. Programowanie aspektowe Deklarowanie aspektów Przekazywanie parametru 1 package pk . demo . s p r i n g ; 2 3 p u b l i c i n t e r f a c e Thinke r f 4 void thinkOfSome thing ( S t r i n g thought s ) ; 5 g 1 package pk . demo . s p r i n g ; 2 3 p u b l i c c l a s s Magician f 4 p u b l i c void i n t e r c e p tTh o u g h t s ( S t r i n g thought s ) f 5 System . out . p r i n t l n ( ” Vo l u n t e e r t h i n k s about ’ thought s ’ ” ) ; 6 g 7 g 1 <a o p : c o n f i g> 2 <a o p : a s p e c t r e f=”magi c i an ”> 3 <a o p : p o i n t c u t i d=” t h i n k i n g ” e x p r e s s i o n=” e x e c u t i o n (* pk . demo . s p r i n g . Thinke r . thinkOfSome thing ( S t r i n g ) ) and a r g s ( thought s ) ” /> 4 <a o p : b e f o r e p o i n t c u t−r e f=” t h i n k i n g ” method=” i n t e r c e p tTh o u g h t s ” arg−names=” thought s ” /> 5 </ a o p : a s p e c t> 6 <M/ikaołoajpO:lsczeownskfi i(gW>ZIM SGGW) Programowanie Komponentowe Wykład #B 34 / 41
  • 60. Programowanie aspektowe Deklarowanie aspektów Przekazywanie parametru 1 package pk . demo . s p r i n g ; 2 3 p u b l i c i n t e r f a c e Thinke r f 4 void thinkOfSome thing ( S t r i n g thought s ) ; 5 g 1 package pk . demo . s p r i n g ; 2 3 p u b l i c c l a s s Magician f 4 p u b l i c void i n t e r c e p tTh o u g h t s ( S t r i n g thought s ) f 5 System . out . p r i n t l n ( ” Vo l u n t e e r t h i n k s about ’ thought s ’ ” ) ; 6 g 7 g 1 <a o p : c o n f i g> 2 <a o p : a s p e c t r e f=”magi c i an ”> 3 <a o p : p o i n t c u t i d=” t h i n k i n g ” e x p r e s s i o n=” e x e c u t i o n (* pk . demo . s p r i n g . Thinke r . thinkOfSome thing ( S t r i n g ) ) and a r g s ( thought s ) ” /> 4 <a o p : b e f o r e p o i n t c u t−r e f=” t h i n k i n g ” method=” i n t e r c e p tTh o u g h t s ” arg−names=” thought s ” /> 5 </ a o p : a s p e c t> 6 <M/ikaołoajpO:lsczeownskfi i(gW>ZIM SGGW) Programowanie Komponentowe Wykład #B 34 / 41
  • 61. Programowanie aspektowe Deklarowanie aspektów JoinPoint interfejs JoinPoint getArgs() getSignature() getSourceLocation() getTarget() getThis() . . . Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 35 / 41
  • 62. Programowanie aspektowe Deklarowanie aspektów Wprowadzenie nowej funkcjonalnosci Co to przypomina? Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 36 / 41
  • 63. Programowanie aspektowe Deklarowanie aspektów Wprowadzenie nowej funkcjonalnosci Co to przypomina? Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 36 / 41
  • 64. Programowanie aspektowe Deklarowanie aspektów Domieszkowanie 1 package pk . demo . s p r i n g . 2 3 p u b l i c i n t e r f a c e S t o r yTe l l e r f 4 p u b l i c S t r i n g t e l lTh e S t o r y ( ) ; 5 g 1 <a o p : c o n f i g> 2 <a o p : d e c l a r e −p a r e n t s 3 t ype s−matching=”pk . demo . s p r i n g . Hero+” 4 implement−i n t e r f a c e=”pk . demo . s p r i n g . S t o r yTe l l e r ” 5 d e f a u l t−impl=”pk . demo . s p r i n g . F a n t a s i s t ” /> 6 </ a o p : c o n f i g> 1 <bean i d=” f a n t a s i s t ” c l a s s=”pk . demo . s p r i n g . F a n t a s i s t ” /> 2 <a o p : c o n f i g> 3 <a o p : d e c l a r e −p a r e n t s 4 t ype s−matching=”pk . demo . s p r i n g . Hero+” 5 implement−i n t e r f a c e=”pk . demo . s p r i n g . S t o r yTe l l e r ” 6 d e l e g a t e−r e f=” f a n t a s i s t ” /> 7 </ a o p : c o n f i g> Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 37 / 41
  • 65. Programowanie aspektowe Deklarowanie aspektów Domieszkowanie 1 package pk . demo . s p r i n g . 2 3 p u b l i c i n t e r f a c e S t o r yTe l l e r f 4 p u b l i c S t r i n g t e l lTh e S t o r y ( ) ; 5 g 1 <a o p : c o n f i g> 2 <a o p : d e c l a r e −p a r e n t s 3 t ype s−matching=”pk . demo . s p r i n g . Hero+” 4 implement−i n t e r f a c e=”pk . demo . s p r i n g . S t o r yTe l l e r ” 5 d e f a u l t−impl=”pk . demo . s p r i n g . F a n t a s i s t ” /> 6 </ a o p : c o n f i g> 1 <bean i d=” f a n t a s i s t ” c l a s s=”pk . demo . s p r i n g . F a n t a s i s t ” /> 2 <a o p : c o n f i g> 3 <a o p : d e c l a r e −p a r e n t s 4 t ype s−matching=”pk . demo . s p r i n g . Hero+” 5 implement−i n t e r f a c e=”pk . demo . s p r i n g . S t o r yTe l l e r ” 6 d e l e g a t e−r e f=” f a n t a s i s t ” /> 7 </ a o p : c o n f i g> Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 37 / 41
  • 66. Programowanie aspektowe Deklarowanie aspektów Domieszkowanie 1 package pk . demo . s p r i n g . 2 3 p u b l i c i n t e r f a c e S t o r yTe l l e r f 4 p u b l i c S t r i n g t e l lTh e S t o r y ( ) ; 5 g 1 <a o p : c o n f i g> 2 <a o p : d e c l a r e −p a r e n t s 3 t ype s−matching=”pk . demo . s p r i n g . Hero+” 4 implement−i n t e r f a c e=”pk . demo . s p r i n g . S t o r yTe l l e r ” 5 d e f a u l t−impl=”pk . demo . s p r i n g . F a n t a s i s t ” /> 6 </ a o p : c o n f i g> 1 <bean i d=” f a n t a s i s t ” c l a s s=”pk . demo . s p r i n g . F a n t a s i s t ” /> 2 <a o p : c o n f i g> 3 <a o p : d e c l a r e −p a r e n t s 4 t ype s−matching=”pk . demo . s p r i n g . Hero+” 5 implement−i n t e r f a c e=”pk . demo . s p r i n g . S t o r yTe l l e r ” 6 d e l e g a t e−r e f=” f a n t a s i s t ” /> 7 </ a o p : c o n f i g> Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 37 / 41
  • 67. Podsumowanie Plan wykładu 1 Automatyzacja obsługi komponentów Automatyczne wiazanie Automatyczne definiowanie 2 Programowanie aspektowe Wprowadzenie do Spring AOP Deklarowanie aspektów 3 Podsumowanie Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 38 / 41
  • 68. Podsumowanie Podsumowanie Automatyczne rozwiazywanie zaleznosci z mozliwoscia konfiguracji Skanowanie w poszukiwaniu komponentów z mozliwoscia doprecyzowania rodzaju i filtrowaniem Grupowanie przekrojowych funkcjonalnosci za pomoca aspektów Wprowadzanie nowych funkcjonalnosci za pomoca domieszek Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 39 / 41
  • 69. Podsumowanie Do domu Przeczytac rozdziały 3, 4 ze „Spring w Akcji” (3. lub 4. ed.) W praktyce zapoznac sie z adnotacjami i aspektami springowymi Poznac funkcjonalnosc interfejsów JoinPoint i ProceedingJoinPoint Komponenty w javie jak na poprzednie zajecia interfejsy w pakiecie pk.labs.LabB.Contracts automatyczna rejestracja przez springa Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 40 / 41
  • 70. Podsumowanie Mikołaj Olszewski (WZIM SGGW) Programowanie Komponentowe Wykład #B 41 / 41