2020년 10월 7일 수요일

스프링프레임워크,AOP 포인트컷(pointcut), DynamicMethodMatcherPointcut 이론및실습/포인트컷/타겟클래스/위빙(자바동영상/스프링동영상/자바동영상/자바교육/스프링교육/SpringFramework/스프링프레임워크/스프링학원/자바학원/자바/JAVA)

 


스프링프레임워크,AOP 포인트컷(pointcut), DynamicMethodMatcherPointcut 이론및실습/포인트컷/타겟클래스/위빙(자바동영상/스프링동영상/자바동영상/자바교육/스프링교육/SpringFramework/스프링프레임워크/스프링학원/자바학원/자바/JAVA)   

 

 

포인트컷(Pointcut) - DynamicMethodMatcherPointcut

 

n  정적 정보인 클래스이름메소드이름에 더해 메소드 매개변수의 특정한 조건에 따라 충고가 적용될 메소드를 정의하는 포인트컷 이다.

n  DynamicMethodMatcherPointcut에서 충고가 적용되는 메소드는 모든 메소드를 검사하는 초기화 단계메소드가 처음 호출되는 시점에 걸쳐 두 번의 정적 검사를 받게 된다.  이 처럼 동적 포인트 컷은 정적 포인트 컷 보다 유연하게 적용될 수 있지만 성능 부담을 고려해 필요한 경우만 사용해야 한다.

 

[First.java]

package onj.edu.aop2;

 

public class First {

           public void one(int i) {

                      System.out.println("First One... i = " + i);

           }

           public void two() {

                      System.out.println("First Two...");

           }

 

[SimpleAdvice.java]

package onj.edu.aop2;

 

import org.aopalliance.intercept.MethodInterceptor;

import org.aopalliance.intercept.MethodInvocation;

//주변충고

public class SimpleAdvice implements MethodInterceptor {

           public Object invoke(MethodInvocation invocation) throws Throwable {

                      System.out.println(invocation.getMethod().getName());                   

                      Object o = invocation.proceed();

                      System.out.println("... SimpleAdvice의 충고가 적용됨 ...");

                     

                      return o;

           }

}

 

[SimpleDynamicPointcut.java]

package onj.edu.aop2;

 

import java.lang.reflect.Method;

 

import org.springframework.aop.ClassFilter;

import org.springframework.aop.support.DynamicMethodMatcherPointcut;

 

/* DynamicMethodMatcherPointcut

 * matches(Method method, Class<?> cls, Object[] args) 반드시 구현해야함

 정적체크를 위해서는 matches(Method method, Class<?> cls)도 같이 구현해야 한다.

 */

public class SimpleDynamicPointcut extends DynamicMethodMatcherPointcut {

 

           //메소드 이름이 one 인 경우 true 즉 충고가 주입된다.아래는 정적체크

           //스프링은 two  메소드에 대해서는 동적 검사를 진행 안함

           public boolean matches(Method method, Class<?> cls) {

                      System.out.println("static check :: method.getName() :: " + method.getName());

                   return "one".equals(method.getName());

           }

 

           //동적 검사

           public boolean matches(Method method, Class<?> cls, Object[] args) {

                      System.out.println("Dynamic Check : " + ((Integer)args[0]).intValue());

 

                      int i = ((Integer)args[0]).intValue();

                      return i > 100;

           }

 

           //First.class만 충고가 주입된다.

           public ClassFilter getClassFilter() {

                      return new ClassFilter() {

                                 public boolean matches(Class <?> cls) {

                                 return (cls == First.class);

                                 }

                      };

           }

}

 

[DynamicPointcutExam.java]

package onj.edu.aop2;

import org.springframework.aop.Advisor;

import org.springframework.aop.framework.ProxyFactory;

import org.springframework.aop.support.DefaultPointcutAdvisor;

public class DynamicPointcutExam {

           public static void main(String[] args) {

                      First target = new First();

                      //어드바이저 생성

                      Advisor advisor = new DefaultPointcutAdvisor(new                          SimpleDynamicPointcut(), new SimpleAdvice());

 

                      ProxyFactory pf = new ProxyFactory();

                      pf.setTarget(target);

                      pf.addAdvisor(advisor);

                      First proxy = (First)pf.getProxy();

 

                      proxy.one(99);

                      proxy.one(101);

                      proxy.two();

           }

}

 

[결과]

e13085d7c61c439cda277ddfbd230ee2_1602076
 

 

#DynamicMethodMatcherPointcut, #스프링포인트컷, #스프링충고, #포인트컷, #스프링pointcut, #스프링AOP, #스프링advice, #SpringAOP, #스프링DI, #스프링IoC, #SpringDI, #SpringIoC, #자바스프링, #Spring동영상, #Spring강의, #스프링프레임워크, #스프링교육, #스프링학원, #스프링강좌, #스프링강의, #자바학원, #자바, #스프링동영상, #자바동영상, #스프링프레임워크교육, #스프링프레임워크강의, #스프링프레임워크학원    

댓글 없음:

댓글 쓰기

(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...