본문 바로가기
반응형

Spring Framework9

[Spring Core] AOP(Aspect Oriented Programming) - 3편 (Pointcut, execution 지시자, within 지시자, named pointcut) AOP - 3편 (Pointcut) [Pointcut 표현식] 지금까지 살펴본 코드에서는 Pointcut을 선택하기 위해 'execution(* *..* ServiceImpl.*(..))'과 같은 표현을 사용해 왔다. 이처럼 표현식을 이용한 JoinPoint 선택 기능은 AspectJ가 제공하며, 스프링 AOP는 AspectJ가 제공하는 Pointcut 표현식을 상당수 지원한다. Pointcut은 일치시킬 패턴에 따라 지시자(designator)의 형식이 달라지는데, 지금부터 대표적인 표현식 패턴을 하나씩 살펴보자. 메서드명으로 Join Point 선택 메서드명의 패턴으로 JoinPoint를 선택하는 방식으로, 지금까지 봐온 execution 지시자를 사용한다. 특히 execution 지시.. 2021. 4. 5.
[Spring Core] AOP(Aspect Oriented Programming) - 2편(Advice 정의, @Before, @AfterReturning, @AfterThrowing, @After, @Around) AOP - 2편 (Advice 정의) [자바 기반 설정 방식에서의 Advice 정의] 앞서 스프링 AOP에서 활용 가능한 Advice로 다섯 가지 종류가 있다고 했다. 이제 각각의 구현 방식을 예를 들어 살펴보자. Before 이미 앞서 예를 들었지만 Advice 기능을 하는 메서드에 @Before 애너테이션(org.aspectj.lang.annotation.Before)을 붙인 다음, Pointcut 표현식을 추가하면 된다. 이때 사용되는 Pointcut 표현식에 대해서는 AOP - 3편에서 자세히 다루겠다. @Before 애너테이션이 붙은 메서드는 JoinPoint를 매개변수로 선언하고 있는데, 메서드가 호출될 때 전달되는 인수를 통해 실행 중인 메서드의 정보를 구할 수 있다. @Before 애너테이.. 2021. 4. 5.
[Spring Core] AOP(Aspect Oriented Programming) - 1편 (기본 개념·용어·예시) AOP - 1편 소프트웨어를 개발할 때 소스코드의 규모가 커지다 보면 로깅이나 캐시와 같이 비즈니스 로직과는 크게 관련 없는 처리 내용이 소스코드의 여기저기에 산재하기 쉽다. 다음은 본래 메서드의 기능과 상관없이 메서드의 시작과 끝을 로그로 기록하는 예다. 메서드의 시작과 끝을 로깅한 예 public class UserServiceImpl implements UserService { private static final Logger log = LoggerFactory.getLogger(UserServiceImpl.class); public User findOne(String username) { log.debug("메서드 시작: UserServiceImpl.findOne 인수 = {}", username.. 2021. 4. 5.
[Spring Core] 빈 설정 분할(@Import)과 프로파일(profile)별 설정 구성(@Profile) 빈 설정 분할 DI 컨테이너에서 관리하는 빈이 많아지면 많아질수록 설정 내용도 많아져서 관리하기가 어려워진다. 이럴 때는 빈 설정 범위를 명확히 하고 가독성도 높이기 위해 목적에 맞게 분할하는 것이 좋다. [자바 기반 설정의 분할] 자바 기반 설정 방식에서 설정된 내용(Configuration Class)을 분할할 때는 @Import 애너테이션(org.springframework.context.annotation.Import)을 사용한다. 다음은 AppConfig 클래스의 빈 정의 내용을 DomainConfig 클래스와 InfrastructureConfig 클래스에 나눠서 분할한 예다. 분할한 설정 클래스를 임포트하는 대표 설정 클래스(AppConfig.java) @Configuration @Import.. 2021. 4. 5.
반응형