
рд╕реНрдкреНрд░рд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рд╕рдордЭрдиреЗ рдФрд░ рд╕реАрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЬрдЯрд┐рд▓ рд░реВрдкрд░реЗрдЦрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдЕрдзрд┐рдХрд╛рдВрд╢ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЗрд╕реЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдФрд░ Google рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдзреАрд░реЗ-рдзреАрд░реЗ рд╕реАрдЦрддреЗ рд╣реИрдВред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкреНрд░рднрд╛рд╡реА рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкреВрд░реА рддрд╕реНрд╡реАрд░ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ рдФрд░ рд╕рд╛рде рд╣реА рдпрд╣ рдорд╣рдВрдЧрд╛ рд╣реИред
рдореИрдВ рдЖрдкрдХреЛ рд╕реНрдкреНрд░рд┐рдВрдЧ рдХреЗ рдЕрдзреНрдпрдпрди рдХреЗ рд▓рд┐рдП рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ рдирдП рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдпрд╣ рдЗрд╕ рддрдереНрдп рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ рдХрд┐ рдПрдХ рд╡реНрдпрдХреНрддрд┐ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рд╡рд╕рдВрдд рдХреЗ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рдЦрд╝рд╛рд╕рд┐рдпрдд рдпрд╣ рд╣реИ рдХрд┐, рд╡рд╕рдВрдд рдХреЗ рдЕрдзреНрдпрдпрди рдХрд┐рдП рдЧрдП рдкрд╣рд▓реБрдУрдВ рдХреА 100% рд╕рдордЭ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдЬрд╛рд╡рд╛ рдХреЛрд░ (рдПрдиреЛрдЯреЗрд╢рди, рд░рд┐рдлреНрд▓реЗрдХреНрд╢рди, рдлрд╛рдЗрд▓реНрд╕, рдЬреЗрдирд░рд┐рдХ) рдореЗрдВ рднреА рдмрдбрд╝реА рд╡реГрджреНрдзрд┐ рджреЗрддрд╛ рд╣реИред
рд▓реЗрдЦ рдЖрдкрдХреЛ рдПрдХ рдЕрд╡рд┐рд╕реНрдорд░рдгреАрдп рдЕрдиреБрднрд╡ рджреЗрдЧрд╛ рдФрд░ рдЖрдкрдХреЛ рдПрдХ рдирд┐рд░реНрдгрд╛рдпрдХ рдбреЗрд╡рд▓рдкрд░ рдХреА рддрд░рд╣ рдорд╣рд╕реВрд╕ рдХрд░рд╛рдПрдЧрд╛ред рдХрджрдо рд╕реЗ рдХрджрдо, рдЖрдк рдЕрдкрдиреА рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рд╕реЗрдо рдмрдирд╛рдПрдВрдЧреЗ рдФрд░ рдЙрдирдХреЗ рдЬреАрд╡рди рдЪрдХреНрд░ (рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд╕рдВрдд рдореЗрдВ рдЙрд╕реА рддрд░рд╣) рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░реЗрдВрдЧреЗред рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдХрдХреНрд╖рд╛рдПрдВ
рдмреАрдирдлреИрдХреНрдЯрд░реА ,
рдХрдВрдкреЛрдиреЗрдВрдЯ ,
рд╕рд░реНрд╡рд┐рд╕ ,
рдмреАрдирдкреЛрд╕реНрдЯрдкреНрд░реЛрд╕реЗрд╕рд░ ,
рдмреАрдирдирд╛рдорд╡реЗрдпрд░ ,
рдмреАрдирдлреИрдХреНрдЯрд░реАрд╡реЗрдпрд░ ,
рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝рд┐рдВрдЧ рдмреАрди ,
рдкреЛрд╕реНрдЯрдХрдВрд╕реНрдЯреНрд░рдХреНрдЯ ,
рдкреНрд░реАрдбреЗрд╕реНрдЯреНрд░реЙрдп ,
рдбрд┐рд╕реНрдкреЛрдЬреЗрдмрд▓ рдмреАрди ,
рдРрдкреНрд▓реАрдХреЗрд╢рдирдЯреЗрдХреНрд╕реНрдЯ ,
рдПрдкреНрд▓рд┐рдХреЗрд╢рдирд▓реАрд╕реНрдЯрдирд░ ,
рдХреЙрдирдЯреЗрдХреНрд╕реНрдЯрдбреЛрдЬреЗрдВрдЯ рд╣реИрдВ ред
рдереЛрдбрд╝рд╛ рдЕрдкрдиреЗ рдмрд╛рд░реЗ рдореЗрдВ
рдореЗрд░рд╛ рдирд╛рдо рдпрд╛рд░реЛрд╕реНрд▓рд╛рд╡ рд╣реИ рдФрд░ рдореИрдВ 4 рд╕рд╛рд▓ рдХреЗ рдЕрдиреБрднрд╡ рдХреЗ рд╕рд╛рде рдЬрд╛рд╡рд╛ рдбреЗрд╡рд▓рдкрд░ рд╣реВрдВред рдлрд┐рд▓рд╣рд╛рд▓ рдореИрдВ рдИрдкреАрдПрдПрдо рд╕рд┐рд╕реНрдЯрдореНрд╕ (рдПрд╕рдкреАрдмреА) рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рдореИрдВ рдЙрди рддрдХрдиреАрдХреЛрдВ рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рддрд▓реНрд▓реАрди рд╣реВрдВ рдЬреЛ рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЕрдХреНрд╕рд░ рдореБрдЭреЗ рд╡рд╕рдВрдд рд╕реЗ рдирд┐рдкрдЯрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рдФрд░ рдореИрдВ рдЗрд╕рдореЗрдВ рдХреБрдЫ рдмреАрдЪ рдХрд╛ рдореИрджрд╛рди рджреЗрдЦрддрд╛ рд╣реВрдВ рдЬрд┐рд╕рдореЗрдВ рдЖрдк рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ (рдЬрд╛рд╡рд╛ рд╣рд░ рдХреЛрдИ рдЗрддрдиреА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЬрд╛рдирддрд╛ рд╣реИ, рдФрд░ рдмрд╣реБрдд рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдХрд░рдг рдФрд░ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпрд╛рдВ рднреА рдЖ рд╕рдХрддреА рд╣реИрдВ рдФрд░ рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ)ред
рдХреБрдЫ рдорд╣реАрдиреЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рд╕реНрдкреНрд░рд┐рдВрдЧ рдкреНрд░реЛрдлреЗрд╢рдирд▓ v5.0 рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрд╢рди (рдХреЛрд░реНрд╕ рди рд▓реЗрдХрд░) рдкрд╛рд╕ рдХрд┐рдпрд╛ред рдЙрд╕рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдХреИрд╕реЗ рджреВрд╕рд░реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рдмрд╕рдВрдд рд╕рд┐рдЦрд╛рдпрд╛ рдЬрд╛рдПред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЗрд╕ рд╕рдордп рдХреЛрдИ рдкреНрд░рднрд╛рд╡реА рд╢рд┐рдХреНрд╖рдг рдкрджреНрдзрддрд┐ рдирд╣реАрдВ рд╣реИред рдЕрдзрд┐рдХрд╛рдВрд╢ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдкрд╛рд╕ рд░реВрдкрд░реЗрдЦрд╛ рдФрд░ рдЗрд╕рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдмрд╣реБрдд рд╕рддрд╣реА рд╡рд┐рдЪрд╛рд░ рд╣реИред рд╡рд╕рдВрдд рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдбреАрдмрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдФрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдмрд┐рд▓реНрдХреБрд▓ рдкреНрд░рднрд╛рд╡реА рдирд╣реАрдВ рд╣реИ (рдореИрдВ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЗрд╕ рдкрд░ рд╢реМрдХреАрди рдерд╛)ред 10 рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд░реЗрдВ? рд╣рд╛рдВ, рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдЖрдк рдЕрдкрдиреЗ рдЬреНрдЮрд╛рди рдХреЛ рдЧрд╣рд░рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЕрдиреБрднрд╡ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди "рд╣реБрдб рдХреЗ рдиреАрдЪреЗ" рдХрд╛ рдмрд╣реБрдд рдХреБрдЫ рдЖрдкрдХреЗ рд╕рд╛рдордиреЗ рдХрднреА рдирд╣реАрдВ рдЦреБрд▓реЗрдЧрд╛ред рдкрдврд╝реЗрдВ рдПрдХреНрд╢рди рдореЗрдВ рд╡рд╕рдВрдд? рд╢рд╛рдВрдд, рд▓реЗрдХрд┐рди рдкреНрд░рдпрд╛рд╕ рдореЗрдВ рдорд╣рдВрдЧрд╛ред рдореИрдВрдиреЗ рдЗрд╕реЗ 40% рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ (рдкреНрд░рдорд╛рдгрди рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░реА рдХреЗ рджреМрд░рд╛рди), рд▓реЗрдХрд┐рди рдпрд╣ рдЖрд╕рд╛рди рдирд╣реАрдВ рдерд╛ред
рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЛ рдЕрдВрдд рддрдХ рд╕рдордЭрдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рдЙрд╕реЗ рд╕реНрд╡рдпрдВ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рд╣реИред рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдореЗрд░реЗ рдкрд╛рд╕ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдерд╛ рдХрд┐ рдЖрдк рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рд╕реА рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдиреЗрддреГрддреНрд╡ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕рдХреЗ рдбреАрдЖрдИ рдврд╛рдВрдЪреЗ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреА рджреЗрдЦрд░реЗрдЦ рдХрд░реЗрдЧрд╛ред рдЗрд╕рдХреА рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛ рдпрд╣ рд╣реЛрдЧреА рдХрд┐ рдПрдкреАрдЖрдИ рдХрд╛ рдЕрдзреНрдпрдпрди рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рд╣реЛрдЧрд╛ред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рдЕрдЬреАрдмрддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╡рд╕рдВрдд рдХреА рдЧрд╣рд░реА (рдмрд┐рдирд╛ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди) рд╕рдордЭ рдХреЗ, рдПрдХ рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдЬрд╛рд╡рд╛ рдХреЛрд░ рдореЗрдВ рдПрдХ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдЕрдиреБрднрд╡ рдорд┐рд▓реЗрдЧрд╛ред рд╕рдЪ рдХрд╣реВрдВ, рддреЛ рдореИрдВрдиреЗ рд╕реНрд╡рдпрдВ рд▓реЗрдЦ рдХреА рддреИрдпрд╛рд░реА рдХреЗ рджреМрд░рд╛рди рд╡рд╕рдВрдд рдФрд░ рдЬрд╛рд╡рд╛ рдХреЛрд░ рджреЛрдиреЛрдВ рдкрд░ рдмрд╣реБрдд рд╕реА рдирдИ рдЪреАрдЬреЗрдВ рд╕реАрдЦреАрдВред рдЪрд▓реЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ!
рдЦрд░реЛрдВрдЪ рд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛
рддреЛ, рдкрд╣рд▓реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЕрдкрдиреА рдкрд╕рдВрджреАрджрд╛ рдЖрдИрдбреАрдИ рдЦреЛрд▓реЗрдВ рдФрд░ рдЦрд░реЛрдВрдЪ рд╕реЗ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдПрдВред рд╣рдо рдХрд┐рд╕реА рднреА рдорд╛рд╡реЗрди рдпрд╛ рдХрд┐рд╕реА рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рд╕реЗ рдирд╣реАрдВ рдЬреБрдбрд╝реЗрдВрдЧреЗред рд╣рдо рд╡рд╕рдВрдд рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рднреА рдирд╣реАрдВ рдЬреЛрдбрд╝реЗрдВрдЧреЗред рд╣рдорд╛рд░рд╛ рд▓рдХреНрд╖реНрдп рдПрдХ рдПрдкреАрдЖрдИ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рд╣реИ рдЬреЛ рд╕реНрдкреНрд░рд┐рдВрдЧ рдПрдкреАрдЖрдИ рдХреЗ рд╕рдорд╛рди рд╣реИ, рдФрд░ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рд▓рд╛рдЧреВ рдХрд░реЗрдВред
рдПрдХ рд╕реНрд╡рдЪреНрдЫ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, 2 рдореБрдЦреНрдп рдкреИрдХреЗрдЬ рдмрдирд╛рдПрдВред рдкрд╣рд▓рд╛ рдкреИрдХреЗрдЬ рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди (
com.kciray
), рдФрд░ рдЗрд╕рдХреЗ рдЕрдВрджрд░
Main.java
рд╡рд░реНрдЧ рд╣реИред рджреВрд╕рд░рд╛ рдкреИрдХреЗрдЬ org.springframework рд╣реИред рд╣рд╛рдВ, рд╣рдо рдореВрд▓ рд╕реНрдкреНрд░рд┐рдВрдЧ рдХреА рдкреИрдХреЗрдЬ рд╕рдВрд░рдЪрдирд╛, рдЙрд╕рдХреА рдХрдХреНрд╖рд╛рдУрдВ рдФрд░ рдЙрдирдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рдирд╛рдо рдХреА рдирдХрд▓ рдХрд░реЗрдВрдЧреЗред рдЗрд╕ рддрд░рд╣ рдХрд╛ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдкреНрд░рднрд╛рд╡ рд╣реИ - рдЬрдм рдЖрдк рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдХреБрдЫ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХрд╛ рдЕрдкрдирд╛ рд╕рд░рд▓ рдФрд░ рд╕рдордЭ рдореЗрдВ рдЖрдиреЗ рд▓рдЧрддрд╛ рд╣реИред рдлрд┐рд░, рдЬрдм рдЖрдк рдмрдбрд╝реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЖрдкрдХреЛ рдкреНрд░рддреАрдд рд╣реЛрдЧрд╛ рдХрд┐ рд╡рд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдЖрдкрдХреЗ рд╡рд░реНрдХрдкреАрд╕ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕рд┐рд╕реНрдЯрдо рдХреЛ рд╕рдордЧреНрд░ рд░реВрдк рд╕реЗ рд╕рдордЭрдиреЗ, рдЙрд╕рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ, рдмрдЧреНрд╕ рдХреЛ рдареАрдХ рдХрд░рдиреЗ, рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ, рдЗрддреНрдпрд╛рджрд┐ рдкрд░ рдмрд╣реБрдд рд╕рдХрд╛рд░рд╛рддреНрдордХ рдкреНрд░рднрд╛рд╡ рдбрд╛рд▓ рд╕рдХрддрд╛ рд╣реИред
рдпрджрд┐ рдЖрдкрдХреЛ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рддреЛ рдЖрдк
рдпрд╣рд╛рдВ рдПрдХ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ
рд╣реИрдВ ред
рдПрдХ рдХрдВрдЯреЗрдирд░ рдмрдирд╛рдПрдБ
рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрд╛рд░реНрдп рд╕реЗрдЯ рдХрд░реЗрдВред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 2 рд╡рд░реНрдЧ рд╣реИрдВ -
ProductFacade
рдФрд░
PromotionService
ред рдЕрдм рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдЖрдк рдЗрди рд╡рд░реНрдЧреЛрдВ рдХреЛ рдПрдХ-рджреВрд╕рд░реЗ рд╕реЗ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрддрдирд╛ рдХрд┐ рдХрдХреНрд╖рд╛рдПрдВ рд╕реНрд╡рдпрдВ рдПрдХ-рджреВрд╕рд░реЗ (рдкреИрдЯрд░реНрди DI) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВред рд╣рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рд╡рд░реНрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдЗрди рд╕рднреА рд╡рд░реНрдЧреЛрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░реЗрдЧрд╛ рдФрд░ рдЙрдирдХреЗ рдмреАрдЪ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░реЗрдЧрд╛ред рдЪрд▓реЛ рдЗрд╕реЗ рдПрдХ рдХрдВрдЯреЗрдирд░ рдХрд╣рддреЗ рд╣реИрдВред рдЪрд▓реЛ
Container
рд╡рд░реНрдЧ рдмрдирд╛рдПрдБ ... рд╣рд╛рд▓рд╛рдВрдХрд┐ рдирд╣реАрдВ, рд░реБрдХреЛ! рд╡рд╕рдВрдд рдореЗрдВ рдПрдХ рднреА рдХрдВрдЯреЗрдирд░ рд╡рд░реНрдЧ рдирд╣реАрдВ рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрдИ рдХрдВрдЯреЗрдирд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИрдВ, рдФрд░ рдЗрди рд╕рднреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиреЛрдВ рдХреЛ 2 рдкреНрд░рдХрд╛рд░реЛрдВ - рдмрд┐рди рдХрд╛рд░рдЦрд╛рдиреЛрдВ рдФрд░ рд╕рдВрджрд░реНрднреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдмрд┐рди рдХрд╛рд░рдЦрд╛рдирд╛ рд╕реЗрдо рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕рд╛рде рдЬреЛрдбрд╝рддрд╛ рд╣реИ (рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди, рдбреАрдЖрдИ), рдФрд░ рд╕рдВрджрд░реНрдн рдЙрд╕реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд░рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдпрд╣ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдВрджреЗрд╢реЛрдВ рдХрд╛ рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдпрдХрд░рдг)ред рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЕрдм рдЗрди рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдмрд┐рди рдХрд╛рд░рдЦрд╛рдиреЗ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред
рдПрдХ рдирдпрд╛
BeanFactory
рдХреНрд▓рд╛рд╕ рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ
BeanFactory
рдкреИрдХреЗрдЬ рдореЗрдВ рдбрд╛рд▓реЗрдВред рдЗрд╕ рдХреНрд▓рд╛рд╕ рдХреЗ рдЕрдВрджрд░
Map<String, Object> singletons
рд╕реНрдЯреЛрд░
Map<String, Object> singletons
рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдмрд┐рди рдХреА
id
рдХреЛ рдмрд┐рди рдореЗрдВ рд╣реА рдореИрдк рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ
Object getBean(String beanName)
рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВ, рдЬреЛ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рд╕реЗрдо рдХреЛ рдЦреАрдВрдЪрддрд╛ рд╣реИред
public class BeanFactory { private Map<String, Object> singletons = new HashMap(); public Object getBean(String beanName){ return singletons.get(beanName); } }
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐
BeanFactory
рдФрд░
FactoryBean
рджреЛ рдЕрд▓рдЧ рдЪреАрдЬреЗрдВ рд╣реИрдВред рдкрд╣рд▓рд╛ рдмрд┐рди рдХрд╛рд░рдЦрд╛рдирд╛ (рдХрдВрдЯреЗрдирд░) рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рдмрд┐рди рдХрд╛рд░рдЦрд╛рдирд╛ рд╣реИ, рдЬреЛ рдХрдВрдЯреЗрдирд░ рдХреЗ рдЕрдВрджрд░ рдмреИрдарддрд╛ рд╣реИ рдФрд░ рдбрд┐рдмреНрдмреЗ рдХрд╛ рдЙрддреНрдкрд╛рджрди рднреА рдХрд░рддрд╛ рд╣реИред рдлреИрдХреНрдЯреНрд░реА рдХреЗ рдЕрдВрджрд░ рдлреИрдХреНрдЯреНрд░реАред рдпрджрд┐ рдЖрдк рдЗрди рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдмреАрдЪ рднреНрд░рдорд┐рдд рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдпрд╛рдж рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рджреВрд╕рд░реА рд╕рдВрдЬреНрдЮрд╛ рдЕрдЧреНрд░рдгреА рд╣реИ, рдФрд░ рдкрд╣рд▓рд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖рдг рдЬреИрд╕рд╛ рд╣реИред рдмреАрди
рдлреИрдХреНрдЯреНрд░реА рдореЗрдВ, рдореБрдЦреНрдп рд╢рдмреНрдж рдлреИрдХреНрдЯреНрд░реА рд╣реИ, рдФрд░ рдлреИрдХреНрдЯреНрд░реА
рдмреАрди рдореЗрдВ рдмреАрди рд╣реИред
рдЕрдм,
ProductService
рдФрд░
PromotionsService
рдХрдХреНрд╖рд╛рдПрдВ рдмрдирд╛рдПрдБред
ProductService
рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЙрддреНрдкрд╛рдж рд▓реМрдЯрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдВрдЪрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕ рдЙрддреНрдкрд╛рдж рдкрд░ рдХреЛрдИ рдЫреВрдЯ (рдкреНрд░рдЪрд╛рд░) рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИред рдИ-рдХреЙрдорд░реНрд╕ рдореЗрдВ, рд░рд┐рдпрд╛рдпрддреА рдХрд╛рд░реНрдп рдХреЛ рдЕрдХреНрд╕рд░ рдПрдХ рдЕрд▓рдЧ рд╕реЗрд╡рд╛ рд╡рд░реНрдЧ (рдФрд░ рдХрднреА-рдХрднреА рддреГрддреАрдп-рдкрдХреНрд╖ рд╡реЗрдм рд╕реЗрд╡рд╛) рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
public class PromotionsService { } public class ProductService { private PromotionsService promotionsService; public PromotionsService getPromotionsService() { return promotionsService; } public void setPromotionsService(PromotionsService promotionsService) { this.promotionsService = promotionsService; } }
рдЕрдм рд╣рдореЗрдВ рдЕрдкрдиреЗ рдХрдВрдЯреЗрдирд░ (
BeanFactory
) рдХреЛ рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ, рдЙрдиреНрд╣реЗрдВ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдмрдирд╛рдиреЗ рдФрд░ рдПрдХ рдХреЛ рджреВрд╕рд░реЗ рдореЗрдВ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
new ProductService()
рддрд░рд╣ рд╕рдВрдЪрд╛рд▓рди рдХрдВрдЯреЗрдирд░ рдХреЗ рдЕрдВрджрд░ рд╕реНрдерд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдЗрдП рд╕рдмрд╕реЗ рдЖрдзреБрдирд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг (рдХрдХреНрд╖рд╛ рд╕реНрдХреИрдирд┐рдВрдЧ рдФрд░ рдПрдиреЛрдЯреЗрд╢рди) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ
@Component
(
@Component
org.springframework.beans.factory.stereotype
) рдХреЗ рд╕рд╛рде
@Component
рдПрдиреЛрдЯреЗрд╢рди рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
@Retention(RetentionPolicy.RUNTIME) public @interface Component { }
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдПрдиреЛрдЯреЗрд╢рди рдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рд▓реЛрдб рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдмрдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЪрд▓ рд░рд╣рд╛ рд╣реИ (
RetentionPolicy.CLASS
)ред рд╣рдордиреЗ рдПрдХ рдирдИ рдЕрд╡рдзрд╛рд░рдг рдиреАрддрд┐ (
RetentionPolicy.RUNTIME
) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ред
рдЕрдм
ProductService
рдХреНрд▓рд╛рд╕реЗрдЬ рд╕реЗ рдкрд╣рд▓реЗ рдФрд░
@Component
рд╕реЗ рдкрд╣рд▓реЗ
@Component
рдЬреЛрдбрд╝реЗрдВред
@Component public class ProductService {
рд╣рдореЗрдВ рдЕрдкрдиреЗ рдкреИрдХреЗрдЬ (
com.kciray
)
BeanFactory
рд╕реНрдХреИрди рдХрд░рдиреЗ рдФрд░ рдЗрд╕рдореЗрдВ рдЙрди рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ
@Component
рджреНрд╡рд╛рд░рд╛ рдПрдиреЛрдЯреЗрдЯ рдХрд┐рдП
@Component
ред рдпрд╣ рдХрд╛рд░реНрдп рддреБрдЪреНрдЫ рд╕реЗ рджреВрд░ рд╣реИред рдЬрд╛рд╡рд╛ рдХреЛрд░ рдореЗрдВ
рдХреЛрдИ рддреИрдпрд╛рд░ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ , рдФрд░ рд╣рдореЗрдВ рдЦреБрдж рдПрдХ рдмреИрд╕рд╛рдЦреА рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕ рдмреИрд╕рд╛рдЦреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рдЬрд╛рд░реЛрдВ рд╡рд╕рдВрдд рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдШрдЯрдХ рд╕реНрдХреИрдирд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рднрдпрд╛рдирдХ рд╕рддреНрдп рдЖрдкрдиреЗ рдЬрд╛рди рд▓рд┐рдпрд╛ рд╣реИред рдЖрдкрдХреЛ
ClassLoader
рд╕реЗ
ClassLoader
рдирд╛рдо рдирд┐рдХрд╛рд▓рдиреЗ
ClassLoader
рдФрд░ рдЬрд╛рдВрдЪрдирд╛ рд╣реЛрдЧрд╛
ClassLoader
рд╡реЗ ".class" рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ, рдФрд░ рдлрд┐рд░ рдЙрдирдХрд╛ рдкреВрд░рд╛ рдирд╛рдо рдмрдирд╛рдПрдБ рдФрд░ рдЙрд╕рдореЗрдВ рд╕реЗ рдХреНрд▓рд╛рд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдирд┐рдХрд╛рд▓ рджреЗрдВ!
рдореИрдВ рдЖрдкрдХреЛ рддреБрд░рдВрдд рдЪреЗрддрд╛рд╡рдиреА рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдХрдИ рдЬрд╛рдБрдЪ рдЕрдкрд╡рд╛рдж рд╣реЛрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рд▓рдкреЗрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд░рд╣реЗрдВред рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ, рд╣рдо рддрдп рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдХреНрдпрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╣рдо
BeanFactory
рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ
Main
рдореЗрдВ рдХреЙрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:
рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ
ClassLoader
рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рд▓реЛрдбрд┐рдВрдЧ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдХрд╛рдлреА рд╕рд░рд▓рддрд╛ рд╕реЗ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ:
ClassLoader classLoader = ClassLoader.getSystemClassLoader();
рдЖрдкрдиреЗ рд╢рд╛рдпрдж рдкрд╣рд▓реЗ рд╣реА рджреЗрдЦрд╛ рд╣реИ рдХрд┐ рд╕рдВрдХреБрд▓ рдХреЛ рдПрдХ рдмрд┐рдВрджреБ рдФрд░ рдПрдХ рд╕реНрд▓реИрд╢ рджреНрд╡рд╛рд░рд╛ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдореЗрдВ рдмреИрдЪ рдкрде рдХреЛ рдлрд╝реЛрд▓реНрдбрд░ рдкрде рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░
List<URL>
(рдЖрдкрдХреЗ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдкрде рдЬрд╣рд╛рдБ рдЖрдк рд╡рд░реНрдЧ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдЦреЛрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ) рдЬреИрд╕реА рдХреБрдЫ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
String path = basePackage.replace('.', '/');
рддреЛ рдПрдХ рдкрд▓ рд░реБрдХрд┐рдП!
Enumeration<URL>
List<URL>
ред рдпрд╣ рд╕рдм рдХреНрдпрд╛ рд╣реИ? рдУрд╣, рд╣реЙрд░рд░, рдпрд╣
Iterator
рдХрд╛ рдкреБрд░рд╛рдирд╛ рдкреВрд░реНрд╡рдЬ рд╣реИ, рдЬрд╛рд╡рд╛ 1.0 рдХреЗ рдмрд╛рдж рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╣реИред рдпрд╣ рд╡рд╣ рд╡рд┐рд░рд╛рд╕рдд рд╣реИ рдЬрд┐рд╕рд╕реЗ рд╣рдореЗрдВ рдирд┐рдкрдЯрдирд╛ рд╣реИред рдпрджрд┐ (рд╕рднреА рд╕рдВрдЧреНрд░рд╣ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ
Iterable
рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рддреЛ
Enumeration
рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдкрдХреЛ рдмрд╛рдИрдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛,
while(resources.hasMoreElements())
рдФрд░
nextElement()
ред рдФрд░ рдлрд┐рд░ рднреА рд╕рдВрдЧреНрд░рд╣ рд╕реЗ рдЖрдЗрдЯрдо рдирд┐рдХрд╛рд▓рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рдХреЗрд╡рд▓ 1996, рдХреЗрд╡рд▓ рдХрдЯреНрдЯрд░ред рдЕрд░реЗ рд╣рд╛рдБ, рдЬрд╛рд╡рд╛ 9 рдореЗрдВ рдЙрдиреНрд╣реЛрдВрдиреЗ
Enumeration.asIterator()
рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЖрдЧреЗ рдЪрд▓рддреЗ рд╣реИрдВред рд╣рдореЗрдВ рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдХреЛ рдирд┐рдХрд╛рд▓рдиреЗ рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред URL рдХреЛ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХрдирд╡рд░реНрдЯ рдХрд░реЗрдВ, рдФрд░ рдлрд┐рд░ рдЙрд╕рдХрд╛ рдирд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рдпрд╣рд╛рдВ рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╣рдо рдиреЗрд╕реНрдЯреЗрдб рдкреИрдХреЗрдЬ рдХреЛ рд╕реНрдХреИрди рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ рддрд╛рдХрд┐ рдХреЛрдб рдХреЛ рдЬрдЯрд┐рд▓ рди рдХрд░реЗрдВред рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ рддреЛ рдЖрдк рдЕрдкрдиреЗ рдХрд╛рд░реНрдп рдХреЛ рдЬрдЯрд┐рд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
while (resources.hasMoreElements()) { URL resource = resources.nextElement(); File file = new File(resource.toURI()); for(File classFile : file.listFiles()){ String fileName = classFile.getName();
рдЕрдЧрд▓рд╛, рд╣рдореЗрдВ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдмрд┐рдирд╛ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред 2018 рдореЗрдВ рдпрд╛рд░реНрдб рдореЗрдВ, рдЬрд╛рд╡рд╛ рдиреЗ рдХрдИ рд╡рд░реНрд╖реЛрдВ рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓ I / O (NIO 2) рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрднреА рднреА рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЛ рдЕрд▓рдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдореБрдЭреЗ рдЕрдкрдиреА рдмрд╛рдЗрдХ рдЦреБрдж рдмрдирд╛рдиреА рд╣реЛрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ рдЕрдкрд╛рдЪреЗ рдХреЙрдордиреНрд╕ рдЬреИрд╕реЗ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдЪрд▓реЛ рдкреБрд░рд╛рдиреЗ рджрд╛рджрд╛ рд░рд╛рд╕реНрддреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
lastIndexOf(".")
:
if(fileName.endsWith(".class")){ String className = fileName.substring(0, fileName.lastIndexOf(".")); }
рдЕрдЧрд▓рд╛, рд╣рдо рдХрдХреНрд╖рд╛ рдХреЗ рдкреВрд░реНрдг рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд░реНрдЧ рд╡рд╕реНрддреБ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдХрдХреНрд╖рд╛ рдХреЗ рд╡рд░реНрдЧ рдХреЛ рдХрд╣рддреЗ рд╣реИрдВ):
Class classObject = Class.forName(basePackage + "." + className);
рдареАрдХ рд╣реИ, рдЕрдм рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛рдПрдВ рд╣рдорд╛рд░реЗ рд╣рд╛рдереЛрдВ рдореЗрдВ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдХреЗрд╡рд▓ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдирд╛ рд╣реИ рдЬрд┐рдирдХреЗ рдкрд╛рд╕
@Component
рдЯрд┐рдкреНрдкрдгреА рд╣реИ:
if(classObject.isAnnotationPresent(Component.class)){ System.out.println("Component: " + classObject); }
рднрд╛рдЧреЛ рдФрд░ рдЬрд╛рдВрдЪ рдХрд░реЛред рдХрдВрд╕реЛрд▓ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
Component: class com.kciray.ProductService Component: class com.kciray.PromotionsService
рдЕрдм рд╣рдореЗрдВ рдЕрдкрдиреЗ рд╕реЗрдо рдмрдирд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдЖрдкрдХреЛ
new ProductService()
рддрд░рд╣ рдХреБрдЫ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░рддреНрдпреЗрдХ рдмреАрди рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрдкрдиреА рдХрдХреНрд╖рд╛ рд╣реИред рдЬрд╛рд╡рд╛ рдореЗрдВ рдкреНрд░рддрд┐рдмрд┐рдВрдм рд╣рдореЗрдВ рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╕рдорд╛рдзрд╛рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдирд┐рд░реНрдорд╛рддрд╛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ):
Object instance = classObject.newInstance();
рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдЗрд╕ рдмреАрди рдХреЛ
Map<String, Object> singletons
рдореЗрдВ рдбрд╛рд▓рдирд╛ рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмреАрди рдирд╛рдо (рдЗрд╕рдХреА рдЖрдИрдбреА) рдЪреБрдиреЗрдВред рдЬрд╛рд╡рд╛ рдореЗрдВ, рд╣рдо рдХрдХреНрд╖рд╛рдУрдВ рдХреА рддрд░рд╣ рдЪрд░ рдХрд╣рддреЗ рд╣реИрдВ (рдХреЗрд╡рд▓ рдкрд╣рд▓рд╛ рдЕрдХреНрд╖рд░ рд▓реЛрдЕрд░рдХреЗрд╕ рд╣реИ)ред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рд╕реЗрдо рдкрд░ рднреА рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд╕рдВрдд рдПрдХ рдЬрд╛рд╡рд╛ рдлреНрд░реЗрдорд╡рд░реНрдХ рд╣реИ! рдмрд┐рди рдирд╛рдо рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░реЗрдВ рддрд╛рдХрд┐ рдкрд╣рд▓рд╛ рдЕрдХреНрд╖рд░ рдЫреЛрдЯрд╛ рд╣реЛ, рдФрд░ рдЗрд╕реЗ рдорд╛рдирдЪрд┐рддреНрд░ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
String beanName = className.substring(0, 1).toLowerCase() + className.substring(1); singletons.put(beanName, instance);
рдЕрдм рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдХрдВрдЯреЗрдирд░ рдХреЛ рд╕реЗрдо рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдирд╛рдо рд╕реЗ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЖрдкрдХреЗ
instantiate()
рдХрд╛ рдирд╛рдо
instantiate()
рд╡рд┐рдзрд┐ рдФрд░
classObject.newInstance();
рд╡рд┐рдзрд┐ рдХрд╛ рдирд╛рдо рд╣реИ
classObject.newInstance();
рдПрдХ рдЖрдо рдЬрдбрд╝ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛,
instantiate()
рдмреАрди рдХреЗ рдЬреАрд╡рди рдЪрдХреНрд░ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рдЬрд╛рд╡рд╛ рдореЗрдВ, рд╕рдм рдХреБрдЫ рдЖрдкрд╕ рдореЗрдВ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ!
org.springframework.beans.factory.stereotype.Service
рдПрдиреЛрдЯреЗрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рднреА рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдпрд╣
@Component
рдХреЗ рд╕рдорд╛рди рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреВрд░рд╛ рдмрд┐рдВрджреБ рдирд╛рдо рдореЗрдВ рд╣реИ - рдЖрдк рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХрдХреНрд╖рд╛ рдПрдХ рд╕реЗрд╡рд╛ рд╣реИ, рди рдХрд┐ рдХреЗрд╡рд▓ рдПрдХ рдШрдЯрдХред рдпрд╣ рд╡реИрдЪрд╛рд░рд┐рдХ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдЬреИрд╕рд╛ рдХреБрдЫ рд╣реИред рд╡рд╕рдВрдд рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдореЗрдВ рдПрдХ рд╕рд╡рд╛рд▓ рдерд╛ "рдХреНрдпрд╛ рдПрдиреЛрдЯреЗрд╢рди рдЯрдХрд╕рд╛рд▓реА рд╣реИрдВ?" (рд╕реВрдЪреАрдмрджреНрдз рд▓реЛрдЧреЛрдВ рдореЗрдВ рд╕реЗ) рддреЛ, рд╕реНрдЯреАрд░рд┐рдпреЛрдЯрд╛рдЗрдкрд┐рдХрд▓ рдПрдиреЛрдЯреЗрд╢рди рд╡реЗ рд╣реИрдВ рдЬреЛ
stereotype
рдкреИрдХреЗрдЬ рдореЗрдВ рд╣реИрдВред
рдЧреБрдг рднрд░реЗрдВ
рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЖрд░реЗрдЦ рдХреЛ рджреЗрдЦреЗрдВ, рдпрд╣ рд╕реЗрдо рдХреЗ рдЬреАрд╡рди рдЪрдХреНрд░ рдХреА рд╢реБрд░реБрдЖрдд рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рд╣рдордиреЗ рдЬреЛ рдХрд┐рдпрд╛ рд╡рд╣ рдЗрдВрд╕реНрдЯреЗрдВрдЯрд┐рдПрдЯ (
newInstance()
рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реЗрдо рдмрдирд╛рдирд╛) рд╣реИред рдЕрдЧрд▓рд╛ рдЪрд░рдг рд╕реЗрдо рдХрд╛ рдХреНрд░реЙрд╕-рдЗрдВрдЬреЗрдХреНрд╢рди рд╣реИ (рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди, рдпрд╣ рдирд┐рдпрдВрддреНрд░рдг рдХрд╛ рдЙрд▓рдЯрд╛ рднреА рд╣реИ (IoC))ред рдЖрдкрдХреЛ рд╕реЗрдо рдХреЗ рдЧреБрдгреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдиреЗ рдФрд░ рд╕рдордЭрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдХреМрди рд╕реЗ рдЧреБрдгреЛрдВ рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк
productService.getPromotionsService()
рдХреЙрд▓ рдХрд░рддреЗ
productService.getPromotionsService()
, рддреЛ рдЖрдкрдХреЛ
null
рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдирд┐рд░реНрднрд░рддрд╛ рдЕрднреА рддрдХ рдирд╣реАрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ,
@Autowired
рдкреИрдХреЗрдЬ рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕рдореЗрдВ
@Autowired
рдПрдиреЛрдЯреЗрд╢рди рдЬреЛрдбрд╝реЗрдВред рд╡рд┐рдЪрд╛рд░ рдЙрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рд╣реИрдВред
@Retention(RetentionPolicy.RUNTIME) public @interface Autowired { }
рдЗрд╕рдХреЗ рдмрд╛рдж, рдЗрд╕реЗ рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
@Component public class ProductService { @Autowired PromotionsService promotionsService;
рдЕрдм рд╣рдореЗрдВ рдЗрди рдПрдиреЛрдЯреЗрд╢рди
BeanFactory
рдЦреЛрдЬрдиреЗ рдФрд░ рдЙрди рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ
BeanFactory
рдХреЛ рд╕рд┐рдЦрд╛рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВ, рдФрд░ рдЗрд╕реЗ
Main
рд╕реЗ рдХреЙрд▓ рдХрд░реЗрдВ:
public class BeanFactory {
рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдмрд╕ рдЕрдкрдиреЗ рд╕рднреА рдбрд┐рдмреНрдмреЗ
object.getClass().getDeclaredFields()
рдореИрдк рдореЗрдВ рдЬрд╛рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдмрд┐рди рдХреЗ рд▓рд┐рдП рдЙрд╕рдХреЗ рд╕рднреА рдлрд╝реАрд▓реНрдбреНрд╕ (
object.getClass().getDeclaredFields()
рдирд┐рдЬреА рдХреНрд╖реЗрддреНрд░реЛрдВ рд╕рд╣рд┐рдд рд╕рднреА рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдФрд░ рдЬрд╛рдБрдЪ рдХрд░реЗрдВ рдХрд┐ рдХреНрдпрд╛ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ
@Autowired
рдПрдиреЛрдЯреЗрд╢рди рд╣реИ:
for (Object object : singletons.values()) { for (Field field : object.getClass().getDeclaredFields()) { if (field.isAnnotationPresent(Autowired.class)) { } } }
рдЕрдЧрд▓рд╛, рд╣рдореЗрдВ рдПрдХ рдмрд╛рд░ рд╕рднреА рдбрд┐рдмреНрдмреЗ рд╕реЗ рдЧреБрдЬрд░рдиреЗ рдФрд░ рдЙрдирдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рджреЗрдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдЕрдЪрд╛рдирдХ рдпрд╣ рд╡рд╣ рдкреНрд░рдХрд╛рд░ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдорд╛рд░рд╛ рдмрд┐рди рдЦреБрдж рд▓реЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред рд╣рд╛рдБ, рд╣рдореЗрдВ рдПрдХ рддреНрд░рд┐-рдЖрдпрд╛рдореА рдЪрдХреНрд░ рдорд┐рд▓рддрд╛ рд╣реИ!
for (Object dependency : singletons.values()) { if (dependency.getClass().equals(field.getType())) { } }
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬрдм рд╣рдореЗрдВ рдЗрд╕рдХреА рд▓рдд рд▓рдЧ рдЧрдИ, рддреЛ рд╣рдореЗрдВ рдЗрд╕реЗ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдкрд╣рд▓реА рдЪреАрдЬрд╝ рдЬреЛ рдЖрдк рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд╣ рд╣реИ рд╕реАрдзреЗ рд╕реАрдзреЗ рдкрд░рд╛рд╡рд░реНрддрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ
promotionsService
рдХреНрд╖реЗрддреНрд░ рд▓рд┐рдЦрдирд╛ред рд▓реЗрдХрд┐рди рд╡рд╕рдВрдд рдРрд╕рд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЖрдЦрд┐рд░рдХрд╛рд░, рдпрджрд┐ рдлрд╝реАрд▓реНрдб рдореЗрдВ рдПрдХ
private
рд╕рдВрд╢реЛрдзрдХ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдкрд╣рд▓реЗ рдЗрд╕реЗ
public
рд░реВрдк рд╕реЗ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдлрд┐рд░ рдЕрдкрдирд╛ рдорд╛рди рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛, рдлрд┐рд░ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ
private
(рдЕрдЦрдВрдбрддрд╛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП) рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдПрдХ рдмрдбрд╝реА рдмреИрд╕рд╛рдЦреА рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред рдПрдХ рдмрдбрд╝реА рдмреИрд╕рд╛рдЦреА рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдПрдХ рдЫреЛрдЯреА рд╕реА рдмреИрд╕рд╛рдЦреА рдмрдирд╛рддреЗ рд╣реИрдВ (рд╣рдо рд╕реЗрдЯрд░ рдХрд╛ рдирд╛рдо рдмрдирд╛рдПрдВрдЧреЗ рдФрд░ рдЙрд╕реЗ рдХреЙрд▓ рдХрд░реЗрдВрдЧреЗ):
String setterName = "set" + field.getName().substring(0, 1).toUpperCase() + field.getName().substring(1);
рдЕрдм рдЕрдкрдирд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЪрд▓рд╛рдПрдВ рдФрд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЬрдм
null
рдмрдЬрд╛рдп
productService.getPromotionsService()
рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдП, рддреЛ рд╣рдорд╛рд░реА рд╕реЗрдо рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧреАред
рд╣рдордиреЗ рдЬреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИ рд╡рд╣ рдкреНрд░рдХрд╛рд░ рджреНрд╡рд╛рд░рд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рд╣реИред рдирд╛рдо (
javax.annotation.Resource
рдПрдиреЛрдЯреЗрд╢рди) рджреНрд╡рд╛рд░рд╛ рдПрдХ рдЗрдВрдЬреЗрдХреНрд╢рди рднреА рд╣реИред рдпрд╣ рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдХреНрд╖реЗрддреНрд░ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрдЬрд╛рдп, рдЗрд╕рдХрд╛ рдирд╛рдо рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдЗрд╕рдХреЗ рдЕрдиреБрд╕рд╛рд░ - рдирдХреНрд╢реЗ рд╕реЗ рдирд┐рд░реНрднрд░рддрд╛ред рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕рдорд╛рди рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХреБрдЫ рд╕рд░рд▓ рдореЗрдВ рднреАред рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдк рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ рдЕрдкрдирд╛ рдмреАрди рдмрдирд╛рдПрдБ, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ
@Resource
рд╕реЗ
@Resource
рдФрд░
populateProperties()
рд╡рд┐рдзрд┐ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВред
рд╣рдо рд╕реЗрдо рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЙрдирдХреЗ рдирд╛рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ

рдРрд╕реЗ рд╕рдордп рд╣реЛрддреЗ рд╣реИрдВ рдЬрдм рдЖрдкрдХреЛ рдмрд┐рди рдХреЗ рдЕрдВрджрд░ рдЙрд╕рдХрд╛ рдирд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдРрд╕реА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрдХреНрд╕рд░ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдбрд┐рдмреНрдмреЗ, рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдпрд╣ рдХрд┐ рд╡реЗ рдбрд┐рдмреНрдмреЗ рд╣реИрдВред рд╡рд╕рдВрдд рдХреЗ рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ, рдпрд╣ рдорд╛рди рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдмреАрди рдПрдХ POJO (рдкреНрд▓реЗрди рдУрд▓реНрдб рдЬрд╛рд╡рд╛ рдУрдмреНрдЬреЗрдХ, рдЕрдЪреНрдЫрд╛ рдкреБрд░рд╛рдирд╛ рдЬрд╛рд╡рд╛ рдСрдмреНрдЬреЗрдХреНрдЯ) рд╣реИ, рдФрд░ рд╕рдВрдкреВрд░реНрдг рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдПрдХреНрд╕рдПрдордПрд▓ рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдЕрд▓рдЧ рд╣реЛ рдЧрдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдирд╛рдо рдЗрдВрдЬреЗрдХреНрд╢рди рдмрд┐рди рдХреЗ рдЬреАрд╡рди рдЪрдХреНрд░ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред
рд╣рдо рдХреИрд╕реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХреМрди рд╕рд╛ рд╕реЗрдо рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рдХрд┐ рдЙрд╕рдХрд╛ рдирд╛рдо рдХреНрдпрд╛ рд╣реИ рдФрд░ рд╡рд╣ рдХреНрдпрд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рд╣реИ? рдкрд╣рд▓реА рдмрд╛рдд рдЬреЛ рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖрддреА рд╣реИ рд╡рд╣ рд╣реИ
@InjectName
рдХрд╛ рдирдпрд╛ рдПрдиреЛрдЯреЗрд╢рди рдмрдирд╛рдирд╛ рдФрд░ рдЙрд╕реЗ
@InjectName
рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд▓рд╛рдирд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдорд╛рдзрд╛рди рдмрд╣реБрдд рд╕рд╛рдорд╛рдиреНрдп рд╣реЛрдЧрд╛ рдФрд░ рдЖрдкрдХреЛ рдХрдИ рдмрд╛рд░ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдкреИрд░ рдореЗрдВ рдЧреЛрд▓реА рдорд╛рд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ (рдЗрд╕ рдПрдиреЛрдЯреЗрд╢рди рдХреЛ рдЕрдиреБрдЪрд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдкрд░ рд░рдЦреЗрдВ (рд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд╣реАрдВ), рдпрд╛ рдПрдХ рд╣реА рдХрдХреНрд╖рд╛ рдореЗрдВ рдХрдИ рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рдирд╛рдо рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ)ред рдПрдХ рдФрд░ рд╕рдорд╛рдзрд╛рди рд╣реИ, рдЕрдзрд┐рдХ рд╕рдЯреАрдХ - рдПрдХ рд╕реЗрдЯрд░ рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдПред рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдбрд┐рдмреНрдмреЗ рдЕрдкрдирд╛ рдирд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред
BeanNameAware
рдкреИрдХреЗрдЬ рдореЗрдВ
BeanNameAware
рдХреНрд▓рд╛рд╕ рдмрдирд╛рдПрдВ:
public interface BeanNameAware { void setBeanName(String name); }
рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдорд╛рд░реА
PromotionsService
рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░реЗрдВ:
@Component public class PromotionsService implements BeanNameAware { private String beanName; @Override public void setBeanName(String name) { beanName = name; } public String getBeanName() { return beanName; } }
рдФрд░ рдЕрдВрдд рдореЗрдВ, рдмреАрди рдХрд╛рд░рдЦрд╛рдиреЗ рдореЗрдВ рдПрдХ рдирдИ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВред рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ - рд╣рдо рдЕрдкрдиреЗ рдмрд┐рди-рд╕рд┐рдВрдЧрд▓рдЯрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдмрд┐рди рд╣рдорд╛рд░реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╕реЗрдЯрд░ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ:
public void injectBeanNames(){ for (String name : singletons.keySet()) { Object bean = singletons.get(name); if(bean instanceof BeanNameAware){ ((BeanNameAware) bean).setBeanName(name); } } }
рдЪрд▓рд╛рдПрдВ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
BeanFactory beanFactory = new BeanFactory(); beanFactory.instantiate("com.kciray"); beanFactory.populateProperties(); beanFactory.injectBeanNames();
рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╡рд╕рдВрдд рдореЗрдВ рдЕрдиреНрдп рд╕рдорд╛рди рдЗрдВрдЯрд░рдлреЗрд╕ рд╣реИрдВред рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдк
рдмреАрдирдлреИрдХреНрдЯрд┐рд╡рд╡реЗрдпрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ
рд╕реНрд╡рдпрдВ рд▓рд╛рдЧреВ
рдХрд░реЗрдВ , рдЬреЛ рд╕реЗрдо рдХреЛ рдмреАрди рдХрд╛рд░рдЦрд╛рдиреЗ рдХрд╛ рд▓рд┐рдВрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рд╕рдорд╛рди рддрд░реАрдХреЗ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдмреАрдиреНрд╕

рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╕реНрдерд┐рддрд┐ рд╣реИ рдЬрд╣рд╛рдВ рдЖрдкрдХреЛ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдЗрдВрдЬреЗрдХреНрд╢рди рд▓рдЧрд╛рдиреЗ рдХреЗ рдмрд╛рдж рдХреБрдЫ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдмрд┐рди рдЧреБрдг рд╕реЗрдЯ рд╣реИрдВ)ред рд╕рд░рд▓ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рд╣рдореЗрдВ рдмрд┐рди рдХреЛ рдЦреБрдж рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рд╣рдо рдПрдХ
InitializingBean
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рдореЗрдВ
void afterPropertiesSet()
рд╡рд┐рдзрд┐ рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рддрдВрддреНрд░ рдХрд╛ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рдпрди рдареАрдХ рд╡реИрд╕рд╛ рд╣реА рд╣реИ рдЬреИрд╕рд╛ рдХрд┐
BeanNameAware
рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рдорд╛рдзрд╛рди рд╕реНрдкреЙрдЗрд▓рд░ рдХреЗ рдиреАрдЪреЗ рд╣реИред рдЕрднреНрдпрд╛рд╕ рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдПрдХ рдорд┐рдирдЯ рдореЗрдВ рд╕реНрд╡рдпрдВ рдХрд░реЗрдВ:
рдмреАрди рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рд╕реЙрд▓реНрдпреВрд╢рди рдкреЛрд╕реНрдЯ рдкреНрд░реЛрд╕реЗрд╕рд░ рдЬреЛрдбрд╝рдирд╛
рдкрд╣рд▓реЗ рд╡рд╕рдВрдд рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд╕реНрдерд╛рди рдкрд░ рдЦреБрдж рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВред рдЖрдкрдХрд╛ рдлреНрд░реЗрдорд╡рд░реНрдХ рдмрдврд╝ рд░рд╣рд╛ рд╣реИ рдФрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдмреАрдЪ рдмрд╣реБрдд рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реИ, рд╣рд░ рджрд┐рди рдореЗрд▓ рдореЗрдВ рдПрдХ рдпрд╛ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧреА рд╕реБрд╡рд┐рдзрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рд╛рде рдкрддреНрд░ рднреЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВред рдпрджрд┐ рдРрд╕реА рдкреНрд░рддреНрдпреЗрдХ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдЖрдк рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдмреАрди рдХреЗ рдЬреАрд╡рди рдЪрдХреНрд░ рдореЗрдВ рдЬрд╛рдВрдЪрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ (рдЬреАрд╡рди рдЪрдХреНрд░) рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рд╕реЗ рднрд░рд╛ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдХреБрдЫ рддрд░реНрдХ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ (рдмрд┐рд▓реНрдХреБрд▓ рдХрд┐рд╕реА рднреА, рдЪрд╛рд╣реЗ рд╡рд╣ рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХрд░ рд░рд╣рд╛ рд╣реЛ, рдмрд┐рди рдХреЛ рджреВрд╕рд░реЗ рдмрд┐рди рдХреЗ рд╕рд╛рде рдмрджрд▓рдирд╛, рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рдЧреБрдгреЛрдВ рдХреЛ рд╕реЗрдЯ рдХрд░рдирд╛, рдФрд░ рдЗрд╕реА рддрд░рд╣)ред
рдЖрдЗрдП рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреЗрдВред рдЗрд╕реЗ рдлрд▓рд┐рдпреЛрдВ рдХреА рдХреБрдЫ рдкреЛрд╕реНрдЯ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдмреАрдирдкреЛрд╕реНрдЯрдкреНрд░реЛрд╕реЗрд╕рд░ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдПрдХ рдХрдард┐рди рд╕рд╡рд╛рд▓ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ - рддрд░реНрдХ рдХрд╛ рдкрд╛рд▓рди рдХрдм рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП? рдЖрдЦрд┐рд░рдХрд╛рд░, рд╣рдо рдЗрд╕реЗ рдЖрд░рдВрднреАрдХрд░рдг рд╕реЗ рдкрд╣рд▓реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕реЗ рдмрд╛рдж рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХреБрдЫ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓рд╛ рд╡рд┐рдХрд▓реНрдк рдмреЗрд╣рддрд░ рд╣реИ, рджреВрд╕рд░реЛрдВ рдХреЗ рд▓рд┐рдП - рджреВрд╕рд░рд╛ ... рдХреИрд╕реЗ рд╣реЛ?
рд╣рдо рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рджреЛрдиреЛрдВ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рдкреЛрд╕реНрдЯ-рдкреНрд░реЛрд╕реЗрд╕рд░ рджреЛ рд▓реЙрдЬрд┐рдХреНрд╕, рджреЛ рддрд░реАрдХреЛрдВ рдХреЛ рд▓реЗ рдЬрд╛рдиреЗ рджреЗрдВред рдПрдХ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рд╕реЗ рдкрд╣рд▓реЗ (
afterPropertiesSet()
рдореЗрдердб) рд╕реЗ рдкрд╣рд▓реЗ рдФрд░ рджреВрд╕рд░реЗ рдХреЛ рдмрд╛рдж рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдм рдЖрдЗрдП рдЦреБрдж рд╣реА рддрд░реАрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреЗрдВ - рдЙрдирдХреЗ рдкрд╛рд╕ рдХреНрдпрд╛ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП? рдЬрд╛рд╣рд┐рд░ рд╣реИ,
Object bean
рд╣реА (
Object bean
) рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдмреАрди рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рдЗрд╕ рдмреАрди рдХрд╛ рдирд╛рдо рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдкрдХреЛ рдпрд╛рдж рд╣реИ рдХрд┐ рдмрд┐рди рдЦреБрдж рд╣реА рдЗрд╕рдХреЗ рдирд╛рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рд╣реИред рдФрд░ рд╣рдо рдмреАрдирдиреЗрдорд╡реЗрдпрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдмреАрдиреНрд╕ рдХреЛ рдордЬрдмреВрд░ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди, рдкреЛрд╕реНрдЯ-рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕реНрддрд░ рдкрд░, рдмреАрди рдирд╛рдо рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЗрд╕реЗ рджреВрд╕рд░реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред
рдФрд░ рд╕реЗрдо рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд░рддреЗ рд╕рдордп рдХреНрдпрд╛ рд╡рд┐рдзрд┐ рд╡рд╛рдкрд╕ рдЖрдиреА рдЪрд╛рд╣рд┐рдП? рдЪрд▓реЛ рдЗрд╕реЗ рдмрд┐рди рд╡рд╛рдкрд╕ рд╣реА рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рд╣рдореЗрдВ рд╕реБрдкрд░-рд▓рдЪреАрд▓рд╛рдкрди рджреЗрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдмрд┐рди рдХреЗ рдмрдЬрд╛рдп, рдЖрдк рдПрдХ рдкреНрд░реЙрдХреНрд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкрд░реНрдЪреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕рдХреА рдХреЙрд▓ рдХреЛ рд▓рдкреЗрдЯрддрд╛ рд╣реИ (рдФрд░ рд╕реБрд░рдХреНрд╖рд╛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ)ред рдпрд╛ рдЖрдк рдлрд┐рд░ рд╕реЗ рдмрд┐рди рдХреЛ рджреЛрдмрд╛рд░рд╛ рдмрдирд╛рдХрд░ рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд╕реНрддреБ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА рдмрд╣реБрдд рдмрдбрд╝реА рд╕реНрд╡рддрдВрддреНрд░рддрд╛ рджреА рдЬрд╛рддреА рд╣реИред рдиреАрдЪреЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг рд╣реИ:
package org.springframework.beans.factory.config; public interface BeanPostProcessor { Object postProcessBeforeInitialization(Object bean, String beanName); Object postProcessAfterInitialization(Object bean, String beanName); }
рдЕрдЧрд▓рд╛, рд╣рдореЗрдВ рдЕрдкрдиреЗ рдмреАрди рдХрд╛рд░рдЦрд╛рдиреЗ рдореЗрдВ рд╕рд░рд▓ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреА рдПрдХ рд╕реВрдЪреА рдФрд░ рдирдП рд▓реЛрдЧреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рд╛рдБ, рдпрд╣ рдПрдХ рдирд┐рдпрдорд┐рдд ArrayList рд╣реИред
рдЕрдм
initializeBeans
рд╡рд┐рдзрд┐ рдХреЛ рдмрджрд▓реЗрдВ рддрд╛рдХрд┐ рдпрд╣ рдкреЛрд╕реНрдЯ-рдкреНрд░реЛрд╕реЗрд╕рд░реНрд╕ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦреЗ:
public void initializeBeans() { for (String name : singletons.keySet()) { Object bean = singletons.get(name); for (BeanPostProcessor postProcessor : postProcessors) { postProcessor.postProcessBeforeInitialization(bean, name); } if (bean instanceof InitializingBean) { ((InitializingBean) bean).afterPropertiesSet(); } for (BeanPostProcessor postProcessor : postProcessors) { postProcessor.postProcessAfterInitialization(bean, name); } } }
рдЖрдЗрдП рдПрдХ рдЫреЛрдЯрд╛ рдкреЛрд╕реНрдЯ рдкреНрд░реЛрд╕реЗрд╕рд░ рдмрдирд╛рдПрдВ рдЬреЛ рдХреЙрд▓ рдХреЛ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдмрддрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд╣рдорд╛рд░реЗ рдмреАрди рдХрд╛рд░рдЦрд╛рдиреЗ рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИ:
public class CustomPostProcessor implements BeanPostProcessor { @Override public Object postProcessBeforeInitialization(Object bean, String beanName) { System.out.println("---CustomPostProcessor Before " + beanName); return bean; } @Override public Object postProcessAfterInitialization(Object bean, String beanName) { System.out.println("---CustomPostProcessor After " + beanName); return bean; } }
рдЕрдм рдЪрд▓рд╛рдПрдВ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХрд╛рд░реНрдп рдХреЗ рд░реВрдк рдореЗрдВ, рдПрдХ рдкреЛрд╕реНрдЯ рдкреНрд░реЛрд╕реЗрд╕рд░ рдмрдирд╛рдПрдВ рдЬреЛ
@PostConstruct (javax.annotation.PostConstruct)
рдПрдиреЛрдЯреЗрд╢рди
@PostConstruct (javax.annotation.PostConstruct)
рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ред рдпрд╣ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ (рдЬрд╛рд╡рд╛ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ, рд╡рд╕рдВрдд рдореЗрдВ рдирд╣реАрдВ)ред рдЗрд╕рдХрд╛ рд╕рд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдПрдиреЛрдЯреЗрд╢рди рдХреЛ рдХрд┐рд╕реА рд╡рд┐рдзрд┐ рдкрд░ рд░рдЦрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ BEFORE рдорд╛рдирдХ рд╕реНрдкреНрд░рд┐рдВрдЧ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди (рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝рд┐рдВрдЧрдмреЛрди) рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред
рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕рднреА рдПрдиреЛрдЯреЗрд╢рди рдФрд░ рдкреИрдХреЗрдЬ (рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ javax.annotation) рдмрдирд╛рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ, рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдХрдиреЗрдХреНрдЯ рди рдХрд░реЗрдВ! рдпрд╣ рдЖрдкрдХреЛ рд╕реНрдкреНрд░рд┐рдВрдЧ рдХреЛрд░ рдФрд░ рдЗрд╕рдХреЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди (рдЬреЗрд╡реИрдХреНрд╕ рд╕рдкреЛрд░реНрдЯ) рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рджреЗрдЦрдиреЗ рдФрд░ рдЗрд╕реЗ рдпрд╛рдж рд░рдЦрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред рдпрд╣ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдПрдХ рд╢реИрд▓реА рд░рдЦреЗрдЧрд╛ред
рдЖрдк рдЗрд╕ рддрдереНрдп рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд▓реЗрдВрдЧреЗ рдХрд┐ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд╕рдВрдд рдореЗрдВ рдПрдиреЛрдЯреЗрд╢рди @PostConstruct
рдЗрд╕ рддрд░рд╣ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдкреЛрд╕реНрдЯ-рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЙрдордирдиреЛрдЯреЗрд╢рди рдмреАрдирдкреЛрд╕реНрдЯрдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗред рд▓реЗрдХрд┐рди рд╡рд╣рд╛рдВ рдЭрд╛рдВрдХрдирд╛ рдордд, рдЕрдкрдирд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд▓рд┐рдЦреЛредрдЕрдВрдд рдореЗрдВ, рдореИрдВ рдЖрдкрдХреЛ void close()
рдХрдХреНрд╖рд╛ рдореЗрдВ рдПрдХ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝рдиреЗ BeanFactory
рдФрд░ рджреЛ рдФрд░ рддрдВрддреНрд░реЛрдВ рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ ред рдкрд╣рд▓рд╛ рдПрдХ рдПрдиреЛрдЯреЗрд╢рди рд╣реИ @PreDestroy (javax.annotation.PreDestroy)
, рдЬрд┐рд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдЙрди рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдХрдВрдЯреЗрдирд░ рдмрдВрдж рд╣реЛрдиреЗ рдкрд░ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рджреВрд╕рд░рд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ org.springframework.beans.factory.DisposableBean
рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рдзрд┐ рд╢рд╛рдорд┐рд▓ рд╣реИ void destroy()
ред рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдбрд┐рдмреНрдмреЗ рд╕реНрд╡рдпрдВ рдХреЛ рдирд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ (рдореБрдХреНрдд рд╕рдВрд╕рд╛рдзрди, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП) рд╣реЛрдВрдЧреЗред@PreDestroy + рдбрд┐рд╕реНрдкреЛрдЬреЗрдмрд▓ рдмреАрди рдкреВрд░реНрдг рдмреАрди рдЬреАрд╡рдирдЪрдХреНрд░
рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдмрд┐рди рдХреЗ рдкреВрд░реНрдг рдЬреАрд╡рди рдЪрдХреНрд░ рдХреЛ рдЙрд╕рдХреЗ рдЖрдзреБрдирд┐рдХ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЖрдкрдХреЛ рдЗрд╕реЗ рдпрд╛рдж рд░рдЦрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛редрд╣рдорд╛рд░рд╛ рдкрд╕рдВрджреАрджрд╛ рд╕рдВрджрд░реНрдн
рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдмрд╣реБрдд рдмрд╛рд░ рд╕рдВрджрд░реНрдн рд╢рдмреНрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рд░ рдХреЛрдИ рдпрд╣ рдирд╣реАрдВ рд╕рдордЭрддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИред рдЕрдм рд╣рдо рд╕рдм рдХреБрдЫ рдХреНрд░рдо рдореЗрдВ рд░рдЦреЗрдВрдЧреЗред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рд╕рдВрджрд░реНрдн рдХрдВрдЯреЗрдирд░ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде BeanFactory
ред рд▓реЗрдХрд┐рди, рдмреБрдирд┐рдпрд╛рджреА рдХрд╛рд░реНрдпреЛрдВ (DI) рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдЕрднреА рднреА рдХреБрдЫ рд╢рд╛рдВрдд рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдЗрдирдореЗрдВ рд╕реЗ рдПрдХ рдлреАрдЪрд░ рдмрд┐рдиреНрд╕ рдХреЗ рдмреАрдЪ рдИрд╡реЗрдВрдЯ рднреЗрдЬрдирд╛ рдФрд░ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рдирд╛ рд╣реИредрд▓реЗрдЦ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдирд┐рдХрд▓рд╛ рдФрд░ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдХрд╛рдЯ рджрд┐рдпрд╛ рдЬрд╛рдиреЗ рд▓рдЧрд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд╕рдВрджрд░реНрдн рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╕реНрдкреЙрдЗрд▓рд░ рдХреЗ рдиреАрдЪреЗ рд░рдЦ рджрд┐рдпрд╛редрд╣рдореЗрдВ рд╕рдВрджрд░реНрдн рдХрд╛ рдПрд╣рд╕рд╛рд╕ рд╣реИ.
org.springframework.context
,
ApplicationContext
.
BeanFactory
. ,
close()
.
public class ApplicationContext { private BeanFactory beanFactory = new BeanFactory(); public ApplicationContext(String basePackage) throws ReflectiveOperationException{ System.out.println("******Context is under construction******"); beanFactory.instantiate(basePackage); beanFactory.populateProperties(); beanFactory.injectBeanNames(); beanFactory.initializeBeans(); } public void close(){ beanFactory.close(); } }
Main
, , :
ApplicationContext applicationContext = new ApplicationContext("com.kciray"); applicationContext.close();
, .
close()
, ┬л ┬╗ - . , :
package org.springframework.context.event; public class ContextClosedEvent { }
ApplicationListener
, . , (
ApplicationListener<E>
). , Java-, . , , :
package org.springframework.context; public interface ApplicationListener<E>{ void onApplicationEvent(E event); }
ApplicationContext
.
close()
, , .
ApplicationListener<ContextClosedEvent>
,
onApplicationEvent(ContextClosedEvent)
. , ?
public void close(){ beanFactory.close(); for(Object bean : beanFactory.getSingletons().values()) { if (bean instanceof ApplicationListener) { } } }
рд▓реЗрдХрд┐рди рдирд╣реАрдВред .
bean instanceof ApplicationListener<ContextClosedEvent>
. Java.
(type erasure) , <T> <Object>. , ? ,
ApplicationListener<ContextClosedEvent>
, ?
, , . , , , , :
for (Type type: bean.getClass().getGenericInterfaces()){ if(type instanceof ParameterizedType){ ParameterizedType parameterizedType = (ParameterizedType) type; } }
, , , тАФ . , :
Type firstParameter = parameterizedType.getActualTypeArguments()[0]; if(firstParameter.equals(ContextClosedEvent.class)){ Method method = bean.getClass().getMethod("onApplicationEvent", ContextClosedEvent.class); method.invoke(bean, new ContextClosedEvent()); }
ApplicationListener:
@Service public class PromotionsService implements BeanNameAware, ApplicationListener<ContextClosedEvent> {
, Main , , :
рдирд┐рд╖реНрдХрд░реНрд╖
рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдореИрдВрдиреЗ рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рдмрд╛рд▓реНрдбреБрдВрдЧ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд▓реЗрдЦ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ, рд▓реЗрдХрд┐рди рддрдм рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рд╣реЗрдмреЗ рдХреЗ рджрд░реНрд╢рдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдЧрд░ рдЖрдкрдХреЛ рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рдЖрдП, рддреЛ рд▓реЗрдЦ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВред рдпрджрд┐ рдЙрд╕реЗ 30 рд╕реЗ рдЕрдзрд┐рдХ рдХреА рд░реЗрдЯрд┐рдВрдЧ рдорд┐рд▓рддреА рд╣реИ, рддреЛ рдореИрдВ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХрд╛ рд╡рд╛рджрд╛ рдХрд░рддрд╛ рд╣реВрдВред рд▓реЗрдЦ рд▓рд┐рдЦрддреЗ рд╕рдордп, рдореИрдВрдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реНрдкреНрд░рд┐рдВрдЧ рдХреЛрд░ рдХреЗ рдЬреНрдЮрд╛рди рдХреЛ рджрд┐рдЦрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдЬреЛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдХреЛрд░ рд╕реНрдкреНрд░рд┐рдВрдЧ 5.0 рдкреНрд░рдорд╛рдгрди рдкреНрд░рдорд╛рдгрди рдЧрд╛рдЗрдб рдкрд░ рднреА рдЖрдзрд╛рд░рд┐рдд рд╣реИ ред рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рдРрд╕реЗ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреА рдорджрдж рд╕реЗ рдЖрдк рдкреВрд░реЗ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЛ рдХрд╡рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЬрд╛рд╡рд╛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рд╡рд╕рдВрдд рдХреЛ рдЕрдзрд┐рдХ рд╕реБрд▓рдн рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВредрдЕрдкрдбреЗрдЯ 05/10/2018
рдкрддреНрд░ рдореЗрд░реЗ рдкрд╛рд╕ рд▓рдЧрд╛рддрд╛рд░ рдкреНрд░рд╢реНрди рдЖрддреЗ рд╣реИрдВ "рдФрд░ рдЬрдм рдирд┐рд░рдВрддрд░рддрд╛, рд╣рдо рдЙрд╕рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВред" рд▓реЗрдХрд┐рди рд╡рд╣рд╛рдБ рдмрд┐рд▓реНрдХреБрд▓ рднреА рд╕рдордп рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЕрдиреНрдп рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдЧрд░ рдЖрдк рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рдЖрдпрд╛ рд╣реИ, рддреЛ рдЖрдк рд╡рд╕рдВрдд рдХреЗ рд╕рдВрдХреАрд░реНрдг рдЦрдВрдб рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдирд┐рд░рдВрддрд░рддрд╛ рд▓реЗрдЦ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╣рдмреНрд░ рдЦрд╛рддрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдореИрдВ рдЕрдкрдиреЗ рдЦрд╛рддреЗ рд╕реЗ рдПрдХ рд▓реЗрдЦ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдпрд╛ рдЖрдкрдХреЛ рдПрдХ рдЖрдордВрддреНрд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВредрд╡рд┐рд╖рдпреЛрдВ рдХрд╛ рд╡рд┐рддрд░рдг:рд╕реНрдкреНрд░рд┐рдВрдЧ рдХрдВрдЯреЗрдирд░ - [рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо]рд╕реНрдкреНрд░рд┐рдВрдЧ AOP - [рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо]рд╕реНрдкреНрд░рд┐рдВрдЧ рд╡реЗрдм - [рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо]рд╕реНрдкреНрд░рд┐рдВрдЧ рдХреНрд▓рд╛рдЙрдб - [рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо]