목록BE (354)
오봉이와 함께하는 개발 블로그
스프링 핵심 원리 - 고급편 > 여러 어드바이저 함께 적용어드바이저는 하나의 포인트컷과 하나의 어드바이저를 가지고 있다.만약 여러 어드바이저를 하나의 target에 적용하려면 어떻게 해야할까?가장 당장 떠오르는 방법은 프록시를 여러 개 만들면 될 거 같다.public class MultiAdvisorTest { @Test void multiAdvisorTest1() { // client -> proxy2(advisor2) -> proxy1 (advisor1) -> target // Create proxy1 ServiceInterface target = new ServiceImpl(); ProxyFactory proxyFactory1 = new ProxyFactory(target)..
스프링 핵심 원리 - 고급편 > 스프링이 제공하는 포인트컷사실 스프링에서 우리가 필요한 포인트컷의 대부분을 이미 제공한다.이번에는 스프링이 제공하는 NameMatchMethodPointcut을 사용해서 구현해보자 @Test void advisorTest3() { ServiceImpl target = new ServiceImpl(); ProxyFactory proxyFactory = new ProxyFactory(target); NameMatchMethodPointcut pointcut = new NameMatchMethodPointcut(); pointcut.setMappedName("save"); DefaultPointcutAdvisor advisor = new Defau..
스프링 핵심 원리 - 고급편 > 직접 만든 포인트컷이전 글에는 save(), find() 모두 어드바이스 로직이 적용되었다.이번에는 save()메서드에만 어드바이스 로직이 적용되도록 해보자. 이전에 했듯, 어드바이스에 로직을 추가하여 메서드 이름을 보고 분기를 통해 수행할 수도 있지만, 이런 기능을 특화하여 제공하는 것이 포인트컷이다.해당 요구사항을 만족하도록 포인트컷을 직접 구현해보자. public interface Pointcut { ClassFilter getClassFilter(); MethodMatcher getMethodMatcher();} public interface ClassFilter { boolean matches(Class clazz);} public inter..
스프링 핵심 원리 - 고급편 > 어드바이저이전 글에서 봤듯, 어드바이저는 하나의 포인트컷과 어드바이스를 가지고 있다.프록시 팩토리를 통해 프록시 생성 시 어드바이저를 제공하면 어디에 어떤 기능을 제공할 지 알 수 있다.public class AdvisorTest { @Test void advisorTest1() { ServiceImpl target = new ServiceImpl(); ProxyFactory proxyFactory = new ProxyFactory(target); DefaultPointcutAdvisor advisor = new DefaultPointcutAdvisor(Pointcut.TRUE, new TimeAdvice()); proxyFactory.addAdv..
스프링 핵심 원리 - 고급편 > 포인트컷, 어드바이스, 어드바이저 소개포인트컷어디에 부가 기능을 적용할지, 어디에 부가 기능을 적용하지 않을지 판단하는 필터링 로직주로 클래스와 메서드 이름으로 필터링이름 그대로 어떤 포인트에 기능을 적용할지 하지 않을지 잘라서 구분하는 것어드바이스프록시가 호출하는 부가 기능단순하게 프록시 로직이라 생각하면 된다.어드바이저단순하게 하나의 포인트컷과 어드바이스를 가지고 있는 것쉽게 이야기하면 포인트컷 1 + 어드바이스 1정리하면 부가 기능 로직을 적용해야 하는데, 포인트컷으로 어디에? 적용할지 선택하고, 어드바이스로 어떤 로직을 적 용할지 선택하는 것이다. 그리고 어디에? 어떤 로직?을 모두 알고 있는 것이 어드바이저이다.조언(Advice)을 어디(Pointcut)에 할 것..