반응형
*Spring AOP(Aspect Oriented Programming)
-
관점 지향 programming(횡단 관심사의 처리)
-
종단관심사 처리
-
| (상속의 특징)
-
| 부모-업무정의하면 자식 사용가능 //=>단점이 자식이지만 하고싶지않을때 해결할 방법이 없다.
-
| 자식A 자식B
-
↓ 자식AA
-
횡단관심사 처리
-
=>부기능을 분리할 수 있다. 부분
-
공선의 오영근 정택성
-
지문() 지문() 지문() //=>부
-
수업() 수업() 수업() //=>주
-
-------------------------→
-
주 업무로직에서 부가적인 기능의 코드가 분리되므로 코드의 복잡도가 낮아진다(떨어진다) //=>장점
-
용어)
-
Aspect(관점) : Advice와 JoinPoint를 묶어놓은 것.
-
Advice : 부가적인(공통) 코드를 정의하는 것. //부가적인 업무처리-세션(로그인이 되었나) (간섭)
-
JoinPoint : 부가적인 코드가 실행되는 지점을 정의하는 것.
-
PointCut : JoinPoint를 기술하는 표현식
-
execution( 식 ) : Annotation의 속성
-
Target : Advice를 받을 대상.
-
-
JoinPoint
-
Before : target method가 호출되기 전에 Advice를 실행 할 때 (Before Advice)
-
Advice가 동작하는 시점.
-
After : target method가 호출되고 난 후 Advice를 실행
-
AfterReturning : target method가 호출되고 Return값이 반환되고 난 후에 Advice를 실행하는것
-
AfterThrowing : target method가 예외를 날린 이후에 Advice를 실행할 때
-
Around : target method가 호출되기 전과 호출된 이후에 실행되는 Advice.
-
-
사용 jar ( pom.xml에 설정)
-
aspectjrt.jar
-
aspectjweaver.jar
-
설정 파일 : application-context, root-context,servlet-context,,들이 있었는데
-
<aop : aspectj-autoproxy/>
지우고>>mvc import>spring>convert to maven>pom 덮어쓰고>lib에 추가>추가
*AOP Annotation
-
@Aspect : class위에 설정
-
-method위에 설정하고 Advice가 동작하는 target method와 시점을 정의-
-
@Before : Before Advice사용할 때(method 호출 전 사용), method 위 설정
-
@Before("execution(pointCut)")
-
@After
-
@After("execution(pointCut)")
-
@AfterReturning : return값이 target method에서 반환되고 난 이후
-
@AfterReturning("execution(pointCut), return=리턴값")
-
@AfterThrowing : target method가 예외를 날린 이후에 실행
-
@AfterThrowing("execution(pointCut), throwing=예외처리객체")
-
@Around
-
@Around("execution(porintCut)")
*Advice 내에 사용하는 객체
-
모든 객체를 받을 수 있다.
-
JoinPoint, ProceedingJoinPoint(around에서만 사용가능)두가지를 사용하여 target에서 사용되는 Parameter, return 값들을 받을 수 있다
*PointCut
-
target에 JoinPoint를 설정하는 표현식 같은것 (method)
-
method=>package.class.method
-
execution에 정의
-
execution( [(method의)접근지정자 반환형 패키지명.클래스명.]method명)
-
[]생략가능 하고 ..이란걸 쓸수 있는데 "모든 대상"이란 뜻
-
*을 사용할 수 있다.
-
public void kr.co.sist.controller.*Controller.test
-
Cntroller*.method명
*AOP(Aspect Oriented Programming)
-
핵심 로직에서 공통로직을 분리하기 위해 사용
-
///상속처럼 내자식이어야 적용되는게 아니라 상관없는 class에 적용가능.
-
aspectjrt.jar, aspectjweaver.jar POM.XML에 정의
-
설정파일에 <aop:aspectj-autoproxy/> 정의
-
aop -> xmlns : prefix
-
설정파일=>applicationContext.xml(Spring_DI), root_context.xml, Servlet_context.xml(Spring_MVC)
-
Class 작성 -약결합으로 의존성 주입
-
@Before(pointCut)<-JoinPoint : 이 advice가 실행되는 시점
-
공통로직-Advice
-
Aspect : Advice와 JoinPoint를 합친것
-
Advice : 공통로직
-
JoinPoint : 공통로직이 들어갈 시점
-
Before Advice : target method가 실행되기 전
-
@Before("execute(pointcut")
-
After Advice : target method가 실행된 후
-
@After("execute(pointcut")
-
AfterReturning Advice : target method가 return값을 return하고난 후
-
@AfterReturning(pointcut, return="데이터형")
-
AfterThrowing Advice : target method가 throws하고 난 이후
-
@AfterThrowing(pointcut, throwing="예외처리객체명")
-
Around Advice : target method가 실행되기 전 또는(과?) 실행된 후
-
@Around("execute(pointcut")
-
//매개변수라(는 Parameter를 받을 수 있다)->JoinPoint 객체)
-
//return -> ProceedingJoinPoint
-
pointCut : targer method 설정
-
target : Advice를 받을 대상(method)
*JoinPoint
-
JoinPint가 @Before, @After, @AfterReturning, @AfterThrowing에서 사용되는 Parameter를 Advice에서 처리하는 객체
-
Advice의 매개변수로 정의
-
@Before(...)
-
public void test(JoinPoint jp){
-
Object[] =jp.getArgs(); //target의 매개변수를 받기
-
//target method의 method명
-
Signature s= jp.getSignature()
-
s.getName() //메소드명??
-
s.getModifier() //접근지정자를 얻을 수 있다.
-
}
*ProceedingJoinPoint interface
-
JoinPoint가 @Around에서만 사용
-
target method의 return값을 처리하는 객체
-
Advice제작시 주의점)
-
method를 반드시 void가 아닌 return을 가져야 한다.
-
매개변수에 ProceedingJoinPoint 선언
-
Advice method에 throws Throwable을 정의
-
return value를 ProceedingJoinPoint를 사용하여 처리해야 한다.
-
@Around("execution(...)")
-
public 반환형 advice(ProceedingJoinPoint pop) throws Throwable{
-
//이때 반환형은 Object 또는 Target method의 return타입과 동일해도 상관없다.
-
Object o=pjp.proceed(); //target method의 반환값을 얻어온다.
-
String, Integer(Wrapper class)
-
String일때만 님 을 붙이고 싶다면...
-
if(o instenceof String|ItemDomain){ //클래스 식별할꺼야..?
-
}
-
return o;
-
}
반응형
'국비지원학원 > Spring Framework' 카테고리의 다른 글
118일차-Spring Framework~125일차-ORM (0) | 2019.08.24 |
---|---|
117일차-Spring Framework_parameter 처리 (0) | 2019.04.30 |
116일차-Spring Framework설명 (0) | 2019.04.30 |