336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
AOP:Aspect Oriented Programming
(관점 지향 프로그래밍)
- ORM을 세팅하기 위해서는 AOP의 이해가 필요함
- 기존의 해왔던 방식 OOP:Object Oriented Programming (객체 지향 프로그래밍)과는 다른 관점
- 공통적으로 적용되는 기능들을 특정 Method 혹은 Class가 실행되기 전 / 후 등의 단계에서 자동으로 실행될 수 있게 지원하는 프로그래밍
- Loggin, Transaction, Parameter Check 등 여러 기능들을 대상으로 함
- AOP 적용시 하나의 .java 파일을 .class로 컴파일 시 컴파일 파일에 기능 코드를 주입시켜 마치 하나의 코드인 것 처럼 실행되게 한다
- 하나의 코드 처럼 컴파일 되어 실행되어 진다면 실행 속도 측면에서 효율적이다
- 위의 처리를 Weaving(위빙)이라고 부른다
- AOP를 사용하기 위해 spring-aop가 필요하다
# AOP 설정
- Spring-aop는 공통 기능이 실행될 시점을 제공
- <aop:before> : Method가 실행되기 이전
- <aop:after-returning> : Method가 실행된 이후 (실행 결과와 상관 없이)
- <aop:after-throwing> : Method가 실행된 이후 (Exception 발생 시)
- <aop:after> : Method가 정상적 실행된 이후
- Try~catch~finally 블록에서 finally와 비슷
- <aop:around> : 1~4를 포함한 모든 시점
- 모든 시점에 적용 가능한 Advice
- 자주 사용됨
- 모든 시점을 Advisor라고 부름
# AOP 정의
AOP 정의 소스
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
|
<bean id="aopPracticeBiz"
class="com.hucloud.aop.sample2.biz.AOPPracticeBizImpl" />
<!-- 공통기능 클래스 -->
<bean id="sayHello"
class="com.hucloud.aop.sample2.aspect.AspectSayHello" />
<aop:config>
<!-- 공통으로 실행시킬 기능이 있는 클래스를 설정함. -->
<aop:aspect id="aspect" ref="sayHello">
<!--
공통기능이 실행될 Target 설정
com.hucloud.aop.sample2 패키지 또는 그 하위 패키지의 파라미터가 0개 이상인 모든 메소드
-->
<aop:pointcut expression="execution(public * com.hucloud.aop.sample2..*.*(..))" id="pointCut"/>
<!-- 메소드 호출 전, 호출 후, 예외발생시 모두 사용가능. -->
<aop:around method="hello" pointcut-ref="pointCut"/>
<!--
<aop:after method=""/> 메소드가 정상적으로 실행되었는지, 예외가 발생했는지 여부에 관계없이 메소드 실행 이후에 실행함.
<aop:after-returning method=""/> 메소드가 정상적을 실행된 이후 실행됨.
<aop:after-throwing method=""/> 메소드가 예외를 발생시켰을 때 실행됨.
<aop:before method=""/> 메소드가 실행되기 이전에 실행됨.
-->
</aop:aspect>
</aop:config>
|
cs |
execution 내용
- public 은 접근 제어 지시자가 public인 것들을 실행시키겠다는 의미이고
- *는 모든 리턴 타입을 뜻한다
- com.hucloud.aop.sample2..*의 첫 번째 *은 패키지 내의 모든 클래스를 의미하고
- .*을 통해 모든 클래스 내의 모든 메소드를 의미한다
- *(..)는 모든 메소드의 파라미터 모든 것을 의미
'[ Developer ] > Spring Framework' 카테고리의 다른 글
[Spring] 스프링 쿼리 Query (0) | 2016.06.13 |
---|---|
[Spring] 스프링 ORM 마이바티스 MyBatis (0) | 2016.06.12 |
[Spring] 스프링 엑셀 파일 읽기 (0) | 2016.06.10 |
[Spring] 스프링 빈 분리 Bean Config 분리 (0) | 2016.06.10 |
[Spring] 스프링 로그남기기 Logback SLF4J 이용 (0) | 2016.06.10 |