Notice
Recent Posts
Recent Comments
Link
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Tags
more
Archives
Today
Total
관리 메뉴

노승현

ASPECT 란? 본문

Spring

ASPECT 란?

nsh95 2024. 3. 4. 08:42

 

 

IoC

new 를 컨테이너가 대신 해준다

서블릿(FrontController)을 new == 서블릿 컨테이너(톰캣,웹 서버)

POJO(DAO,Action, …) 를 new == 스프링 컨테이너

컨테이너 -> .xml(설정파일)

DI(의존 주입) 를 통한 낮은 결합도 보장

 

 

 

AOP

C : 인증 로깅     C 트랜잭션 예외처리 

R :      로깅     R 

U : 인증 로깅 보안 U 트랜잭션 예외처리

D : 인증 로깅 보안 D 트랜잭션 예외처리

공통 로직

횡단 관심

비즈니스 메서드(비즈니스 로직, 핵심 관심, CRUD)에서 횡단 관심(공통 로직)을 분리

관심 분리(Separation of Concern) : AOP 의 시작

로직(관심)들끼리 코드를 관리 -> 높은 응집도 보장

 

 

항상 찍는 로그는 공통 로직이네?

 

Advice 클래스로 분리 == 관심 분리

 

Advice 를 Service의 멤버변수로 설정       -> 의존 관계

 

비즈니스 로직 수행 전에 호출

 

Static 은 실행하면 프로그램 종료까지 살아있음

 

같은 기능, 같은 타입의 여러 객체 중에서 1개를 선택하는 경우 -> <bean> 유리

Phone -> @Component

aw vs gw -> <bean>

 

 

 

조인포인트

어플리케이션에 존재하는 모든 비즈니스 메서드

 

 

포인트컷

 

횡단 관심을 연결할 비즈니스 메서드

횡단 관심을 연결할 대상 클래스(객체)

 

 

 

<aop:pointcut id="aPointcut" expression="execution(* spring.biz..*Impl.*(..))"/>

* 타입 상관 없음

.. 파일 전체

(..) 인자개수 상관 없음

 

 

 

<aop:pointcut id="bPointcut" expression="execution(* spring.biz..*Impl.select*(..))"/>

     select 로 시작하는 메서드

 

 

 

애스팩트(aspect) 포인트컷(핵심로직)과   어드바이스(횡단관심)의 조합

포인트컷과 어드바이스의 결합(위빙)

 

 

 

어드바이스 동작 시점 애스팩트(결합, 위빙) 설정할 때 함께 설정함

 

 

Before

비즈니스 메서드 수행 전

 

 

After

finally, 비즈니스 메서드 수행 후

 

 

After-returning

비즈니스 메서드 return 반환 후

 

 

After-throwing

catch, 비즈니스 메서드 예외발생 시 

 

 

Around

비즈니스 메서드 수행 전후로 접근 가능

핵심로직의 성능평가에 많이 사용

 

 

 

일반적으로 before 을 많이 씀

 

R 핵심 로직을 수행할 때에만 

버전업 된 로그가 추가로 출력될 수 있게 

 

포인트컷과 어드바이스를  에스팩트처리

 

boardDAO ~~가 나오면 다음 문장이 에러

 

 

<bean class="com.spring.biz.common.LogAdvice" id="logAdvice" />

   <bean class="com.spring.biz.common.AfterReturningAdvice" id="ara" />

   <bean class="com.spring.biz.common.AfterThrowingAdvice" id="ata" />

   <bean class="com.spring.biz.common.AroundAdvice" id="aa" />

   <aop:config>

      <aop:pointcut id="aPointcut" expression="execution(* com.spring.biz..*Impl.*(..))" />

      <aop:pointcut id="bPointcut" expression="execution(* com.spring.biz..*Impl.select*(..))" />

      

      <aop:aspect ref="aa">

         <aop:around pointcut-ref="aPointcut" method="aroundPrintLog" />

      </aop:aspect>

      <aop:aspect ref="ara">

         <aop:after-returning pointcut-ref="bPointcut" method="afterReturningPrintLog" />

      </aop:aspect>

      <aop:aspect ref="ata">

         <aop:after-throwing pointcut-ref="aPointcut" method="printException" />

      </aop:aspect>

   </aop:config>



</beans>

 

 

 

 

"클래스를 통해 객체를 생성한다."

 클래스      변수

 자료형      붕어빵

 붕어빵틀      인스턴스

 

@Repository << BoardDAO 클래스의 객체를 new 해주는 @

public class BoardDAO

 

 

@Repository("boardDAO") << BoardDAO 클래스의 객체를 new 해주는 @

         << 객체명은 boardDAO

 

 

public class BoardDAO == BoardDAO boardDAO=new BoardDAO();

 

 

 

 

<aop:aspectj-autoproxy /> << AOP 설정을 어노테이션으로 하겠다.

 

 

@Service

LogAdvice = boardService 랑 결합중이라 component 보다 service가 낫다.

 

 

 

바인딩

메서드를 호출했을 때,

현재 메모리에 존재하는 객체를 실제로 수행하는 것

다형성(상속)을 구현한 상황에서 사용가능

 

'Spring' 카테고리의 다른 글

DBCP  (0) 2024.03.05
Spring MVC ver.2 로 변환하기  (1) 2024.03.05
Spring 파일 생성 및 흐름 이해  (2) 2024.02.28
DI 의존성 주입이란?  (0) 2024.02.28
Spring 이란?  (1) 2024.02.27