@Pointcut 가 아닌 @Around에 execution 명시자를 직접 지정할 수 도 있습니다. @Asepct public class CacheAspect{ @Around("execution(public * chap07..*(..))") public Object execute(ProceedingJoinPoint joinPoint) throws Throwable { ... } } 만약 같은 Pointcut을 여러 Advice가 함께 사용한다면 공통 Pointcut을 재사용할 수도 있습니다. ExeTimeAspect @Aspect @Order(1) public class ExeTimeAspect { @Pointcut("execution(public * chap07..*(long))") private vo..
Spring
이번에는 Spring에서 Advice 적용 순서에 대해 알아보겠습니다. 한 Pointcut에 여러 Advice를 적용할 수도 있습니다. CacheAspect package aspect; import java.util.HashMap; import java.util.Map; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; /** * 간단하게 캐시 기능을 구현한 클래스 */ @Aspect public class CacheAspect { privat..
Aspect를 적용할 위치를 지정할 때 사용한 Pointcut 설정을 보면, execution 명시자를 사용했습니다. @Aspect public class ExeTimeAspect { @Pointcut("execution(public * chap07..*(..))") private void publicTarget() { } execution 명시자는 Advice를 적용할 메서드를 지정할 때 사용합니다. 기본형식 execution(수식어패턴? 리턴타입패턴 클래스이름패턴?메서드이름패턴(파라미터패턴)) '수식어패턴'은 생략가능하며 public, protected 등이 옵니다. 스프링 AOP는 public 메서드에만 적용할 수 있기 때문에 사실상 public만 의미가 있습니다. '리턴타입패턴'은 리턴 타입을 명..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGW02Y%2FbtsEu60VZMM%2Fy1SIV2PR5ZqJSaKkzoJGnk%2Fimg.png)
[Spring] Spring AOP 구현해보기 (@Aspect, @Pointcut, @Around) 이전 글 [Spring] Spring AOP AOP AOP : Aspect Oriented Programming의 약자로, 여러 객체에 공통으로 적용할 수 있는 기능을 분리해서 재사용성을 높여주는 프로그래밍 기법입니다. AOP는 핵심 기능과 공통 기능 muscleking3426.tistory.com 프록시 생성 방식 package config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context...
이전 글 [Spring] Spring AOP AOP AOP : Aspect Oriented Programming의 약자로, 여러 객체에 공통으로 적용할 수 있는 기능을 분리해서 재사용성을 높여주는 프로그래밍 기법입니다. AOP는 핵심 기능과 공통 기능의 구현을 분리함으로 muscleking3426.tistory.com 스프링 AOP 구현 스프링 AOP를 이용해서 공통 기능을 구현하고 적용하는 방법은 단순합니다. - Aspect로 사용할 클래스에 @Aspect를 붙인다. - @Pointcut으로 공통 기능을 적용할 Pointcut을 정의한다. - 공통 기능을 구현한 메서드에 @Around를 적용한다. @Aspect, @Pointcut, @Around를 이용한 AOP 구현 개발자는 공통 기능을 제공하는 As..
AOP AOP : Aspect Oriented Programming의 약자로, 여러 객체에 공통으로 적용할 수 있는 기능을 분리해서 재사용성을 높여주는 프로그래밍 기법입니다. AOP는 핵심 기능과 공통 기능의 구현을 분리함으로써 핵심 기능을 구현한 코드의 수정 없이 공통 기능을 적용할 수 있게 만들어 줍니다. AOP는 우리말로 관점지향 프로그래밍 정도로 많이 번역하고 있으나, Aspect는 구분되는 기능이나 요소를 의미하기 때문에, '관점'보다는 '기능 또는 관심'이라는 표현이 더 알맞습니다. 스프링도 프록시를 이용해서 AOP를 구현하고 있습니다. AOP의 기본 개념은 핵심 기능에 공통 기능을 삽입하는 것입니다. 즉, 핵심 기능의 코드를 수정하지 않으면서 고통 기능의 구현을 추가하는 것이 AOP입니다. ..
트랜잭션의 처리 방식을 이해하려면 AOP(Aspect Oriented Programming)를 이해해야 합니다. 제일 어려운 부분이니 자세히 짚어보겠습니다. 이전 요약글 [Spring] AOP 프로그래밍이란 ? AOP(Aspect-Oriented Programming)는 소프트웨어 개발에서 모듈화와 코드 재사용을 향상하기 위한 프로그래밍 패러다임 중 하나입니다. AOP는 주로 코드의 횡단 관심사(Cross-Cutting Concerns)를 분리하여 모듈 muscleking3426.tistory.com 준비 먼저 AOP 프로젝트를 준비하기 위해 pom.xml의 Dependencies에 아래코드를 추가해 줍니다. org.aspectj aspectjweaver 1.8.13 스프링 프레임워크의 AOP 기능은 s..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvQzmg%2FbtsEca92xuA%2FCrz9aFu43MhPQCeD0zetnk%2Fimg.png)
스프링 컨테이너는 빈 객체를 한 개만 생성합니다. 과연 그런지 한번 코드를 통해 알아볼까요? public class Main { public static void main(String[] args) { //1. 컨테이너 초기화 AbstractApplicationContext ctx = new AnnotationConfigApplicationContext(AppCtx3.class); //2. 빈 객체 로드 후, 사용하기 Client client = ctx.getBean(Client.class); Client client2 = ctx.getBean(Client.class); System.out.println("두 개의 객체가 같을까 ? : " + (client == client2)); client.send(..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxoAeD%2FbtsD8xLV445%2FZDhn1xUbHkCI4OLblkx6VK%2Fimg.png)
지난 포스팅에서는 빈 라이프 사이클 중 스프링에서 제공하는 인터페이스를 이용해서 빈 객체의 초기화와 소멸을 실습해 보았습니다. [Spring] 빈 라이프 사이클 : Bean 초기화, 소멸 (인터페이스) 컨테이너 초기화와 종료 스프링 컨테이너는 초기화, 종료 라이프사이클을 갖고 있습니다. 컨테이너 초기화 AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(AppContext.class); 위 예제를 muscleking3426.tistory.com 이번 포스팅에서는 커스텀 메서드를 통해 빈 객체의 초기화와 소멸을 실습해 보겠습니다. 빈 객체의 초기화와 소멸을 스프링 인터페이스(InitializingBean, Dispo..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzuEEF%2FbtsDVpayfM5%2FnmT6QyIFI9HDKNWDKJZ8v1%2Fimg.png)
컨테이너 초기화와 종료 스프링 컨테이너는 초기화, 종료 라이프사이클을 갖고 있습니다. 컨테이너 초기화 AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(AppContext.class); 위 예제를 보면, AnnotationConfigApplicationContext 생성자를 이용해서 컨텍스트 객체를 생성하는데 이 시점에 스프링 컨테이너를 초기화합니다. 컨테이너에서 빈 객체 구하고 사용 Greeter g = ctx.getBean("greeter", Greeter.class); String msg = g.greet("스프링"); System.out.println(msg); 스프링 컨테이너는 설정 클래스에서 정보를 읽..