LANGUAGE/SPRING

SPRING #8 공통기능구현하기 1(AOP)

옐옐루 2022. 7. 13. 18:13

1. 핵심기능을 구현하고

2. 공통기능을 구현한다.

3. 공통기능을 구현하는 방법에는 XML을 활용하는 방식과 어노테이션을 이용하는 방식이 있다

4. 본 페이지는 XML을 활용하여 공통기능을 구현해보고자 한다.



기본적인 개념

1. pom.xml 에서 dependency 추가하기 

 

2. Class 2개 생성해서 메소드 만들기 

1) Student Class 만들기 (변수선언)

2) Student Class 에 메인함수에서 호출될 핵심기능 생성해놓기 ( A기능 )

1번클래스

3) Worker Class 만들기(변수선언)

4) Worder Class에 메인함수에서 호출될 핵심기능 생성해놓기(B기능)

2번클래스

 

 

3. META-INF 안에 CTX 생성

1) applicationCTX1.xml 에 Student형 bean , Worker 형 bean 생성해주기 

applicationCTX1

4. 메인함수 만들어서 xml의 bean 주입받아 함수 호출하기 

ㅇ 컨테이너 만들고, Student와 Worker 빈 받아오고 , 각각의 클래스에 생성해준 함수 호출해주기 

메인페이지 소스
실행화면

 

 

5. 공통 기능을 구현할 ProxyClass 만들기 


공통기능의 종류 :

1)around Advice

2)befere Advice

3)after Advice

4)after-returningAdvice

 


ㅇ 핵심기능과 공통기능을 연결시켜줘야 main을 실행시켰을때 공통기능 함수가 호출이 될 수 있음 (이번단에는 안함)  

ㅇ around 를 제외하고 나머지 함수는 어렵지 않음 

  -- return 타입도 따로 없음 

 

ㅇ around 함수 ****

 -- object 를 return 타입으로 하고, 메소드 쓰기 

(object는 사실 안넣어도 되지만 핵심기능에 return 타입 있을 수 있으니 Object를 넣어주는 것 )

-- 얘는 중간에 반드시 갔다가 와야함 . 핵심기능 수행하고 와서 공통기능 수행하는 것이 아님 혹은 공통기능 수행하고 핵심기능 수행하는 것도 아님 

-- 공통기능 수행하고 핵심기능 수행했다가 다시 돌아와서 공통기능 수행 다시 함 ( 그부분에 대해 써줘야함)

-- 따라서 핵심기능 뜻하는 아이를 매개변수에 넣어줘야해 그 핵심기능이 JoinPoint 임 (매개변수에 ProceedingJoinPoint 형으로 joinPoint 써줘야해) 

-- around는 반드시 핵심기능 수행 전에 뭔가를 해야하고, 핵심기능 수행후에 또 뭔가를 해야함  즉 핵심기능 전후로 공통기능 수행 

-- 핵심기능 메소드명 작성해주고, 시작시점을 currentTimeMillis로 뽑아주기 

-- proceed는 joinPoint를 수행하라 라는 뜻, return 타입이 있을수도 있으니 object로 받는 것 , try - catch 해주기 

-- 하지만 여기까지 실행해도 계속 오류가 안 없어짐 왜? try 절안에서 return 타입을 받아버리면 catch 절로 넘어갔을때 return 해줄게 사라짐 즉 catch 절로 떨어지면 object return 을 할 수가 없어  따라서 catch 를 없애고 finally 하기 

-- finally 후 joinPoint.proceed에 생기는 오류는 throw로 던져버리기 

** around는 핵심기능 수행 전 후에 뭔가를 해야함, 그럼 핵심기능 수행후에 하고 싶은 애들을 fianlly 만들고 그 뒤에다가 써주면 됨. 

-- 끝나는 시간이 언젠지 궁금하니 System.currentTimeMilis()로 뿌려보기 -- 꼭 할 필요 없음 그냥 언제 끝나는지 궁금해서 해보는거임 

around 함수

 

6. Proxy Class 를 만들었으니 xml에 가서 어떤 함수를 어떻게 쓸건지 짝을 지어주는 과정이 필요함  xml로 가기 

-- 만들어 놓은 xml 위에( 혹은 밑에) proxyClass 연결해주는 아이 써주기 : 

 1) proxy class 객체 만들기 (빈)

 2) 함수 하나하나를 student에 있는 함수, worker에 있는 함수와 연결해주면 됨  - 연결해주는 아이가 aop

 3) Namespaces 가서 aop 체크하기 

 4) <aop:config> 열어주고

 5)<aop:aspect >가 공통기능을 의미 여기의 id를 aroundAspect(연결시킬이름) 주고 ref에는 proxyClass 써주기

6) pointcut : 싹 연결하는 아이

 6-2)(expression :어디에 왔으면 좋겠는지 적는 부분  / id = 핵심기능이름 ) ./ within 은 ~에 포함된거 다 라는 뜻 

7) aop:around  어떤 함수 연결시킬래? 라고 묻는 부분 

 

7. 메인함수가서 실행해보기 

실행화면

 


 

 

이어서 학습하기 

SPRING#9 공통기능구현하기 2(AOP) (tistory.com)

 

SPRING#9 공통기능구현하기 2(AOP)

ㅇ Weaving : Advice 와 target이 결합되어서 프록시 객체를 만드는 과정 ㅇ 방법은 XML을 이용하는 방법과 @Aspect 어노테이션 이용하는 방법이 있다. ㅇ XML 활용하는 방식을 SPRING#8 공통기능구현하기1 과

tjqud531531.tistory.com

 

반응형

'LANGUAGE > SPRING' 카테고리의 다른 글

SPRING#10 MVC 게시판 구조이해  (0) 2022.07.14
SPRING#9 공통기능구현하기 2(AOP)  (0) 2022.07.14
SPRING #7 외부파일을 이용한 설정  (2) 2022.07.13
SPRING #6 빈의 생명주기  (0) 2022.07.13
SPRING #5 DI 자동설정  (0) 2022.07.13