A, 스프링 AOP 주석 기반 구성
는 클래스의 로그를 생성 한 후 (각 방법 로깅을 첨가하는 방법을 수행 임) AccountService의 향상 및 할 필요가 생성 가정 1. 그 구현 로깅 단계;
// 클래스 주입 스프링 용기 @Component ( "로거" ) @Aspect //는 현재 클래스의 슬라이스를 나타내고,는 클래스 공개 클래스 로거 { @Pointcut ( "실행 (com.li.service.impl *. *. * (. .)) " ) 개인 무효 PT1을 () { } / ** * 사전 통지 * / @Before ( "PT1 () " ) 공공 무효 beforePrintLog () { 에서 System.out.println ( "사전 알림 클래스 로거 상기 방법은 beforePrintLog를 로깅 시작 ... " ) } / ** * 후방 통지 * / @AfterReturning ( "PT1 () " ) 공중 보이드 afterReturningPrintLog는 () { 에서 System.out.println는 ( "포스트 알림 방법 afterReturningPrintLog Logger 클래스는 기록을 시작한다 ..." ) } / ** * 이상 통지 * / @AfterThrowing ( "PT1 ()" ) 공중 무효 afterThrowingPrintLog는 () { 에서 System.out.println는 ( "이상 통지 방법 afterThrowingPrintLog Logger 클래스 로깅을 시작 ..." ) } / ** * 최종 통지 * / @After ( "PT1 ()" ) 공중 공극 afterPrintLog ( ) { 에서 System.out.println는 ( "최종 통지 방법 afterPrintLog Logger 클래스는 기록을 시작한다 ..." ); } / ** * 서라운드 통지 : 질문 * 우리가 조언을 주위에 구성하면 *, 진입 점 방법이 수행되지 않지만, 통지 방법의 구현 * 분석 : * 주위에 조언 동적 프록시 명확한 진입 점 메서드 호출을 가지고, 우리는하지 않았다 * 해결 : * 봄이 인터페이스를 제공합니다 ProceedingJoinPoint이 방법은 진입 점 방법을 명시 적으로 호출하는 것과 같습니다 () 인터페이스로 진행 * 인터페이스가 프로그램 실행시, 조언 주위 메소드 매개 변수로 사용할 수 있습니다, 스프링 프레임 워크는 우리의 구현 클래스에 대한 인터페이스를 제공합니다 우리가 사용 * 알림 주위 장식은 수동 제어 방법은 코드에서 수행 할 때 향상 될 수있다 * * / // @Around ( "PT1 ()") 공공 객체 aroundPrintLog (ProceedingJoinPoint PJP) { 객체 rtValue = 널 ; 은 try { 객체 []에 args = pjp.getArgs () 에서 System.out.println ("AroundPrintLog 방법 로거 클래스 ... 로깅을 사전은-시작" ); rtValue이 pjp.proceed (인수를 =); // 명시 적으로 호출 비즈니스 계층 방법 (진입 점 방법) 가지고 에서 System.out.println을 ( "Logger 클래스 방법은 ... "aroundPrintLog 게시물을 로깅 시작 ) 반환 rtValue을; } 캐치 (Throwable의 T가) { 에서 System.out.println이 ( "방법 aroundPrintLog Logger 클래스는 예외를 로깅 시작 ... " ); 던져 새로운 새로운 의 RuntimeException을을 (T) } 마침내 { 에서 System.out.println는 ( "방법 aroundPrintLog Logger 클래스 최종 기록 시작 ..." ); } } }
@Service ( "AccountService에" ) 공개 수업 AccountServiceImpl 구현 IAccountService { 공공 무효 saveAccount () { 에서 System.out.println ( "막아" ); } 공공 무효 updateAccount는 ( INT I) { 에서 System.out.println는 ( "수행 업데이트 "+ I); } 공공 INT의 deleteAccount () { 에서 System.out.println ( "삭제 " ); 반환 0 ; } }
2. 구성 열기 코멘트
<! - 스캔 한 패키지로 컨테이너를 생성하는 봄 구성 -> < 컨텍스트 : 구성 요소 - 스캔 에 대한 자료-패키지 페널티 = "com.li" >가 </ 컨텍스트 : 구성 요소 스캔 > <! - 구성 봄 열기 코멘트 AOP 지원 -> < AOP : - 더 AspectJ를 자동 프록시 > </ AOP : AspectJ를 자동 프록시 - 더 >