Java/Spring

Spring #5

DGeon 2023. 3. 22. 15:01

 

  • AspectJExpressionPointcutAdvisor
    • advisor.setAdvice(new SimpleAdv());
    • advisor.setExpression("execution(* one(..))");
      • and args 조건식을 걸 수도 있음
      • 모든 one메소드에서 사용
      • execution
          • 리턴타입에 대한 정의(은 모든 리턴 타입, int void 다 올 수 있음 ..:범위 조건(파라미터 갯수 제한 없음)
      • one*
        • one으로 시작하는 모든 메소드 (패키지 명 부터 올 수 있음)
      AspectJExpressionPointcutAdvisor advisor = new AspectJExpressionPointcutAdvisor();
      		advisor.setAdvice(new SimpleAdv());
      		advisor.setExpression("execution(* one(..))");
      		//and args조건식을 걸 수도 있음
      		//모든 one메소드에서 사용, 
      		//execution: 
      		//* : 리턴타입에 대한 정의(*은 모든 리턴 타입, int void 다 올 수 있음
      		//..:범위 조건(파라미터 갯수 제한 없음)
      		//* one* : one으로 시작하는 모든 메소드 (패키지 명 부터 올 수 있음)
      		
      		Pointcut pc = advisor.getPointcut();
      		Advice adv = advisor.getAdvice();
      		
      		ProxyFactory pf = new ProxyFactory();
      		pf.addAdvisor(advisor);
      		pf.setTarget(first);
      		
      		First first2 = (First)pf.getProxy();
      		
      		pf = new ProxyFactory();
      		pf.addAdvisor(advisor);
      		pf.setTarget(second);
      		
      		Second second2 =(Second)pf.getProxy();
      		
      		first2.one();
      		first2.two();
      		second2.one();
      		second2.two();
      
    • execution(리턴타입 클래스이름 메소드이름(매개변수**)**)
  • ProxyFactoryBean
    • 어드바이스, 어드바이저를 제공
  • AOP프록시를 생성(ProxyFactoryBean)