рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдмрдирд╛рдо рд╕реНрдкреНрд░рд┐рдВрдЧ рдПрдорд╡реАрд╕реА рдмрдирд╛рдо рд╡рд╕рдВрдд - рд╡реЗ рдХреИрд╕реЗ рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╣реИрдВ?

рд╕реНрдкреНрд░рд┐рдВрдЧ, рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ, рд╕реНрдкреНрд░рд┐рдВрдЧ рдПрдорд╡реАрд╕реА, рд╣рд░ рдЬрдЧрд╣ "рд╕реНрдкреНрд░рд┐рдВрдЧ" рд╢рдмреНрдж рд╣реИ! рдЖрдк рдЗрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд╣рд╛рдВ рдФрд░ рдХрдм рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЪрд▓рд┐рдПред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдЖрдкрдХреЛ рд╕рдореАрдХреНрд╖рд╛рдПрдБ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреА: рд╕реНрдкреНрд░рд┐рдВрдЧ, рд╕реНрдкреНрд░рд┐рдВрдЧ рдПрдорд╡реАрд╕реА, рдФрд░ рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ, рдкрддрд╛ рдХрд░реЗрдВ рдХрд┐ рд╡реЗ рдХрд┐рди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╡реЗ рдХрд╣рд╛рдБ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рддрдереНрдп рдЬреЛ рдЖрдк рд╕реАрдЦрддреЗ рд╣реИрдВ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рд╕реНрдкреНрд░рд┐рдВрдЧ, рд╕реНрдкреНрд░рд┐рдВрдЧ рдПрдорд╡реАрд╕реА рдФрд░ рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдПрдХ рд╣реА рд╕реНрдерд╛рди рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рд╡реЗ рд╡рд┐рднрд┐рдиреНрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╡реЗ рдЙрдиреНрд╣реЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВред
рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛ рдХреНрдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реНрдкреНрд░рд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ?
рд▓рдВрдмреА рдФрд░ рдХрдард┐рди рд╕реЛрдЪреЗрдВред рд╕реНрдкреНрд░рд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рджреНрд╡рд╛рд░рд╛ рд╣рд▓ рдХреА рдЧрдИ рд╕рдорд╕реНрдпрд╛ рдХреНрдпрд╛ рд╣реИ?
рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХреНрдпреЛрдВ рд╣реИ? рдХреНрдпреЛрдВрдХрд┐ рдЬрдм DI рдпрд╛ IOC рдХрд╛ рд╕рд╣реА рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рд╢рд┐рдерд┐рд▓ рдпреБрдЧреНрдорд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рд╢рд┐рдерд┐рд▓ рдпреБрдЧреНрдорд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рдЖрд╕рд╛рдиреА рд╕реЗ рдЬрд╛рдВрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЖрдЗрдП рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВред
рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг
рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ: WelcomeController рд╕реНрд╡рд╛рдЧрдд рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП WelcomeService рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред WelcomeService рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╣ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ?
WelcomeService service = new WelcomeService();
рдпрд╣ рдкрдВрдХреНрддрд┐ рдЗрд╕ рд╕реЗрд╡рд╛ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддреА рд╣реИред рдФрд░ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╡реЗ рджреГрдврд╝рддрд╛ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдЧрд░ рдореИрдВ WelcomeController рдХреЗ рд▓рд┐рдП рдпреВрдирд┐рдЯ рдЯреЗрд╕реНрдЯ рдореЗрдВ WelcomeService рдХреЗ рд▓рд┐рдП рдПрдХ рдирдХрд▓реА рдмрдирд╛рдКрдВ, рддреЛ рдореИрдВ рдХреИрд╕реЗ рд╕реНрд╡рд╛рдЧрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП WelcomeController рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВ? рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ!
@RestController public class WelcomeController { private WelcomeService service = new WelcomeService(); @RequestMapping("/welcome") public String welcome() { return service.retrieveWelcomeMessage(); } }
рд╕рд░рд▓ рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдЙрджрд╛рд╣рд░рдг
рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдХреЗ рд╕рд╛рде рджреБрдирд┐рдпрд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд▓рдЧрддреА рд╣реИред рдЖрдк рд╕реНрдкреНрд░рд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЛ рдХрдбрд╝реА рдореЗрд╣рдирдд рдХрд░рдиреЗ рджреЗрдВред рд╣рдо рд╕рд┐рд░реНрдл рджреЛ рд╕рд░рд▓ рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:
рдХрдВрдкреЛрдиреЗрдВрдЯ рдФрд░
рдСрдЯреЛрд╡реЗрдб ред
- рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рд╕реНрдкреНрд░рд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╣рддреЗ рд╣реИрдВ: рдЕрд░реЗ, рдпрд╣ рд╡рд╣ рдмрд┐рди рд╣реИ рдЬрд┐рд╕реЗ рдЖрдкрдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
- рдСрдЯреЛрд╡рд╛рдпрд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рд╕реНрдкреНрд░рд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╣рддреЗ рд╣реИрдВ: рдЕрд░реЗ, рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдорд┐рд▓рд╛рди рдвреВрдВрдвреЗрдВ рдФрд░ рдЗрд╕реЗ рдкреНрд▓рдЧ рдХрд░реЗрдВред
рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╕реНрдкреНрд░рд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рд╡реЗрд▓рдХрдо рд╕рд░реНрд╡рд┐рд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреАрди рдмрдирд╛рдПрдЧрд╛ рдФрд░ рдЗрд╕реЗ рд╡реЗрд▓реНрдХрдо рдХрдВрдЯреНрд░реЛрд▓рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдЧрд╛ред
рдпреВрдирд┐рдЯ рдЯреЗрд╕реНрдЯ рдореЗрдВ, рдореИрдВ рд╕реНрдкреНрд░рд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЛ рд╡реЗрд▓рдХрдорд╡рд░реНрдХ рдХрдВрдЯреНрд░реЛрд▓рд░ рд╕реЗ рд╡реЗрд▓рдХрдорд╡рд░реНрдХ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВред (рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ @MockBean рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рдХрд░рдХреЗ рдЪреАрдЬреЛрдВ рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдФрд░ рдХрд╣рд╛рдиреА рд╣реИ!)
@Component public class WelcomeService {
рд╕реНрдкреНрд░рд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рдФрд░ рдХреНрдпрд╛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ?
рд╕рдорд╕реНрдпрд╛ 1: рдХреЛрдб рдбреБрдкреНрд▓реАрдХреЗрд╢рди / рдкреНрд░рджреВрд╖рдг
рдХреНрдпрд╛ рд╕реНрдкреНрд░рд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ? рдирд╣реАрдВред рдпрд╣ рдХрдИ рд╕реНрдкреНрд░рд┐рдВрдЧ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдХреА рдореВрд▓ рдЕрд╡рдзрд╛рд░рдгрд╛ рдкрд░ рдмрдирд╛рддрд╛ рд╣реИред
- рд╕реНрдкреНрд░рд┐рдВрдЧ рдЬреЗрдбреАрдмреАрд╕реА
- рд╕реНрдкреНрд░рд┐рдВрдЧ mvc
- рд╕реНрдкреНрд░рд┐рдВрдЧ рдЕрдиреЛрдк
- рд╡рд╕рдВрдд рдЛрддреБ
- рд╡рд╕рдВрдд рдХреА рдЭрдбрд╝реА
- рд╡рд╕рдВрдд рдкрд░реАрдХреНрд╖рдг
рдЖрдЗрдП рдПрдХ рдкрд▓ рдХреЗ рд▓рд┐рдП рд╕реНрдкреНрд░рд┐рдВрдЧ рдЬреЗрдПрдордПрд╕ рдФрд░ рд╕реНрдкреНрд░рд┐рдВрдЧ рдЬреЗрдбреАрдмреАрд╕реА рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред
рдХреНрдпрд╛ рдпреЗ рдореЙрдбреНрдпреВрд▓ рдирдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд▓рд╛рддреЗ рд╣реИрдВ? рдирд╣реАрдВред рд╣рдо рдпрд╣ рд╕рдм J2EE рдпрд╛ Java EE рдкрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рддреЛ рд╡реЗ рдХреНрдпрд╛ рд▓рд╛рддреЗ рд╣реИрдВ? рд╡реЗ рд╕рд░рд▓ рд╕рд╛рд░ рд▓рд╛рддреЗ рд╣реИрдВред рдЗрди рд╕рд╛рд░ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╣реИ:
- рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛрдб рдХрдо рдХрд░реЗрдВ / рдбреБрдкреНрд▓реАрдХреЗрд╢рди рдХрдо рдХрд░реЗрдВ
- рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ / рдЯреЗрд╕реНрдЯреЗрдмрд┐рд▓рд┐рдЯреА рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВ
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд╛рд░рдВрдкрд░рд┐рдХ JDBC рдпрд╛ JMS рдХреА рддреБрд▓рдирд╛ рдореЗрдВ JDBCTemplate рдпрд╛ JMSTemplate рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХрдо рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд╕рдорд╕реНрдпрд╛ 2: рдЕрдиреНрдп рд░реВрдкрд░реЗрдЦрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫрд╛ рдПрдХреАрдХрд░рдг
рд╕реНрдкреНрд░рд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдорд╣рд╛рди рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдЙрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рд╣реА рд╣рд▓ рд╣реЛ рдЪреБрдХреЗ рд╣реИрдВред рд╡рд╣ рдЬреЛ рдХрд░рддрд╛ рд╣реИ рд╡рд╣ рдЕрдиреНрдп рд░реВрдкрд░реЗрдЦрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЙрддреНрдХреГрд╖реНрдЯ рдПрдХреАрдХрд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ рдЙрддреНрдХреГрд╖реНрдЯ рд╕рдорд╛рдзрд╛рди рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред
- ORM рдХреЗ рд▓рд┐рдП рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдХрд░реЗрдВ
- рд╡рд╕реНрддреБ рдорд╛рдирдЪрд┐рддреНрд░рдг рдХреЗ рд▓рд┐рдП iBatis
- рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП JUnit рдФрд░ Mockito
рд╣рдореЗрдВ рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ?
рд╕реНрдкреНрд░рд┐рдВрдЧ рдЖрдзрд╛рд░рд┐рдд рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдХрдИ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╣реИрдВред
рдЬрдм рд╣рдо рд╕реНрдкреНрд░рд┐рдВрдЧ рдПрдорд╡реАрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ: рдШрдЯрдХ рд╕реНрдХреИрди, рдбрд┐рд╕реНрдкреИрдЪрд░ рд╕рд░реНрд╡рд▓реЗрдЯ, рд░рд┐рдЬрд╝реЙрд▓реНрд╡рд░, рд╡реЗрдм рдЬрд╛рд░ (рд╕реНрдерд┐рд░ рд╕рд╛рдордЧреНрд░реА рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП) рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдХреЗ рдмреАрдЪред
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix"> <value>/WEB-INF/views/</value> </property> <property name="suffix"> <value>.jsp</value> </property> </bean><mvc:resources mapping="/webjars/**" location="/webjars/"/>
рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб рдПрдХ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдбрд┐рд╕реНрдкреИрдЪрд░ рд╕рд░реНрд╡рд▓реЗрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рджрд┐рдЦрд╛рддрд╛ рд╣реИред
<servlet> <servlet-name>dispatcher</servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/todo-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet><servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
рдЬрдм рд╣рдо рд╣рд╛рдЗрдмрд░рдиреЗрдЯ / рдЬреЗрдкреАрдП рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд, рдЗрдХрд╛рдИ рдкреНрд░рдмрдВрдзрдХ рдХрд╛рд░рдЦрд╛рдирд╛, рд▓реЗрдирджреЗрди рдкреНрд░рдмрдВрдзрдХ рдФрд░ рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <property name="driverClass" value="${db.driver}" /> <property name="jdbcUrl" value="${db.url}" /> <property name="user" value="${db.username}" /> <property name="password" value="${db.password}" /> </bean><jdbc:initialize-database data-source="dataSource"> <jdbc:script location="classpath:config/schema.sql" /> <jdbc:script location="classpath:config/data.sql" /> </jdbc:initialize-database><bean class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" id="entityManagerFactory"> <property name="persistenceUnitName" value="hsql_pu" /> <property name="dataSource" ref="dataSource" /> </bean><bean id="transactionManager"class="org.springframework.orm.jpa.JpaTransactionManager"> <property name="entityManagerFactory" ref="entityManagerFactory" /> <property name="dataSource" ref="dataSource" /> </bean><tx:annotation-driven transaction-manager="transactionManager"/>
рд╕рдорд╕реНрдпрд╛ 1: рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдСрдЯреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди: рдХреНрдпрд╛ рд╣рдо рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВ?
рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдЗрд╕рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдПрдХ рдирдИ рд╡рд┐рдЪрд╛рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд▓рд╛рддрд╛ рд╣реИред
- рдпрджрд┐ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдЬрд╛рд░ рд╡рд░реНрдЧрдкрде рдореЗрдВ рд╣реИ, рддреЛ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдХреЗ рдСрдЯреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?
- рдПрдХ рдбрд┐рд╕реНрдкреИрдЪрд░ рд╕рд░реНрд╡рд▓реЗрдЯ рдХреЗ рдСрдЯреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╣реИ рдЕрдЧрд░ рд╕реНрдкреНрд░рд┐рдВрдЧ рдПрдорд╡реАрд╕реА рдЬрд╛рд░ рдХреНрд▓рд╛рд╕рдкрд╛рде рдореЗрдВ рд╣реИ?
рдлрд┐рд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдСрдЯреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреЗ рдкреНрд░рд╛рд╡рдзрд╛рди рд╣реЛрдВрдЧреЗред
рд╕рдорд╕реНрдпрд╛ 2: рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рд╕реНрдЯрд╛рд░реНрдЯрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ: рд╡реЗрд▓-рдЬреНрдЮрд╛рдд рдкреИрдЯрд░реНрди рдХреЗ рдЖрд╕рдкрд╛рд╕ рдирд┐рд░реНрдорд┐рдд
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдо рдПрдХ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдЙрди рд░реВрдкрд░реЗрдЦрд╛рдУрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдХрд┐рди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕рд╛рде рдХреИрд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рд╣реИред
рд╕рднреА рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╕рдорд╛рди рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рд╣реИрдВред рд╕реНрдкреНрд░рд┐рдВрдЧ MVC рдореЗрдВ рдирд┐рдореНрди рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрдирдореЗрдВ рд╕реНрдкреНрд░рд┐рдВрдЧ рдПрдорд╡реАрд╕реА, рдЬреИрдХреНрд╕рди рдбрд╛рдЯрд╛рдЗрдВрдб, рд╣рд╛рдЗрдмрд░рдиреЗрдЯ-рд╡реИрд▓рд┐рдбреЗрдЯрд░ рдФрд░ рд▓реЙрдЧ 4 рдЬреЗ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.2.2.RELEASE</version> </dependency><dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.5.3</version> </dependency><dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>5.0.2.Final</version> </dependency><dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>
рдпрджрд┐ рдЖрдк рдПрдХ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдпрд╛ рд░реЗрд╕реНрдЯрдлреБрд▓ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреА рдкрд╕рдВрдж рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рд╕реНрдЯрд╛рд░реНрдЯ рд╡реЗрдм рд╣реИред рдЖрдЗрдП рдЬрд▓реНрджреА рд╕реЗ рд╕реНрдкреНрд░рд┐рдВрдЧ рдмрд┐рдЧрд┐рдирд░ рд╕реНрдЯрд╛рд░реНрдЯрд░ рд╡реЗрдм рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ рдЬрд┐рд╕рдореЗрдВ рд╕реНрдкреНрд░рд┐рдВрдЧ рдкреНрд░реАрд▓рд┐рдЬрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рд╕реНрдЯрд╛рд░реНрдЯрд░ рд╡реЗрдм рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрднрд░рддрд╛рдПрдБ
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
рдирд┐рдореНрди рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рд╡рд┐рднрд┐рдиреНрди рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЧрдП рд╣реИрдВред

рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдирд┐рдореНрди рдореЗрдВ рд╡рд░реНрдЧреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
- рд╡рд╕рдВрдд: рдХреЛрд░, рд╕реЗрдо, рд╕рдВрджрд░реНрдн, рдЕрдиреВрдк
- рд╡реЗрдм рдПрдорд╡реАрд╕реА: (рд╕реНрдкреНрд░рд┐рдВрдЧ рдПрдорд╡реАрд╕реА)
- рдЬреИрдХреНрд╕рди: JSON рд╕рдВрдЪрд╛рд░ рдХреЗ рд▓рд┐рдП
- рд╕рддреНрдпрд╛рдкрди: рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛, рд╕рддреНрдпрд╛рдкрди рдПрдкреАрдЖрдИ
- рдПрдВрдмреЗрдбреЗрдб рд╕рд░реНрд╡рд▓реЗрдЯ рдХрдВрдЯреЗрдирд░: рдЯреЙрдордХреИрдЯ
- рд▓реЙрдЧрд┐рдВрдЧ: рд▓реЙрдЧрдмреИрдХ, slf4j
рдХреЛрдИ рднреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрди рд╕рднреА рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рд╕реНрдЯрд╛рд░реНрдЯрд░ рд╡реЗрдм рдЙрдирдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИред рдПрдХ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдореБрдЭреЗ рдЗрди рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдпрд╛ рд╕рдВрдЧрдд рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рд╕реНрдЯрд╛рд░реНрдЯрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╡рд┐рдХрд▓реНрдк
рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рд╕реНрдЯрд╛рд░реНрдЯрд░ рд╡реЗрдм рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╕реНрдЯрд╛рд░реНрдЯрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣рдореЗрдВ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╢реАрдШреНрд░рддрд╛ рд╕реЗ рдорджрдж рдХрд░рддреЗ рд╣реИрдВред
- рд╡рд╕рдВрдд-рдмреВрдЯ-рд╕реНрдЯрд╛рд░реНрдЯрд░-рд╡реЗрдм-рд╕реЗрд╡рд╛рдПрдБ: SOAP рд╡реЗрдм рд╕реЗрд╡рд╛рдПрдБ
- рд╕реНрдкреНрд░рд┐рдВрдЧ-рдмреВрдЯ-рд╕реНрдЯрд╛рд░реНрдЯрд░-рд╡реЗрдм: рд╡реЗрдм рдФрд░ рд░реЗрд╕реНрдЯрдлреБрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди
- рд╕реНрдкреНрд░рд┐рдВрдЧ-рдмреВрдЯ-рд╕реНрдЯрд╛рд░реНрдЯрд░-рдЯреЗрд╕реНрдЯ: рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг рдФрд░ рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдг
- рд╕реНрдкреНрд░рд┐рдВрдЧ-рдмреВрдЯ-рд╕реНрдЯрд╛рд░реНрдЯрд░-рдЬреЗрдбрдбреАрдмреА: рдкрд╛рд░рдВрдкрд░рд┐рдХ рдЬреЗрдбреАрдмреАрд╕реА
- рд╕реНрдкреНрд░рд┐рдВрдЧ-рдмреВрдЯ-рд╕реНрдЯрд╛рд░реНрдЯрд░-рд╣рдЯрд┐рдпреЛрд╕: рдЕрдкрдиреА рд╕реЗрд╡рд╛рдУрдВ рдореЗрдВ HATEOAS рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдЬреЛрдбрд╝реЗрдВ
- рд╕реНрдкреНрд░рд┐рдВрдЧ-рдмреВрдЯ-рд╕реНрдЯрд╛рд░реНрдЯрд░-рд╕реБрд░рдХреНрд╖рд╛: рд╕реНрдкреНрд░рд┐рдВрдЧ рд╕реБрд░рдХреНрд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдФрд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг
- рд╕реНрдкреНрд░рд┐рдВрдЧ-рдмреВрдЯ-рд╕реНрдЯрд╛рд░реНрдЯрд░-рдбреЗрдЯрд╛-рдЬреЗрдкрд╛: рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдХреЗ рд╕рд╛рде рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрдЯрд╛ рдЬреЗрдкреАрдП
- рд╕реНрдкреНрд░рд┐рдВрдЧ-рдмреВрдЯ-рд╕реНрдЯрд╛рд░реНрдЯрд░-рдХреИрд╢: рд╕реНрдкреНрд░рд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рдХреИрд╢рд┐рдВрдЧ рд╕рдорд░реНрдерди рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдирд╛
- рд╕реНрдкреНрд░рд┐рдВрдЧ-рдмреВрдЯ-рд╕реНрдЯрд╛рд░реНрдЯрд░-рдбреЗрдЯрд╛-рд░реЗрд╕реНрдЯ: рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрдЯрд╛ рд░реАрд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд░рд▓ рд░реАрд╕реНрдЯ рд╕реЗрд╡рд╛рдПрдВ рдкреНрд░рджрд╛рди рдХрд░рдирд╛
рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдХреЗ рдЕрдиреНрдп рд▓рдХреНрд╖реНрдп
рддрдХрдиреАрдХреА рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдХрдИ рд╢реБрд░реБрдЖрддрдПрдВ рднреА рд╣реИрдВ:
- рд╕реНрдкреНрд░рд┐рдВрдЧ-рдмреВрдЯ-рд╕реНрдЯрд╛рд░реНрдЯрд░-рдПрдХреНрдЯреНрдпреВрдПрдЯрд░: рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреА рдирд┐рдЧрд░рд╛рдиреА рдФрд░ рдЯреНрд░реИрдХрд┐рдВрдЧ рдЬреИрд╕реА рдЙрдиреНрдирдд рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
- рд╕реНрдкреНрд░рд┐рдВрдЧ-рдмреВрдЯ-рд╕реНрдЯрд╛рд░реНрдЯрд░-рдЕрдВрдбрд░, рд╕реНрдкреНрд░рд┐рдВрдЧ-рдмреВрдЯ-рд╕реНрдЯрд╛рд░реНрдЯрд░-рдЬреЗрдЯреНрдЯреА, рд╕реНрдкреНрд░рд┐рдВрдЧ-рдмреВрдЯ-рд╕реНрдЯрд╛рд░реНрдЯрд░-рдЯреЙрдордХреИрдЯ: рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдмрд┐рд▓реНрдЯ-рдЗрди рд╕рд░реНрд╡рд▓реЗрдЯ рдХрдВрдЯреЗрдирд░ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
- рд╕реНрдкреНрд░рд┐рдВрдЧ-рдмреВрдЯ-рд╕реНрдЯрд╛рд░реНрдЯрд░-рд▓реЙрдЧрд┐рдВрдЧ: рд▓реЙрдЧрдмреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓реЙрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП
- рд╡рд╕рдВрдд-рдмреВрдЯ-рд╕реНрдЯрд╛рд░реНрдЯрд░-рд▓реЙрдЧ 4j2: рд▓реЙрдЧ 4j2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓реЙрдЧрд┐рдВрдЧ
рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдЫреЛрдЯреА рдЕрд╡рдзрд┐ рдХреЗ рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдирд╛ рд╣реИред
- рдПрдХреНрдЪреБрдПрдЯрд░: рдЙрдиреНрдирдд рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рдФрд░ рдЯреНрд░реИрдХрд┐рдВрдЧ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рддрд╛ рд╣реИред
- рдПрдВрдмреЗрдбреЗрдб рд╕рд░реНрд╡рд░ рдЗрдВрдЯреАрдЧреНрд░реЗрд╢рди: рдЪреВрдВрдХрд┐ рд╕рд░реНрд╡рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдПрдХреАрдХреГрдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд╕рд░реНрд╡рд░ рдкрд░ рдПрдХ рдЕрд▓рдЧ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рд░реНрд╡рд░ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛
- рдбрд┐рдлрд╝реЙрд▓реНрдЯ рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд┐рдВрдЧ