본문 바로가기
반응형

AOP7

[AOP] JoinPoint / ProceedingJoinPoint 차이 이전 포스팅에서 AOP에 대해 다룬 포스팅도 있고, pointcut에 대해 다룬 글들이 있다. 자세한 내용은 아래 참고 포스팅을 참고 바란다. 예제에서는 대부분 JoinPoint 로만 설명을 했으나 ProceedingJoinPoint 에 대해서 잠시 다루려고 한다. JoinPoint JoinPoint 는 테스트 코드로도 많이 다뤘었고 메서드에 대해서는 아래와 같다. (인터페이스는 호출되는 대상 객체, 메서드, 전달 파라미터 목록에 접근 할 수 있는 메소드 제공) 메서드 접근하는 영역 Signature getSignature() 호출되는 메서드에 대한 정보 Object getTarget() 대상 객체 Object[] getArgs() 파라미터 목록 Signature에 대해서도 아래와 같다. (인터페이스는 .. 2023. 12. 2.
@Transactional 사용시 주의 사항3 (Proxy 관련 // private 금지, 트랜잭션 분리) 이전 포스팅에서 Transactional 에 대한 설명도 다룬적이 있고 주의사항에 대해서 다룬 글이 있다. 자세한 내용은 참고 포스팅 참고 바란다. 이번 포스팅에서 다룰 내용은 Transactional annotation을 선언할때 주의할 점이다. 1. private 로 선언된 메서드에 transactional 금지 Transactional 은 CGLIB 이 Proxy를 생성하여 호출을 하게 된다. CGLIB이 Transactional 이 걸려있는 메서드를 잡기 위해서는 외부에서 접근이 가능해야한다. 그리하여 private 로 선언 하면 해당 메서드에 접근을 못하여 transactional이 적용이 안된다. 2. 동일 Bean안에서(class) 여러 트랜잭션 금지 Transactional 은 AOP 기반.. 2023. 11. 4.
@Transactional 사용시 주의 사항2 (내부호출 / AOP 내부호출) 이전 포스팅에서 Transactional annotation에 대해서 다뤘었다. 자세한 내용은 아래 참고 포스팅을 참고 바란다. 해당 포스팅에서 언급했었고, Spring AOP 기능에서 이슈가 있는 내부호출에 대한 내용을 다뤄볼 것이다. 먼저 아래 코드를 읽어보면, public class TestTransactionAnnotationController { public void transactionalTest() { serviceA.insertValue(); this.internal(); } @Transactional public void internal() { serviceA.insertValue(); serviceA.insertValue(); serviceA.insertValue(); throw new.. 2023. 7. 11.
aop pointcut 정리(추가 정리) 이전 포스팅에 이어 좀더 심화 정리를 추가하려고 한다. 1. 여러개의 execution 정의 -> 표현식을 사용한다. and 는 && , or 는 || 등을 사용하여 @Before("execution(* com..*.*(..)) && @annotation(org.apache.ibatis.annotations.Mapper)") 이와 같이 정의해준다. 2. 호출된 메서드에 대한 정보 -> System.out.println("location Name :" + jp.getTarget().getClass().getName()); System.out.println("method Name :" + jp.getSignature().getName()); System.out.println("uri Name :" + req.. 2023. 5. 15.
aop pointcut 정리 저번 포스팅에서 aop 설정법에 대해서 다룬적이 있다. 자세한 내용은 아래 참고 포스팅을 참고 바란다. 사용법은 다음과 같다. 먼저 @Aspect를 선언할 클래스를 만들어준다. @Aspect @Component public class AopTracker { .... 코드 구현 } @Component 역시 spring bean 주입을 위해 작성을 해줘야한다. 그리고 이어서 aspect 내에서 실행 할 메서드를 만들고 그 메서드에 아래와 같은 annotation을 달아준다. annotation 사용(호출) @Pointcut 어떤 메서드 일때 @Before 메서드 실행 전 @After 메서드 실행 후 @AfterReturning 메서드 정상 실행후 @AfterThrowing 메서드 실패 실행후 @Around .. 2023. 5. 14.
springboot AOP 설정하기 자바에서 aop 에 대해서 이전 포스팅에서 다룬 글이 있다. 자세한 사항은 아래 참고 포스팅 참고 바란다. 이번 포스팅에서는 springboot 에 aop 설정하는법에 대해서 다뤄 볼것이다. 개발 환경 springboot 3.0.5 maven 1. 우선 해당 라이브러리를 받아오기 위해 pom.xml 에 아래 dependency 를 추가한다. org.springframework.boot spring-boot-starter-aop 2. 다음은 maven 프로젝트 내에 main 메서드에 aop 사용을 위한 annotation 을 설정 해야한다. @EnableAspectJAutoProxy @SpringBootApplication public class AopProjectApplication { public st.. 2023. 5. 13.
Spring 에서 IOC, AOP, DI 에 대하여 이번 포스팅에서는 SPRING의 핵심요소인 IOC, AOP, DI에 대해서 다뤄볼 것이다. 다른 특징들도 많지만 이 세가지는 스프링의 장점으로 많이 알려져있다. 하나씩 다뤄보도록 해보자. IOC(Inversion of Control) 한글로 직역하면 제어의 역전이다. Spring 에서는 Container라는 개념이 있는데, 이 컨테이너는 객체를 담는 용기이다. bean의 생성부터 소멸까지 생명주기를 관리하게 된다. Container가 bean을 관리해주기에 제어의 역전이라고 한다. 쉽게 말해서 스프링컨테이너가 필요에 따라 개발자 대신에 bean을 관리해주는 행위라고 생각하면 된다. AOP(Aspect Oriented Programming) 관점 지향 프로그래밍이라는 뜻으로 객체지향(OOP)과는 또다른 의.. 2022. 3. 9.
반응형