AOP(Aspect Oriented Programming) 관계지향 프로그래밍
소스 코드의 중복을 줄이고, 필요할 때마다 가져다 쓰는 객체화 기술
즉 공통되는 부분을 따로 빼내어 필요한 시점에 해당 코드를 추가해주는 기술을 AOP라고 함
공통되는 부분을 따로 빼내서 만든 클래스를 Advice 라고하는데 메소드이기도 하다.
객채 생성, 메소드 호출, 예외발생시점등 작업이 시작되는 시점을 Joinpoint
공통 코드를 끼워 넣는 작업을 Weaving
Advice를 어디에 적용할지 결정하는 포인트컷(PointCut : JoinPoint 집합)을 합친것을 Aspect(에스펙트
부가기능을 독립적인 요소로 분리한 아스펙트는 런타임 시에 필요한 위치에 동적으로 참여가능함
Advice를 삽입할 대상객체 TargetObject
대상 객체에 Advice가 적용된 후 생성되는 객체 Proxy
Spring AOP는 메소드 조인포인트만 지원: 동적 프록시 기반으로 지원하여 핵심기능(대상객체)의 메소드가 호출되는 런타임 시점에만 부가기능(어드바이스)를 적용할수 있다. ///물론 AspectJ는 고급이라 다양하게 할수 있다고 함
AOP설정...
먼저 fom.xml 에 의존성 추가.
<!-- AspectJ Weaver -->
<!-- weaver는 AOP에서 advice를 핵심 기능에 적용하는 설정 파일이다 -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>${org.aspectj-version}</version>
</dependency>
servlet-context.xml에 키워 주기.
xmlns:aop="http://www.springframework.org/schema/aop" 1.
하단에 http://www.springframework.org/schema/aop 2.
http://www.springframework.org/schema/aop/spring-aop-4.3.xsd"> 3. 넣기...
빈안에 <aop:aspectj-autoproxy></aop:aspectj-autoproxy> 프록시 작업한다고 신고함.
advice 클래스 만든다......
common 패키지만들고...LogAdvice 클래스만들어서 메소드 printLog()생성
----------------------------------------------------------------------------
root-context.xml. 에도 동일하게 1,2,3 넣기
하단에 프록시 작업한다고 신고하기
<!--AOP XML -->
<bean id="log" class="com.kh.junspring.common.LogAdvice"></bean>
<aop:config>
<aop:pointcut expression="execution(* com.kh.junspring..*Impl.*(..))" id="allPointCut"/>
// Impl 로 끝나는 클래스의 런타임시에 작동하라는 것이다.
<aop:aspect ref="log">
<aop:before method="printLog" pointcut-ref="allPointCut"/>
// Impl 클래스의 printLog의 메소드를 동작시킨다는 것이다.
</aop:aspect>
</aop:config>
원래는 해당파일의 Namespaces탭이 나와야 하는데 안 나와서 수기작성했다....
'SPRING' 카테고리의 다른 글
예외처리 어노테이션 (0) | 2022.10.07 |
---|---|
AOP 심화 : 메소드 실행시간 (0) | 2022.10.07 |
220916 스프링 게시판_댓글 8-2 댓글리스트출력 (0) | 2022.09.16 |
220916 스프링 게시판_댓글 8-1 댓글올리기 (1) | 2022.09.16 |
220915 스프링 게시판만들기 7-5 페이징:현재페이지 갖고 클래스이동 (0) | 2022.09.15 |