..
온라인 강좌
  • 페이스 북에 우리를 따르라
  • 트위터에 우리를 따르라
  • + Google에 우리를 따르라
  • RSS를 통해 우리를 따르라
  • 귀하의 스마트폰으로 우리를 따라

AOP는 - 가로 만들기

이제 측면을 만드는 방법을 보도록하자.
먼저 우리는 우리가 우리 pointcuts를 작성합니다하는 인터페이스 예제를 만들려면 :



 MyInterface {공용 인터페이스


  

 공공 공극 F1 ();


  

 공공 int는 F2 ();


  

 공공 int는 F3 ()는 예외를 throw;


  

 공공 공극 F4 ()는 예외를 throw;


  

 공공 INT F5 ();



 }

pointcut을 작성하려면 알고 있어야 AspectJ pointcut의 designators을 , 우리의 예제에서 우리는 실행 메소드의 실행 일치하는 지점을 조인을 사용합니다.
실행 유형의 표현의 형식은 다음과 같습니다 :
 

 실행 (수정자 - 패턴? RET 형 패턴 선언 형 패턴? 이름 패턴 (패턴 PARAM) 던졌습 패턴?)
 
위치 : 더 나은 구문을 이해하기 위해서, 우리는 예제와 함께 시작합니다.

무엇보다도 우리는 우리의 관점을 만들어야합니다 :



 @ 가로



 공용 클래스 {MyAspect

  

 .............



 }

우리가 보는 바와 같이 클래스는 @ 가로와 주석입니다. . 당신은 AOP nell'applicationContext XML에 대한 지원을 활성화해야하기 때문에 충분하지 않다 :


 <-! ENBLING AspectJ ->



 <aop:aspectj-autoproxy />




 <-! MYASPECT ->



 <bean id="myAspect" class="it.mrwebmaster.aop.MyAspect" />

일단이 두 가지 조언을 만들 준비가 완료 예를 들어, 작업 메서드 F1의 실행 (상담 전) 전에 수행 :



 @ 전에 ( "실행 (* it.mrwebmaster.aop.MyInterface.f1 (..))")



 공공 공극 beforeF1 () {

  

 System.out.println ( "F1 전에");



 }

코드에서 볼 수 있듯이 우리는 pointcut 표현을 식별하는 이러한 가치를 수락하기 전에 주석 @를 사용했습니다. 우리의 예제에서 표현식은 F1 it.mrwebmaster.aop.MyInterface에게 수정자, 반환 유형 및 입력 매개 변수들의 상관없이 전화를하고있는 인터페이스 방식과 일치합니다.
마찬가지로 우리는 방법이 제대로 주석 @ AfterReturning을 사용하여 실행 (조언을 반환 이후) 완료될 때 실행 조언을 사용할 수 있습니다 :



 @ AfterReturning (pointcut을 = "실행 (* it.mrwebmaster.aop.MyInterface.f2는 (..))"= "retVal"를 반환)



 공공 무효 afterReturningF2 (객체 retVal) {

  

 System.out.println ( "F2 리턴 '+ retVal);



 }

이 기록이 매개 변수로 받아, pointcut 이외에, 이름은 입력 매개 변수 dell'advice로 주어진 수 있습니다 메소드에 의해 반환된 개체에 주어진. 이 경우 pointcut의 표현은이 경우에는 F2는 메서드의 이름을 제외하고 inviarata 남아있다.
매우 유사한는 방법은 주석 @ AfterThrowing를 사용하여 예외를 (조언을 던지는 이후) 던졌습 때 실행되는 조언입니다


 @ AfterThrowing (pointcut = "실행 (* it.mrwebmaster.aop.MyInterface.f3 (..))"= "throwable"를 던지기)



 공공 무효 afterThrowingF3 (Throwable throwable) {
 
  

 System.out.println (+ throwable "를 F3은 던진다");



 }

차이점은 메서드 개체에 있지만 예외를 반환한다는 것입니다.

조언의 또 다른 유형은 항상 메서드 후 실행은 정상적이나 용어 예외 (상담 후) 시작, 그 이유입니다. 이 조언은 후 @의 사용을 통해 구현됩니다 :



 @ 후 ( "실행 (* it.mrwebmaster.aop.MyInterface.f4 (..))")



 공공 공극 afterF4 () {

  

 System.out.println ( "F4 이후 ');



 }

마지막으로 우리는 조언 주변 '만드는 방법을 참조하십시오



 @ 주변 ( "실행 (* it.mrwebmaster.aop.MyInterface.f5 (..))")



 공공 무효 aroundF5 (ProceedingJoinPoint PJP) {

  

 System.out.println ( "F5 전에");

  

 시도 {

    

 retVal =) (pjp.proceed 객체;

    

 System.out.println ( "F5 리턴 '+ retVal);

  

 } 캐치 (Throwable e)를 {

    

 System.out.println ( "F5가 던진다"+ E);

  

 }



 }

우리는 pointcut 표현의 코드에서 볼 수 있듯이 다른 조언과 다릅니다 없습니다. 어떤 변화하는 것은 명시적으로 방법으로 메서드의 실행을 호출해야합니다 같은 조언 가진 인스턴스 입력으로 전달된다 ProceedingJoinPoint 수업 진행. 이 인터페이스는, 제공 방법 이외에 방법은, 반환 형식과 메서드가 실행되는 개체의 매개 변수에 대한 정보를 검색하기 위해 다른 방법을 진행. 그것은 독자에 깊이 남아있다.

우리의 조언을 테스트하려면 우리는 인터페이스 MyInterface의 사소한 구현을 쓰기, 주요 테스트를 만들어야합니다 :



 MyInterfaceImpl {공용 클래스가 MyInterface를 구현


  

 @ 무시

  

 공공 공극 F1 () {

    

 System.out.println ( "F1");

  

 }


  

 @ 무시

  

 공공 int는 F2 () {

    

 System.out.println ( "F2");

    

 0을 반환;

  

 }


  

 @ 무시

  

 공공 INT F3는 () {예외를 throw합니다

    

 System.out.println ( "F3");

    

 새 예외 ( "F3 예외")하다;

  

 }


  

 @ 무시

  

 공공 공극 F4가 () {예외를 throw합니다

    

 System.out.println ( "F4");

  

 }


  

 @ 무시

  

 공공 INT F5 () {

    

 System.out.println ( "F5");

    

 0을 반환;

  

 }



 }

. nell'applicationContext XML :


 <-! 대상 개체 ->



 <bean id="myInterfaceImpl" class="it.mrwebmaster.aop.MyInterfaceImpl" />

주요 시험 :


 공용 클래스 메인 {


  

 공공 정적 무효 메인 (문자열 [] 인수) {


    

 / **

     

 * Instanzio IOC 컨테이너

     

 * /

    

 ApplicationContext ApplicationContext = 새로운 ClassPathXmlApplicationContext ( "applicationContext.xml");


    

 MyInterface MyInterface = (MyInterface) applicationContext.getBean ( "myInterfaceImpl");


    

 myInterface.f1 ();

    

 System.out.println ( "# # # # # # # # # # \ N");


    

 myInterface.f2 ();

    

 System.out.println ( "# # # # # # # # # # \ N");


    

 시도 {

      

 myInterface.f3 ();

    

 } 캐치 (예외 전자) {}

    

 System.out.println ( "# # # # # # # # # # \ N");


    

 시도 {

      

 myInterface.f4 ();

    

 } 캐치 (예외 전자) {}

    

 System.out.println ( "# # # # # # # # # # \ N");


    

 myInterface.f5 ();

    

 System.out.println ( "# # # # # # # # # # \ N");

  

 }



 }

코스
리눅스 강좌 리눅스 강좌
오픈 소스 시스템에 완전한 가이드. 39 €부터 시작.
PHP 강좌 PHP 강좌
동적 웹 사이트를 만드는 전체 과정. 49 €부터 시작.
코스 루비와 레일에 루비 코스 루비와 레일에 루비
루비와 RoR로 소프트웨어와 웹 애플 리케이션을 생성. 49 €부터 시작.
개요
광고

cpclubpenguincheatscp.com

광고
회사 소개
미국의 소리 접촉하기
공동 작업
면책 조항
© 2003년에서 2012년까지 cpclubpenguincheatscp.com - 이탈리아 웹마 스터의 포털 - 판권 소유 |에 의해 구동 인터넷 미디어 IKIweb Srl - PIVA 02848390122