Spring의 강력한 기능중 하나인 AOP
우리는 이를 통해 관심을 분리해서 비즈니스 로직에 집중하고, 로깅 등 자동화 되어야할 로직등은 손쉽게 삽입, 관리할 수 있다.
이론상 매우 복잡한 AOP는 설정에 대해 까다롭게 생각할 이유가 없다.
스프링이 Annotation 으로 필요한 AOP 를 설정할수 있게 해주기 때문이다.
첫번째로 라이브러리를 등록하자.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
두번째,
가장 최초 시작점인 main함수가 있는 Application클래스 의 @SpringBootApplication 위에 "@EnableAspectJAutoProxy"를 작성해주자.
우리는 이를 통해서 Aspectj 를 사용할 떄 AOP를 찾을 수 있게 해준다.
@SpringBootApplication
@EnableAspectJAutoProxy
public class ExamApplication {
public static void main(String[] args) {
SpringApplication.run(ScBackendApplication.class, args);
}
}
세번째,
이때 " 공통관심 로직" 이 담겨 있는 클래스를 생성한다.
"공통관심 로직"은 메소드로서 작성하며 ,
해당 메소드에는 @시점( execution( 해당 대상 ) ) 어노테이션을 기재해주면 된다.
@Aspect
@Component
public class LogAspect {
Logger logger = LoggerFactory.getLogger(LogAspect.class);
/* AOP가 작동될 시점과 대상 설정 */
@Around("execution(* com.example.demo.service.BookService.*(..))")
//@Around("execution(* com.example.demo.controller..*.*(..))")
//@Around("execution(* com.example.demo..*.*(..))")
public Object logging(ProceedingJoinPoint pjp) throws Throwable { //around는 ProceedingJoinPoint를 받는다.
logger.info("start - " + pjp.getSignature().getDeclaringTypeName() + " / " + pjp.getSignature().getName());
Object result = pjp.proceed(); //로깅이 되고, AOP 가 걸려있던 메소드가 진행된다.
logger.info("finished - " + pjp.getSignature().getDeclaringTypeName() + " / " + pjp.getSignature().getName());
return result;
}
}
@Before("execution(*. com.example.demo.controller..*.*(..))")
public Object logging(JoinPoint jp) throws Throwable{
logger.info(jp.getSignature().getName()); //호출된 메소드명
}
'Spring' 카테고리의 다른 글
Spring 콘솔에 내용 출력하는 방법? (0) | 2020.08.04 |
---|---|
Front 에서 Http 통신하는데 Access to XMLHttpRequest at' ~ ~ ~ ' from origin '~ ~ ~' has been blocked by CORS policy 에러!!!! (0) | 2020.07.22 |
(IntelliJ 에러)Unknown run configuration type SpringBootApplicationConfigurationType (0) | 2020.07.10 |
페이징 처리하기 Angular With Spring (0) | 2020.07.08 |
MVC를 먼저배우고 RestAPI 를 배운 나의 고민.. View는 대체 어디있는가?!!! (0) | 2020.07.01 |