рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдкреНрд░рддрд┐рдорд╛рди
рдЖрдИрдЯреА рд╡рд┐рдХрд╛рд╕ рдХреА рдЖрдзреБрдирд┐рдХ рджреБрдирд┐рдпрд╛ рдореЗрдВ, рд▓реЗрдЦрди рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рдХреЛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рдкрд╕рдВрдж рд╣реИ, рдЬрдмрдХрд┐ рдХрд┐рд╕реА рдХрд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рддреЗ рд╣реИрдВред рдЗрди рд╡рд┐рдЪрд╛рд░реЛрдВ рдФрд░ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЗ рд╕рдВрдпреЛрдЬрди рд╕реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рд▓реЗрдЦрди рд╢реИрд▓реА рдХрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдмрдирддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЖрдорддреМрд░
рдкрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдкреНрд░рддрд┐рдорд╛рди рдХрд╣рд╛ рдЬрд╛рддрд╛
рд╣реИ ред
рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рддрд┐рдорд╛рди рдХреА рдЕрдкрдиреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЦреНрдп рдХрд╛рд░рдХ рдЬреЛ рдЙрдиреНрд╣реЗрдВ рдЕрд▓рдЧ рдХрд░рддрд╛ рд╣реИ рд╡рд╣ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рдореВрд▓ рдЗрдХрд╛рдИ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИред рдпрд╣рд╛рдБ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реИрдВ:
- рдирд┐рд░реНрджреЗрд╢ (рдЕрдирд┐рд╡рд╛рд░реНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ, FORTRAN / C / PHP),
- рд╕рдорд╛рд░реЛрд╣ (рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ, рд╣рд╛рд╕реНрдХреЗрд▓ / рд▓рд┐рд╕реНрдк / рдПрдл # / рд╕реНрдХрд╛рд▓рд╛),
- рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк (рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ),
- рдСрдмреНрдЬреЗрдХреНрдЯ (рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ, C ++ / Java),
- рддрдереНрдп (рддрд╛рд░реНрдХрд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ, PROLOG)ред
рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рддрд┐рдорд╛рди рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд░рддреА рд╣реИ: рдПрдХ рд╣реА рдкреАрдПрдЪрдкреА рдореЗрдВ, рдЖрдк рдЕрдирд┐рд╡рд╛рд░реНрдп рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдо рджреЛрдиреЛрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдпреБрд╡рд╛, рд▓реЗрдХрд┐рди рдЕрддреНрдпрдВрдд, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдЙрдкрдпреЛрдЧреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдкреНрд░рддрд┐рдорд╛рди -
рдкрд╣рд▓реВ-рдЙрдиреНрдореБрдЦ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рдПрдУрдкреА рдореВрд▓ рдмрд╛рддреЗрдВ
рд╡реИрдХреНрдпреВрдо рдореЗрдВ рдХреБрдЫ рдЧреЛрд▓рд╛рдХрд╛рд░ рд╕реЗрд╡рд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╡реЗрдм рд╕реЗрд╡рд╛) рдЬреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдзрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИ:
public BookDTO getBook(Integer bookId) {
BookDTO book = bookDAO.readBook(bookId);
return book;
}
рдпрд╣ рд╡рд┐рдзрд┐ рдХрд╛рдлреА рд╕рд░рд▓ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд╣реИ: рдХрд┐рд╕реА рдкреБрд╕реНрддрдХ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдЙрд╕рдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдкрдврд╝рдирд╛ред рд▓реЗрдХрд┐рди рдЖрдЗрдП рд╕реЛрдЪрддреЗ рд╣реИрдВ, рдпрд╣рд╛рдВ рдХреНрдпрд╛ рдХрдореА рд╣реИ? рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рд▓реЙрдЧрд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдирд╛ рдЪрд╛рд╣рд┐рдП - рдЗрд╕рдХреЗ рдмрд┐рдирд╛, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рд╕реНрд╡рдпрдВ рд╕рдордЭрддреЗ рд╣реИрдВ, рдПрдХ рд╡реЗрдм рд╕реЗрд╡рд╛ рдореЗрдВ рдЖрдк рдХрд╣реАрдВ рднреА рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ:
public BookDTO getBook(Integer bookId) {
LOG.debug( "Call method getBook with id " + bookId);
BookDTO book = bookDAO.readBook(bookId);
LOG.debug( "Book info is: " + book.toString());
return book;
}
рдЗрд╕рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдЕрдкрд╡рд╛рдж рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкрд░рддреЛрдВ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЛ рдЫрд┐рдкрд╛рддреЗ рд╣реБрдП, рд╕реЗрд╡рд╛ рдкрд░рдд рдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рдЕрдкрд╡рд╛рдж рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП):
public BookDTO getBook(Integer bookId) throws ServiceException {
LOG.debug( "Call method getBook with id " + bookId);
BookDTO book = null ;
try {
book = bookDAO.readBook(bookId);
} catch(SQLException e) {
throw new ServiceException(e);
}
LOG.debug( "Book info is: " + book.toString());
return book;
}
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХреНрд╕реЗрд╕ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛ рди рднреВрд▓реЗрдВ:
public BookDTO getBook(Integer bookId) throws ServiceException, AuthException {
if (!SecurityContext.getUser().hasRight("GetBook"))
throw new AuthException("Permission Denied");
LOG.debug( "Call method getBook with id " + bookId);
BookDTO book = null ;
try {
book = bookDAO.readBook(bookId);
} catch (SQLException e) {
throw new ServiceException(e);
}
LOG.debug( "Book info is: " + book.toString());
return book;
}
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдХрд╛рдо рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдХреИрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ:
public BookDTO getBook(Integer bookId) throws ServiceException, AuthException {
if (!SecurityContext.getUser().hasRight( "GetBook" ))
throw new AuthException( "Permission Denied" );
LOG.debug( "Call method getBook with id " + bookId);
BookDTO book = null ;
String cacheKey = "getBook:" + bookId;
try {
if (cache.contains(cacheKey)) {
book = (BookDTO) cache.get(cacheKey);
} else {
book = bookDAO.readBook(bookId);
cache.put(cacheKey, book);
}
} catch (SQLException e) {
throw new ServiceException(e);
}
LOG.debug( "Book info is: " + book.toString());
return book;
}
рдЖрдк рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ рд╕реБрдзрд╛рд░рдирд╛ рдЬрд╛рд░реА рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП - рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рд╣рдорд╛рд░реЗ рд╕реБрдзрд╛рд░ рдХреЗ рджреМрд░рд╛рди, рд╣рдореЗрдВ рдореВрд▓ рдЖрдХрд╛рд░ рд╕реЗ 10 рдЧреБрдирд╛ (2 рд╕реЗ 20 LOC рддрдХ) рдПрдХ рд╡рд┐рдзрд┐ рдкреНрд░рд╛рдкреНрдд рд╣реБрдИред рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рд╡реНрдпрд╛рдкрд╛рд░рд┐рдХ рддрд░реНрдХ рдХрд╛ рдЖрдпрддрди рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИ - рдпрд╣ рдЕрднреА рднреА рд╡рд╣реА 1 рдкрдВрдХреНрддрд┐ рд╣реИред рдХреЛрдб рдХреЗ рдмрд╛рдХреА рдЖрд╡реЗрджрди рдХреА рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ: рд▓реЙрдЧрд┐рдВрдЧ, рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ, рдЕрднрд┐рдЧрдо рдирд┐рдпрдВрддреНрд░рдг, рдХреИрд╢рд┐рдВрдЧ, рдФрд░ рдЗрд╕реА рддрд░рд╣ред
рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рд╕реЗрд╡рд╛ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рд╡реНрдпрд╛рдкрд╛рд░ рддрд░реНрдХ рдХреЛ рдЗрдВрдЯрд░рд▓рд╛рдХрд┐рдВрдЧ рдХрд░рдирд╛ рдЗрддрдирд╛ рдбрд░рд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдЖрдкрдХрд╛ рдЖрд╡реЗрджрди рдЫреЛрдЯрд╛ рди рд╣реЛред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрд╛рд░реНрдпрдХреНрд░рдо рдЬрд┐рддрдирд╛ рдЬрдЯрд┐рд▓ рд╣реЛрддрд╛ рд╣реИ, рдЙрддрдиреА рд╣реА рд╕рд╛рд╡рдзрд╛рдиреА рд╕реЗ рдЖрдкрдХреЛ рдЗрд╕рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рдордЧреНрд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕реАрд▓рд┐рдП, рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХрд╛ рдЕрд╡рд▓реЛрдХрди рдХрд░рддреЗ рд╣реБрдП, рдкрд╣рд▓реЗ рд╣рдо рдлрд╝рдВрдХреНрд╢рди, рдлрд┐рд░ рдореЙрдбреНрдпреВрд▓, рдлрд┐рд░ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рджреЗрдЦрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрднреНрдпрд╛рд╕ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдкрд░реЛрдХреНрдд рдкреНрд░рддрд┐рдорд╛рди рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИрдВред рдЗрд╕ рддрд░рд╣ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ "рдкрд╛рд╕-рдереНрд░реВ" рдпрд╛ "рдмрд┐рдЦрд░рд╛ рд╣реБрдЖ" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╡реЗрджрди рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╣рд┐рд╕реНрд╕реЛрдВ рдореЗрдВ рдмрд┐рдЦрд░реЗ рд╣реБрдП рд╣реИрдВред рдХреНрд░реЙрд╕-рдХрдЯрд┐рдВрдЧ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рдЙрджрд╛рд╣рд░рдг, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдКрдкрд░ рджреЗрдЦрд╛, рд╡реЗ рд╣реИрдВ:
рдкрд╣рд▓реВ-рдЙрдиреНрдореБрдЦ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ (рдПрдУрдкреА) рдХрд╛ рдореБрдЦреНрдп рдЙрджреНрджреЗрд╢реНрдп рдЕрдВрдд-рдЯреВ-рдПрдВрдб рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╕рдВрд╢реЛрдзрди рд╣реИ, рдЗрд╕рдХрд╛ рдЖрд╡рдВрдЯрди рдкрд╣рд▓реБрдУрдВ рдореЗрдВ рд╣реИ ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, AOP рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╡рд╛рд▓реА рднрд╛рд╖рд╛рдПрдВ рдПрдВрдб-рдЯреВ-рдПрдВрдб рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЯреВрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИрдВ:
- рдкрд╣рд▓реВ - рдПрдХ рдореЙрдбреНрдпреВрд▓ рдпрд╛ рд╡рд░реНрдЧ рдЬреЛ рдЕрдВрдд-рдЯреВ-рдПрдВрдб рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдПрдХ рдкрд╣рд▓реВ рдХреБрдЫ рд╕реНрд▓рд╛рдЗрд╕ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЬреЙрдЗрди рдкреЙрдЗрдВрдЯреНрд╕ рдкрд░ рд╕рд▓рд╛рд╣ рджреЗрдХрд░ рдмрд╛рдХреА рдХреЛрдб рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд╣рд▓реВ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ;
- рд╕рд▓рд╛рд╣ - рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реНрдХ - рдХреЛрдб рдЬрд┐рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдмрд┐рдВрджреБ рд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЯрд┐рдк рдХреЛ рдкрд╣рд▓реЗ, рдмрд╛рдж рдореЗрдВ рдпрд╛ рдПрдХ рд╕рдореНрдорд┐рд▓рд┐рдд рдмрд┐рдВрджреБ рдХреЗ рдмрдЬрд╛рдп рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ;
- рдЬреЙрдЗрди рдкреЙрдЗрдВрдЯ (рдЬреНрд╡рд╛рдЗрди рдкреЙрдЗрдВрдЯ) - рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рдПрдХ рдкреЙрдЗрдВрдЯ рдЬрд┐рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ (рдореЗрдердб рдХреЙрд▓, рдСрдмреНрдЬреЗрдХреНрдЯ рдХреНрд░рд┐рдПрд╢рди, рд╡реИрд░рд┐рдПрдмрд▓ рдПрдХреНрд╕реЗрд╕), рдЬрд╣рд╛рдБ рд╕рд▓рд╛рд╣ рд▓рд╛рдЧреВ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП;
- рд╕реНрд▓рд╛рдЗрд╕ (рдкреЙрдЗрдВрдЯрдХрдЯ) - рдХрдиреЗрдХреНрд╢рди рдмрд┐рдВрджреБрдУрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯред рдПрдХ рд╕реНрд▓рд╛рдЗрд╕ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рджрд┐рдП рдЧрдП рдХрдиреЗрдХреНрд╢рди рдмрд┐рдВрджреБ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдЯрд┐рдк рдкрд░ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ;
- рдкрд░рд┐рдЪрдп - рд╡рд░реНрдЧ рд╕рдВрд░рдЪрдирд╛ рдФрд░ / рдпрд╛ рд╡рд┐рджреЗрд╢реА рдХреЛрдб рдореЗрдВ рдкрд╣рд▓реВ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди;
- рд▓рдХреНрд╖реНрдп - рдЬрд┐рд╕ рдкрд░ рдпреБрдХреНрддрд┐рдпрд╛рдБ рд▓рд╛рдЧреВ рдХреА рдЬрд╛рдПрдВрдЧреА;
- рдмреБрдирд╛рдИ - рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдкрд╣рд▓реБрдУрдВ рдХреЗ рд╕рд╛рде рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ (рд╕рдВрднрд╡рддрдГ рд╕рдВрдХрд▓рди, рд▓реЛрдбрд┐рдВрдЧ рдпрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдЪрд░рдг рдореЗрдВ)ред
рдХреЗрд╕ рд╕реНрдЯрдбреА (AspectJ)
рдкрд╣рд▓реВ рднрд╛рд╖рд╛ рдЬрд╛рд╡рд╛ рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд╣рд▓реВ рдЙрдиреНрдореБрдЦ рд╡рд┐рд╕реНрддрд╛рд░ / рд░реВрдкрд░реЗрдЦрд╛ рд╣реИред рдлрд┐рд▓рд╣рд╛рд▓, рдпрд╣ рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдФрд░ рд╡рд┐рдХрд╛рд╕рд╢реАрд▓ рдПрдУрдкреА рдЗрдВрдЬрди рд╣реИред
рдЗрд╕рдХреА рдорджрдж рд╕реЗ рд▓реЙрдЧрд┐рдВрдЧ рдХреЗ рдкрд╣рд▓реВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
@Aspect
public class WebServiceLogger {
private final static Logger LOG =
Logger.getLogger(WebServiceLogger. class );
@Pointcut( "execution(* example.WebService.*(..))" )
public void webServiceMethod() { }
@Pointcut( "@annotation(example.Loggable)" )
public void loggableMethod() { }
@Around( "webServiceMethod() && loggableMethod()" )
public Object logWebServiceCall(ProceedingJoinPoint thisJoinPoint) {
String methodName = thisJoinPoint.getSignature().getName();
Object[] methodArgs = thisJoinPoint.getArgs();
LOG.debug( "Call method " + methodName + " with args " + methodArgs);
Object result = thisJoinPoint.proceed();
LOG.debug( "Method " + methodName + " returns " + result);
return result;
}
}
рдкрд╣рд▓рд╛ рдХрджрдо рд╕реЗрд╡рд╛ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓реЙрдЧрд┐рдВрдЧ рдХрд╛ рдПрдХ рдкрд╣рд▓реВ рдмрдирд╛рдирд╛ рд╣реИ - рд╡реЗрдмрд╕рд░реНрд╡рд░ рд▓реЛрдЬрд░ рд╡рд░реНрдЧ, рдЬреЛ рдХрд┐ рдРрд╕реНрдкреЗрдХреНрдЯ рдЕрдирд╛рдЙрдВрд╕рдореЗрдВрдЯ рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рд╣реИред рдЕрдЧрд▓рд╛, рдЬрдВрдХреНрд╢рди рдмрд┐рдВрджреБрдУрдВ рдХреЗ рджреЛ рд╕реНрд▓рд╛рдЗрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: webServiceMethod (WebService рд╡рд░реНрдЧ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдХреЙрд▓) рдФрд░ loggableMethod (@Loggable рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдХреЙрд▓)ред рдЕрдВрдд рдореЗрдВ, рдПрдХ рдЯрд┐рдк рдШреЛрд╖рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ (logWebServiceCall рдкрджреНрдзрддрд┐), рдЬрд┐рд╕реЗ (
рд▓рдЧрднрдЧ рдПрдиреЛрдЯреЗрд╢рди) рдХрдиреЗрдХреНрд╢рди рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдмрдЬрд╛рдп рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рд╕реНрд▓рд╛рдЗрд╕ рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ ("webServiceMethod () && loggableMethod ()"))ред
рдкрд░рд┐рд╖рдж рдХреЛрдб рдореЗрдВ, рд╡рд░реНрддрдорд╛рди рд╡рд┐рдзрд┐ (рдХрдиреЗрдХреНрд╢рди рдмрд┐рдВрджреБ), рд╡рд┐рдзрд┐ рдХреА рд╢реБрд░реБрдЖрдд рдХреЗ рд▓реЙрдЧрд┐рдВрдЧ, рдЕрдиреБрд░реЛрдзрд┐рдд рд╡рд┐рдзрд┐ рдХреЗ рд╕реАрдзреЗ рдХреЙрд▓рд┐рдВрдЧ, рд▓реЙрдЧрд┐рдВрдЧ рдФрд░ рдХрд╛рдо рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛рддреА рд╣реИред
AspectJ рдореЗрдВ рдХрдиреЗрдХреНрд╢рди рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд╕рдорд░реНрдерд┐рдд рд╕реНрд▓рд╛рдЗрд╕ рдХреА рдХрд╛рдлреА рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореБрдЦреНрдп рд╣реИрдВ:
- рдирд┐рд╖реНрдкрд╛рджрди (рд╕реНрдерд┐рд░ * com.xyz .. *ред * (..)) - com.xyz рдкреИрдХреЗрдЬ рдореЗрдВ рдХрд┐рд╕реА рднреА рд╕реНрдерд┐рд░ рд╡рд┐рдзрд┐ рдХреЗ рдХреЛрдб рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди;
- рдХреЙрд▓ (рд╢реВрдиреНрдп MyInterfaceред * (..)) - рдХрд┐рд╕реА рднреА рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдЬреЛ MyInterface рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рд╢реВрдиреНрдп рджреЗрддрд╛ рд╣реИ;
- initialization (MyClass || MyOtherClass) - MyClass рдпрд╛ MyOtherClass рд╡рд░реНрдЧ рдХрд╛ рдЖрд░рдВрднреАрдХрд░рдг;
- рд╕реНрдереИрддрд┐рдХрдХрд░рдг (MyClass + &&! MyClass) - рдПрдХ рд╡рд░реНрдЧ рдХрд╛ рд╕реНрдереИрддрд┐рдХ рдЖрд░рдВрднреАрдХрд░рдг рдЬрд┐рд╕рдХрд╛ рдирд╛рдо MyClass рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди MyClass рд╕реЗ рдирд╣реАрдВ;
- рд╣реИрдВрдбрд▓рд░ (ArrayOutOfBoundsException) - рдЕрдкрд╡рд╛рдж рд╣реИрдВрдбрд▓рд░ рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди ArrayOutOfBoundsException;
- get / set (рд╕реНрдерд┐рд░ int MyClass.x) - рд╡рд░реНрдЧ MyClass рдХреА рд╕рдВрдкрддреНрддрд┐ x рдкрдврд╝реЗрдВ / рд▓рд┐рдЦреЗрдВ;
- рдпрд╣ / рд▓рдХреНрд╖реНрдп (MyClass) - рдкреНрд░рдХрд╛рд░ MyClass рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЕрдиреБрд░реВрдк рдХрдиреЗрдХреНрд╢рди рдмрд┐рдВрджреБ рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди;
- args (Integer) - рдПрдХ рдХрдиреЗрдХреНрд╢рди рдмрд┐рдВрджреБ рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рдЬрд┐рд╕ рдкрд░ Integer рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рддрд░реНрдХ рдЙрдкрд▓рдмреНрдз рд╣реИ;
- рдЕрдЧрд░ (thisJoinPoint.getKind ()ред рдмрд░рд╛рдмрд░ ("рдХреЙрд▓")) - рд╕рднреА рдХрдиреЗрдХреНрд╢рди рдмрд┐рдВрджреБрдУрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рджреА рдЧрдИ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╕рддреНрдп рд╣реИ;
- рднреАрддрд░ / рднреАрддрд░ (MyClass) - рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рд╡рд░реНрдЧ рдХреЗ рдХреЛрдб рдореЗрдВ рдкрд╛рдП рдЧрдП рд╕рднреА рдХрдиреЗрдХреНрд╢рди рдмрд┐рдВрджреБрдУрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ;
- cflow / cflowbelow (рдХреЙрд▓ (рд╢реВрдиреНрдп MyClass.test ())) - рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕реНрд▓рд╛рдЗрд╕ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдереНрд░реЗрдб рдореЗрдВ рд╕рд╛рдордирд╛ рдХрд┐рдП рдЧрдП рд╕рднреА рдХрдиреЗрдХреНрд╢рди рдмрд┐рдВрджреБрдУрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ;
- @annotation (MyAnnotation) - рдПрдХ рдЬреЙрдЗрдиреНрдЯ рдкреЙрдЗрдВрдЯ рдХреЛ рдПрдХреНрд╕реЗрдХреНрдпреВрдЯ рдХрд░реЗрдВ рдЬрд┐рд╕рдХрд╛ рдЯрд╛рд░рдЧреЗрдЯ @MyAnnotation annation рд╕реЗ рдЪрд┐рд╣реНрдирд┐рдд рд╣реИред
рдпреБрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдЙрдирдХреА рд╕рдВрдЦреНрдпрд╛ рдмрд╣реБрдд рдЫреЛрдЯреА рд╣реИ, рд▓реЗрдХрд┐рди рд╡реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдХрдИ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░рддреЗ рд╣реИрдВ:
- рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ - рдЬреНрд╡рд╛рдЗрди рдкреЙрдЗрдВрдЯ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдмреЛрд░реНрдб рд╢реБрд░реВ рдХрд░реЗрдВ,
- рд▓реМрдЯрдиреЗ рдХреЗ рдмрд╛рдж - рдХрдиреЗрдХреНрд╢рди рдмрд┐рдВрджреБ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдмрд╛рдж рдмреЛрд░реНрдб рд╢реБрд░реВ рдХрд░реЗрдВ,
- рдлреЗрдВрдХрдиреЗ рдХреЗ рдмрд╛рдж - рдЬреНрд╡рд╛рдЗрди рдкреЙрдЗрдВрдЯ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХрдиреЗ рдХреЗ рдмрд╛рдж рд╕рд▓рд╛рд╣ рд╢реБрд░реВ рдХрд░реЗрдВ,
- рдХреЗ рдмрд╛рдж - рдХрдиреЗрдХреНрд╢рди рдмрд┐рдВрджреБ рдХреЗ рдХрд┐рд╕реА рднреА рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдмрд╛рдж рдмреЛрд░реНрдб рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ,
- рд▓рдЧрднрдЧ - рдПрдХ рд╕рдореНрдорд┐рд▓рд┐рдд рдмрд┐рдВрджреБ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдкрд░рд┐рд╖рдж рд╢реБрд░реВ рдХрд░рдирд╛ (рдПрдХ рд╕рдореНрдорд┐рд▓рд┐рдд рдмрд┐рдВрджреБ рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рдкрд░рд┐рд╖рдж рдХреЗ рдЕрдВрджрд░ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)
рдЖрдк
рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рдЕрдиреБрднрд╛рдЧ [
1 ,
2 ] рдореЗрдВ AspectJ рдбрд┐рдЬрд╛рдЗрдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
AspectJ рдкрд╣рд▓реБрдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖
AJC рд╕рдВрдХрд▓рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореБрдЦреНрдп рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдФрд░
рд╕рд┐рд▓рдирд╛ рд╣реЛрдЧрд╛ ред
рдЙрддреНрдкрд╛рдж рдореБрдлреНрдд рд╣реИред рдЧреНрд░рд╣рдг рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЗ рддрд╣рдд рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ред
рдХреЗрд╕ рд╕реНрдЯрдбреА (рдкреЛрд╕реНрдЯрд╢реЗрдпрд░)
PostSharp .NET рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд╣рд▓реВ-рдЙрдиреНрдореБрдЦ рд░реВрдкрд░реЗрдЦрд╛ рд╣реИред .NET рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп AOP рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИрдВ, рд╣рд╛рд▓рд╛рдБрдХрд┐, PostSharp рд╕рд╛рдЗрдЯ рд╕реЗ
рддреБрд▓рдирд╛ рдХрд░рдХреЗ, рдпрд╣ рд╡рд╣ рд╣реИ рдЬреЛ рдкреНрд░рдореБрдЦ рд╕реНрдерд╛рди рд░рдЦрддрд╛ рд╣реИред
рдЕрдкрд╡рд╛рдж рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреЗ рдкрд╣рд▓реВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдкрд╣рд▓рд╛ рдХрджрдо рдПрдХ рдРрд╕рд╛ рд╡рд░реНрдЧ рдмрдирд╛рдирд╛ рд╣реИ рдЬреЛ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдкрд╣рд▓реВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИ:
public class ExceptionDialogAttribute : OnExceptionAspect
{
public override void OnException(MethodExecutionEventArgs eventArgs)
{
string message = eventArgs.Exception.Message;
Window window = Window.GetWindow((DependencyObject)eventArgs.Instance);
MessageBox.Show(window, message, "Exception" );
eventArgs.FlowBehavior = FlowBehavior.Continue;
}
}
рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ, рдкреЛрд╕реНрдЯрд╢рд╛рд░реНрдк рд╢рдмреНрджрд╛рд╡рд▓реА рдореЗрдВ рдкрд╣рд▓реВ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдУрдкреА рд╢рдмреНрджрд╛рд╡рд▓реА рдореЗрдВ рдПрдХ рдкрд╣рд▓реВ рдФрд░ рд╕рд▓рд╛рд╣ред
рдЗрд╕ рдкрд╣рд▓реВ рдХреЗ рд▓рд┐рдП рдЪреМрд░рд╛рд╣реЗ рдХреЗ рдмрд┐рдВрджреБрдУрдВ рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд┐рдзрд╛рдирд╕рднрд╛ рд╕реЗрдЯрд┐рдВрдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдВрдХреНрддрд┐ рдЬреЛрдбрд╝реЗрдВ (AssemblyInfo.cs):
[assembly: ExceptionDialog ( AttributeTargetTypes= "Example.WorkflowService.*" ,
AttributeTargetMemberAttributes = AttributeTargetElements.Public )]
рдпрд╛, ExceptionDialog рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЖрдкрдХреА рд░реБрдЪрд┐ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВ:
[ExceptionDialog]
public BookDTO GetBook(Integer bookId)
рдпрд╣ рд╕рдм рд╣реИ: рдЕрдм рд╕рдВрдмрдВрдзрд┐рдд рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдлреЗрдВрдХреЗ рдЧрдП рд╕рднреА рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдмрдирд╛рдП рдЧрдП рдкрд╣рд▓реВ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ PostSharp рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рд╕рд▓рд╛рд╣ рдФрд░ рдкрд╣рд▓реВ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЛ рдЪрд┐рддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдмрд╛рдж рд╡рд╛рд▓реЗ рдХреЗ рдкрд╛рд╕ рдХрд╛рдлреА рдХрдо рд╣реИред рд╡рд┐рд╡рд░рдг
рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореБрдЦреНрдп рд╣реИрдВ:
- OnMethodBoundary / OnMethodInvocation - рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ (рдкреНрд░рд╛рд░рдВрдн, рдЕрдВрдд, рдирд┐рдХрд╛рд╕, рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ);
- OnFieldAccess - рд╕рдВрдкрддреНрддрд┐ рддрдХ рдкрд╣реБрдВрдЪ;
- OnException - рдЕрдкрд╡рд╛рдж рд╣реИрдВрдбрд▓рд┐рдВрдЧ;
- рд░рдЪрдирд╛ - рдХреЛрдб рдЗрдВрдЬреЗрдХреНрд╢рди;
рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, PostSharp рдХреЛ рдПрдХ рдХрдВрдкрд╛рдЗрд▓рд░ рдФрд░ рдПрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рд┐рд▓рд╛рдИ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд╛рдж рдХреЗ рдирд┐рд░реНрдорд╛рдг рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдмрд╛рдпреЛрдЯреЗрдХ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред
рдЙрддреНрдкрд╛рдж рдХрд╛ рднреБрдЧрддрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рд╕рд╛рдореБрджрд╛рдпрд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рд╣реИред
рд╕рд┐рджреНрдзрд╛рдВрдд рд╕реЗ рдЕрднреНрдпрд╛рд╕ рддрдХ
рдФрд░ рдЗрд╕рд▓рд┐рдП, рд╣рдордиреЗ рджреЗрдЦрд╛ рдХрд┐ рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдореЗрдВ рдПрдВрдб-рдЯреВ-рдПрдВрдб рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ "рдмреНрд░реИрдХреЗрдЯреНрд╕ рдХреЛ рдмрд╛рд╣рд░ рд░рдЦрдиреЗ" рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХрд┐рддрдиреА рдЦреВрдмрд╕реВрд░рддреА рд╕реЗ рдФрд░ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рд╕рдм рдПрдХ рд╕рд┐рджреНрдзрд╛рдВрдд рд╣реИред рдЕрднреНрдпрд╛рд╕ рдореЗрдВ, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рд╕рдм рдХреБрдЫ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╣реИ :)
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╕рдВрдХрд▓рди рдХреЗ рд▓рд┐рдП рдФрд░ рдкрд╣рд▓реБрдУрдВ рдХреА "рдмреБрдирд╛рдИ" рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕рдВрдХрд▓рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рд╛рде рдЕрддрд┐рд░рд┐рдХреНрдд рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдЦреАрдВрдЪрдирд╛ рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ: рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдкрд░реНрдпрд╛рд╡рд░рдг рдореЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рдПрдХреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рд╡реЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдкрд╣рд▓реВ-рдорд╛рд╡реЗрди-рдкреНрд▓рдЧ-рдЗрди рдкреНрд▓рдЧ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдХрдо рд╣реЛ рдЬрд╛рдПрдЧрд╛), рдФрд░ рдмрд╣реБрдд рд╕рд╛рд░реА рдирд┐рд░реНрднрд░рддрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдмрд╛рдд рд╣реИ, рдХрдо рд╕реЗ рдХрдо рдЬрд╛рд╡рд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдПред (рдПрдХ рд╣реА рдорд╛рд╡реЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛)ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдХреБрдЫ рдРрд╕рд╛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рд╕рдВрдХрд▓рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╡реНрдпрд╛рдкрдХ рд╡рд┐рддрд░рдг рднреА рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЕрдХреНрд╕рд░ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рд▓рд╛рднреЛрдВ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдбрд░рд╛рддрд╛ рд╣реИред
рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╕реНрдкреНрд░рд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ [
1 ,
2 ] рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдмрди рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдврд╛рдВрдЪреЗ рдХреЗ рдХрдИ рдлрд╛рдпрджреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕ рд▓реЗрдЦ рдХреЗ рдврд╛рдВрдЪреЗ рдХреЗ рднреАрддрд░ рд╣рдо рдЗрд╕рдХреЗ рдПрдУрдкреА рдШрдЯрдХ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред рд╕реНрдкреНрд░рд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рдкреНрд░реЙрдХреНрд╕реА рдкрд╛рд░реНрдЯреА (JDK рдбрд╛рдпрдиреЗрдорд┐рдХ рдкреНрд░реЙрдХреНрд╕реА, CGLIB) рдмрдирд╛рдХрд░ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рд╢реБрджреНрдз рдЬрд╛рд╡рд╛ (C #) рдореЗрдВ
AOP рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд╕реАрдорд┐рдд
рдХрд░рддрд╛ рд╣реИред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рд╕реНрдкреНрд░рд┐рдВрдЧ рдПрдУрдкреА рдореЗрдВ, рдЖрдк рдХреЗрд╡рд▓ "рд╡рд┐рдзрд┐ рдирд┐рд╖реНрдкрд╛рджрди" рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдореНрдорд┐рд▓рд┐рдд рдмрд┐рдВрджреБрдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬреИрд╕рд╛ рдХрд┐ рдЕрднреНрдпрд╛рд╕ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ, рдпрд╣ рдкреНрд░рддрд┐рдмрдВрдз рдорд╣рддреНрд╡рдкреВрд░реНрдг рднреВрдорд┐рдХрд╛ рдирд╣реАрдВ рдирд┐рднрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрдиреЗрдХреНрд╢рди рдмрд┐рдВрджреБрдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕реНрдкреНрд░рд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ @AspectJ рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдкрд╣рд▓реБрдУрдВ рдХрд╛ рдПрдХреАрдХрд░рдг рд╕реАрдзреЗ рдПрд╕реНрдкреЗрдХреНрдЯрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИред
рд╣рдорд╛рд░реА рдХрдВрдкрдиреА рдореЗрдВ рд╣рдо рд╕реНрдкреНрд░рд┐рдВрдЧ AOP рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд╕реНрдкреНрд░рд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреА рдЕрдиреНрдп рдпреЛрдЧреНрдпрддрд╛ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдпрд╣ AOP рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдордВрдЪ рд╣реИ, рдЬреЛ рдЗрд╕рдХреЗ рд▓реЛрдХрдкреНрд░рд┐рдпрдХрд░рдг рдФрд░ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдпреЛрдЧрджрд╛рди рджреЗрддрд╛ рд╣реИред
рд╕рд╛рд░рд╛рдВрд╢
рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдореИрдВ AOP рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рддреАрди рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ:
- AOP рдХрд╛ рдореБрдЦреНрдп рд▓рдХреНрд╖реНрдп "рдХреЛрд╖реНрдардХ" (рдПрдВрдб-рдЯреВ-рдПрдВрдб) рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ "рдХреЛрд╖реНрдардХ рд╕реЗ рдмрд╛рд╣рд░" (рдЕрдВрдд-рдЯреВ-рдПрдВрдб рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╕рдВрд╢реЛрдзрди) рдХреЛ рд╣рдЯрд╛рдирд╛ рд╣реИ;
- рдЬрд╛рд╡рд╛ рдХреЗ рд▓рд┐рдП, AOP AspectJ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╣реИред .NET рдХреЗ рд▓рд┐рдП PostSharp рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ;
- рдПрдУрдкреА рдХрд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдФрд░ рд╕рдмрд╕реЗ рд╕рд┐рджреНрдз рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реНрдкреНрд░рд┐рдВрдЧ рдПрдУрдкреА рд╣реИред
рд╕рдВрдмрдВрдзрд┐рдд рд▓рд┐рдВрдХ