рд╕реНрдХреНрд░реИрдЪ рд╕реЗ рд╕реНрдкреНрд░рд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рдПрдкреАрдЖрдИ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ред рд╢реБрд░реБрдЖрддреА рдХреЗ рд▓рд┐рдП рд╡реЙрдХрдереНрд░реВред рднрд╛рдЧ 1



рд╕реНрдкреНрд░рд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рд╕рдордЭрдиреЗ рдФрд░ рд╕реАрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЬрдЯрд┐рд▓ рд░реВрдкрд░реЗрдЦрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдЕрдзрд┐рдХрд╛рдВрд╢ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЗрд╕реЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдФрд░ 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 { //... } @Component public class PromotionService { //... } 


рд╣рдореЗрдВ рдЕрдкрдиреЗ рдкреИрдХреЗрдЬ ( com.kciray ) BeanFactory рд╕реНрдХреИрди рдХрд░рдиреЗ рдФрд░ рдЗрд╕рдореЗрдВ рдЙрди рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ @Component рджреНрд╡рд╛рд░рд╛ рдПрдиреЛрдЯреЗрдЯ рдХрд┐рдП @Component ред рдпрд╣ рдХрд╛рд░реНрдп рддреБрдЪреНрдЫ рд╕реЗ рджреВрд░ рд╣реИред рдЬрд╛рд╡рд╛ рдХреЛрд░ рдореЗрдВ рдХреЛрдИ рддреИрдпрд╛рд░ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ , рдФрд░ рд╣рдореЗрдВ рдЦреБрдж рдПрдХ рдмреИрд╕рд╛рдЦреА рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕ рдмреИрд╕рд╛рдЦреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рдЬрд╛рд░реЛрдВ рд╡рд╕рдВрдд рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдШрдЯрдХ рд╕реНрдХреИрдирд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рднрдпрд╛рдирдХ рд╕рддреНрдп рдЖрдкрдиреЗ рдЬрд╛рди рд▓рд┐рдпрд╛ рд╣реИред рдЖрдкрдХреЛ ClassLoader рд╕реЗ ClassLoader рдирд╛рдо рдирд┐рдХрд╛рд▓рдиреЗ ClassLoader рдФрд░ рдЬрд╛рдВрдЪрдирд╛ рд╣реЛрдЧрд╛ ClassLoader рд╡реЗ ".class" рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ, рдФрд░ рдлрд┐рд░ рдЙрдирдХрд╛ рдкреВрд░рд╛ рдирд╛рдо рдмрдирд╛рдПрдБ рдФрд░ рдЙрд╕рдореЗрдВ рд╕реЗ рдХреНрд▓рд╛рд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдирд┐рдХрд╛рд▓ рджреЗрдВ!

рдореИрдВ рдЖрдкрдХреЛ рддреБрд░рдВрдд рдЪреЗрддрд╛рд╡рдиреА рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдХрдИ рдЬрд╛рдБрдЪ рдЕрдкрд╡рд╛рдж рд╣реЛрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рд▓рдкреЗрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд░рд╣реЗрдВред рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ, рд╣рдо рддрдп рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдХреНрдпрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╣рдо BeanFactory рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ Main рдореЗрдВ рдХреЙрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:

 //BeanFactory.java public class BeanFactory{ public void instantiate(String basePackage) { } } //Main.java BeanFactory beanFactory = new BeanFactory(); beanFactory.instantiate("com.kciray"); 

рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ ClassLoader рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рд▓реЛрдбрд┐рдВрдЧ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдХрд╛рдлреА рд╕рд░рд▓рддрд╛ рд╕реЗ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ:

 ClassLoader classLoader = ClassLoader.getSystemClassLoader(); 

рдЖрдкрдиреЗ рд╢рд╛рдпрдж рдкрд╣рд▓реЗ рд╣реА рджреЗрдЦрд╛ рд╣реИ рдХрд┐ рд╕рдВрдХреБрд▓ рдХреЛ рдПрдХ рдмрд┐рдВрджреБ рдФрд░ рдПрдХ рд╕реНрд▓реИрд╢ рджреНрд╡рд╛рд░рд╛ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдореЗрдВ рдмреИрдЪ рдкрде рдХреЛ рдлрд╝реЛрд▓реНрдбрд░ рдкрде рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ List<URL> (рдЖрдкрдХреЗ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдкрде рдЬрд╣рд╛рдБ рдЖрдк рд╡рд░реНрдЧ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдЦреЛрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ) рдЬреИрд╕реА рдХреБрдЫ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

 String path = basePackage.replace('.', '/'); //"com.kciray" -> "com/kciray" Enumeration<URL> resources = classLoader.getResources(path); 

рддреЛ рдПрдХ рдкрд▓ рд░реБрдХрд┐рдП! 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();//ProductService.class } } 

рдЕрдЧрд▓рд╛, рд╣рдореЗрдВ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдмрд┐рдирд╛ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред 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();//=new CustomClass() 

рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдЗрд╕ рдмреАрди рдХреЛ 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() рдмреАрди рдХреЗ рдЬреАрд╡рди рдЪрдХреНрд░ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рдЬрд╛рд╡рд╛ рдореЗрдВ, рд╕рдм рдХреБрдЫ рдЖрдкрд╕ рдореЗрдВ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ!

 //Main.java BeanFactory beanFactory = new BeanFactory(); beanFactory.instantiate("com.kciray"); ProductService productService = (ProductService) beanFactory.getBean("productService"); System.out.println(productService);//ProductService@612 


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 { //... public void populateProperties(){ System.out.println("==populateProperties=="); } } 

рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдмрд╕ рдЕрдкрдиреЗ рд╕рднреА рдбрд┐рдмреНрдмреЗ 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);//setPromotionsService System.out.println("Setter name = " + setterName); Method setter = object.getClass().getMethod(setterName, dependency.getClass()); setter.invoke(object, dependency); 

рдЕрдм рдЕрдкрдирд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЪрд▓рд╛рдПрдВ рдФрд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЬрдм 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(); //... System.out.println("Bean name = " + promotionsService.getBeanName()); 

рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╡рд╕рдВрдд рдореЗрдВ рдЕрдиреНрдп рд╕рдорд╛рди рдЗрдВрдЯрд░рдлреЗрд╕ рд╣реИрдВред рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдк рдмреАрдирдлреИрдХреНрдЯрд┐рд╡рд╡реЗрдпрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд╕реНрд╡рдпрдВ рд▓рд╛рдЧреВ рдХрд░реЗрдВ , рдЬреЛ рд╕реЗрдо рдХреЛ рдмреАрди рдХрд╛рд░рдЦрд╛рдиреЗ рдХрд╛ рд▓рд┐рдВрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рд╕рдорд╛рди рддрд░реАрдХреЗ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдмреАрдиреНрд╕




рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╕реНрдерд┐рддрд┐ рд╣реИ рдЬрд╣рд╛рдВ рдЖрдкрдХреЛ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдЗрдВрдЬреЗрдХреНрд╢рди рд▓рдЧрд╛рдиреЗ рдХреЗ рдмрд╛рдж рдХреБрдЫ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдмрд┐рди рдЧреБрдг рд╕реЗрдЯ рд╣реИрдВ)ред рд╕рд░рд▓ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рд╣рдореЗрдВ рдмрд┐рди рдХреЛ рдЦреБрдж рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рд╣рдо рдПрдХ InitializingBean рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рдореЗрдВ void afterPropertiesSet() рд╡рд┐рдзрд┐ рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рддрдВрддреНрд░ рдХрд╛ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рдпрди рдареАрдХ рд╡реИрд╕рд╛ рд╣реА рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ BeanNameAware рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рдорд╛рдзрд╛рди рд╕реНрдкреЙрдЗрд▓рд░ рдХреЗ рдиреАрдЪреЗ рд╣реИред рдЕрднреНрдпрд╛рд╕ рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдПрдХ рдорд┐рдирдЯ рдореЗрдВ рд╕реНрд╡рдпрдВ рдХрд░реЗрдВ:

рдмреАрди рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рд╕реЙрд▓реНрдпреВрд╢рди
 //InitializingBean.java package org.springframework.beans.factory; public interface InitializingBean { void afterPropertiesSet(); } //BeanFactory.java public void initializeBeans(){ for (Object bean : singletons.values()) { if(bean instanceof InitializingBean){ ((InitializingBean) bean).afterPropertiesSet(); } } } //Main.java beanFactory.initializeBeans(); 



рдкреЛрд╕реНрдЯ рдкреНрд░реЛрд╕реЗрд╕рд░ рдЬреЛрдбрд╝рдирд╛


рдкрд╣рд▓реЗ рд╡рд╕рдВрдд рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд╕реНрдерд╛рди рдкрд░ рдЦреБрдж рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВред рдЖрдкрдХрд╛ рдлреНрд░реЗрдорд╡рд░реНрдХ рдмрдврд╝ рд░рд╣рд╛ рд╣реИ рдФрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдмреАрдЪ рдмрд╣реБрдд рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реИ, рд╣рд░ рджрд┐рди рдореЗрд▓ рдореЗрдВ рдПрдХ рдпрд╛ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧреА рд╕реБрд╡рд┐рдзрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рд╛рде рдкрддреНрд░ рднреЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВред рдпрджрд┐ рдРрд╕реА рдкреНрд░рддреНрдпреЗрдХ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдЖрдк рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдмреАрди рдХреЗ рдЬреАрд╡рди рдЪрдХреНрд░ рдореЗрдВ рдЬрд╛рдВрдЪрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ (рдЬреАрд╡рди рдЪрдХреНрд░) рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рд╕реЗ рднрд░рд╛ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдХреБрдЫ рддрд░реНрдХ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ (рдмрд┐рд▓реНрдХреБрд▓ рдХрд┐рд╕реА рднреА, рдЪрд╛рд╣реЗ рд╡рд╣ рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХрд░ рд░рд╣рд╛ рд╣реЛ, рдмрд┐рди рдХреЛ рджреВрд╕рд░реЗ рдмрд┐рди рдХреЗ рд╕рд╛рде рдмрджрд▓рдирд╛, рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рдЧреБрдгреЛрдВ рдХреЛ рд╕реЗрдЯ рдХрд░рдирд╛, рдФрд░ рдЗрд╕реА рддрд░рд╣)ред

рдЖрдЗрдП рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреЗрдВред рдЗрд╕реЗ рдлрд▓рд┐рдпреЛрдВ рдХреА рдХреБрдЫ рдкреЛрд╕реНрдЯ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдмреАрдирдкреЛрд╕реНрдЯрдкреНрд░реЛрд╕реЗрд╕рд░ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдПрдХ рдХрдард┐рди рд╕рд╡рд╛рд▓ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ - рддрд░реНрдХ рдХрд╛ рдкрд╛рд▓рди рдХрдм рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП? рдЖрдЦрд┐рд░рдХрд╛рд░, рд╣рдо рдЗрд╕реЗ рдЖрд░рдВрднреАрдХрд░рдг рд╕реЗ рдкрд╣рд▓реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕реЗ рдмрд╛рдж рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХреБрдЫ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓рд╛ рд╡рд┐рдХрд▓реНрдк рдмреЗрд╣рддрд░ рд╣реИ, рджреВрд╕рд░реЛрдВ рдХреЗ рд▓рд┐рдП - рджреВрд╕рд░рд╛ ... рдХреИрд╕реЗ рд╣реЛ?

рд╣рдо рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рджреЛрдиреЛрдВ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рдкреЛрд╕реНрдЯ-рдкреНрд░реЛрд╕реЗрд╕рд░ рджреЛ рд▓реЙрдЬрд┐рдХреНрд╕, рджреЛ рддрд░реАрдХреЛрдВ рдХреЛ рд▓реЗ рдЬрд╛рдиреЗ рджреЗрдВред рдПрдХ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рд╕реЗ рдкрд╣рд▓реЗ ( 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 рд╣реИред

 //BeanFactory.java private List<BeanPostProcessor> postProcessors = new ArrayList<>(); public void addPostProcessor(BeanPostProcessor postProcessor){ postProcessors.add(postProcessor); } 

рдЕрдм 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; } } 

 //Main.java BeanFactory beanFactory = new BeanFactory(); beanFactory.addPostProcessor(new CustomPostProcessor()); 


рдЕрдм рдЪрд▓рд╛рдПрдВ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХрд╛рд░реНрдп рдХреЗ рд░реВрдк рдореЗрдВ, рдПрдХ рдкреЛрд╕реНрдЯ рдкреНрд░реЛрд╕реЗрд╕рд░ рдмрдирд╛рдПрдВ рдЬреЛ @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 + рдбрд┐рд╕реНрдкреЛрдЬреЗрдмрд▓ рдмреАрди
 //DisposableBean.java package org.springframework.beans.factory; public interface DisposableBean { void destroy(); } //PreDestroy.java package javax.annotation; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @Retention(RetentionPolicy.RUNTIME) public @interface PreDestroy { } //DisposableBean.java public void close() { for (Object bean : singletons.values()) { for (Method method : bean.getClass().getMethods()) { if (method.isAnnotationPresent(PreDestroy.class)) { try { method.invoke(bean); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } } if (bean instanceof DisposableBean) { ((DisposableBean) bean).destroy(); } } } 



рдкреВрд░реНрдг рдмреАрди рдЬреАрд╡рдирдЪрдХреНрд░


рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдмрд┐рди рдХреЗ рдкреВрд░реНрдг рдЬреАрд╡рди рдЪрдХреНрд░ рдХреЛ рдЙрд╕рдХреЗ рдЖрдзреБрдирд┐рдХ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЖрдкрдХреЛ рдЗрд╕реЗ рдпрд╛рдж рд░рдЦрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред

рд╣рдорд╛рд░рд╛ рдкрд╕рдВрджреАрджрд╛ рд╕рдВрджрд░реНрдн


рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдмрд╣реБрдд рдмрд╛рд░ рд╕рдВрджрд░реНрдн рд╢рдмреНрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рд░ рдХреЛрдИ рдпрд╣ рдирд╣реАрдВ рд╕рдордЭрддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИред рдЕрдм рд╣рдо рд╕рдм рдХреБрдЫ рдХреНрд░рдо рдореЗрдВ рд░рдЦреЗрдВрдЧреЗред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рд╕рдВрджрд░реНрдн рдХрдВрдЯреЗрдирд░ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде 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> { //... @Override public void onApplicationEvent(ContextClosedEvent event) { System.out.println(">> ContextClosed EVENT"); } } 

, Main , , :

 //Main.java void testContext() throws ReflectiveOperationException{ ApplicationContext applicationContext = new ApplicationContext("com.kciray"); applicationContext.close(); } 


рдирд┐рд╖реНрдХрд░реНрд╖


рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдореИрдВрдиреЗ рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рдмрд╛рд▓реНрдбреБрдВрдЧ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд▓реЗрдЦ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ, рд▓реЗрдХрд┐рди рддрдм рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рд╣реЗрдмреЗ рдХреЗ рджрд░реНрд╢рдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдЧрд░ рдЖрдкрдХреЛ рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рдЖрдП, рддреЛ рд▓реЗрдЦ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВред рдпрджрд┐ рдЙрд╕реЗ 30 рд╕реЗ рдЕрдзрд┐рдХ рдХреА рд░реЗрдЯрд┐рдВрдЧ рдорд┐рд▓рддреА рд╣реИ, рддреЛ рдореИрдВ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХрд╛ рд╡рд╛рджрд╛ рдХрд░рддрд╛ рд╣реВрдВред рд▓реЗрдЦ рд▓рд┐рдЦрддреЗ рд╕рдордп, рдореИрдВрдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реНрдкреНрд░рд┐рдВрдЧ рдХреЛрд░ рдХреЗ рдЬреНрдЮрд╛рди рдХреЛ рджрд┐рдЦрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдЬреЛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдХреЛрд░ рд╕реНрдкреНрд░рд┐рдВрдЧ 5.0 рдкреНрд░рдорд╛рдгрди рдкреНрд░рдорд╛рдгрди рдЧрд╛рдЗрдб рдкрд░ рднреА рдЖрдзрд╛рд░рд┐рдд рд╣реИ ред рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рдРрд╕реЗ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреА рдорджрдж рд╕реЗ рдЖрдк рдкреВрд░реЗ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЛ рдХрд╡рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЬрд╛рд╡рд╛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рд╡рд╕рдВрдд рдХреЛ рдЕрдзрд┐рдХ рд╕реБрд▓рдн рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдкрдбреЗрдЯ 05/10/2018


рдкрддреНрд░ рдореЗрд░реЗ рдкрд╛рд╕ рд▓рдЧрд╛рддрд╛рд░ рдкреНрд░рд╢реНрди рдЖрддреЗ рд╣реИрдВ "рдФрд░ рдЬрдм рдирд┐рд░рдВрддрд░рддрд╛, рд╣рдо рдЙрд╕рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВред" рд▓реЗрдХрд┐рди рд╡рд╣рд╛рдБ рдмрд┐рд▓реНрдХреБрд▓ рднреА рд╕рдордп рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЕрдиреНрдп рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдЧрд░ рдЖрдк рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рдЖрдпрд╛ рд╣реИ, рддреЛ рдЖрдк рд╡рд╕рдВрдд рдХреЗ рд╕рдВрдХреАрд░реНрдг рдЦрдВрдб рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдирд┐рд░рдВрддрд░рддрд╛ рд▓реЗрдЦ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╣рдмреНрд░ рдЦрд╛рддрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдореИрдВ рдЕрдкрдиреЗ рдЦрд╛рддреЗ рд╕реЗ рдПрдХ рд▓реЗрдЦ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдпрд╛ рдЖрдкрдХреЛ рдПрдХ рдЖрдордВрддреНрд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

рд╡рд┐рд╖рдпреЛрдВ рдХрд╛ рд╡рд┐рддрд░рдг:
рд╕реНрдкреНрд░рд┐рдВрдЧ рдХрдВрдЯреЗрдирд░ - [рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо]
рд╕реНрдкреНрд░рд┐рдВрдЧ AOP - [рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо]
рд╕реНрдкреНрд░рд┐рдВрдЧ рд╡реЗрдм - [рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо]
рд╕реНрдкреНрд░рд┐рдВрдЧ рдХреНрд▓рд╛рдЙрдб - [рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо]

Source: https://habr.com/ru/post/hi419679/


All Articles