프로젝트 하나 만들어서
Maven 으로 바꿔서
pom에 의존라이브러리 가져다놔
src 에 패키지 3개 만들어
서비스에 인터페이스 하나 만들어
이렇게 코딩해놔
Impl 클래스도 만들어
이렇게 코딩해줘
얘도 bean 이 되려면
@service 추가해주고
컴퍼넌트스캔이 일어나면 돼
init.xml 옮겨와서 컴퍼넌트 스캔이 일어나도록~
이거 추가해주고
어노테이션이 일어나도록 해주기 위한 준비작업
이 작업을
이 두 메소드에 적용시키고 싶어
이 작업을 하기전에
내가 bean 으로 가지고 있는 모든 객체에 수행 이전에 이 작업을 수행 하라는 의미임
MainClass 만들어서
이렇게 해서 run
이거의 의미는
전달받는 인자가 아무것도 없는 모든 메소드를 선택하는 것이라서
선생님에게 글쓰기는 적용이 안된것 !
간략하게 설명 해 둔 것이고
Aspectj Expression 검색해보면 이것저것 많이 나옴
여기 가보면
컴퍼넌트 스캔이 일어나면 서비스가 bean 이 되어 작업이 수행됌
메소드가 수행되기 이전에 수행해야 할 작업이 있는데
그 메소드가 100군데 있으면 100군데에 다 복사 붙여넣기 해야해
그럼 대 공사야
그 작업이 자주 바뀌는 작업이면 또 가서 다 수정해야해
AOP 의 개념은 핵심 로직과 상관없는 횡단관심사(crosscutting concerns)라고 있는데 그걸 처리할때 AOP를 적용하면 쉽게 할수 있다.
(필요한 시점에 원하는 위치에 적용을 시킬수 있어)
이런 작업을 필요로 하는 곳이 웹 어플리케이션에선 인증작업, 트랜잭션을 관리 할 때 이렇게 두군데에 많이 쓰임
메소드 안에 전달된 인자(String name, int num .. 등)에 뭐가 들어가 있는지 알아낼수도 있고
메소드에 있는 request 나 session 에 있는걸 추출해 낼수도 있어
리턴되는 데이터를 가져와서 조작을 할 수도 있어
-------------------------------------------------
호출되기 이전 before
호출된 직후 after
호출되기 이전과 이후는 around
-------------------------------------------------
aop 를 적용하기 위한 어노테이션
횡단관심사를 적용할 메소드를 적용
@Before 를 해놓았으니 이전에 적용을 하는 것
여기에 코드를 추가해볼거야
이 코드 추가하고 그리고 실행
이렇게 적용이 된 것을 확인 가능해
이제
여기에 AOP를 around 로 적용을 할거야
메소드의 인자가 하나 있는 걸 보고
(*) 로 해주고
joinPoint 는 execption 이 발생 하니 threows 해줘
전달 한 내용을 읽어 온 것을 확인가능 ㅎㅎ
이전과 이후에 적용할걸 정의 할 수 있어
실행 시켜 보면
이전과 이후에 적용이 된 것을 확인 가능해
실행시점에 클래스를 새로 만들어서 사용 하는 것임
WritingService 에 메소드 하나 더 추가
맵을 리턴하도록
여기에 오버라이딩 해줘
이거 추가해주고 리턴 타입과 메소드에 전달 인자가 없는 것을 확인해
WritingAspect 로 가서
이거에 적용할 Aop 를 만들어
이거 추가해줘
실행되는 시점에 동적으로 만들어 지는데 어떤 타입인지 패키지 명을 밝혀 줘야해
MainClass를 이렇게 만들어 준후
Run
리턴되는 데이터를 조사가 가능해
주석을 달아보면 이렇게 되는 것
MainClass 를
이렇게 수정해 주고
Object로 수정하고
리턴되는 데이터가 있으면 Object로 받아와서 뭔가 작업을 해주고 그대로 돌려줘
만약에 안돌려 주면 NulPointException 발생
-------------------------------------------------------------------------------------------------------
map을 수정했는데 object 를 리턴해줘
자바는 객체지향 언어야
키 값이 리턴되는데 키값을 object로 받은거야
map 이라는 거에 있는거나 obj에 있는 거나 같은 키값이야
변수에 대한 사용설명서만 다른 것.
20번 사물함 가서 뭔가를 수정해주고
20번 키를 리턴해주는 거야
그래서 map 에서 수정을 가해서 obj를 리턴해줘도 아무 상관이 없는 것.
-------------------------------------------------------------------------------------------------------
다시 Main 에서 Run
Aop 에서 찍은거와 리턴되는 데이터를 찍은것을 확인가능
여기는 after 에서 작업한거야
AOP를 꼭 인증과 트랜젝션에서만 사용할 필요는 없어
다른곳에서 사용할 수 있으면 특이한 코딩 할수도 있음
'FrameWork > spring' 카테고리의 다른 글
spring 설명 그림 (0) | 2017.09.07 |
---|---|
리스트 파일 pdf 로 다운받기 (0) | 2017.08.24 |
Spring_Aop_Anno (0) | 2017.07.31 |
Spring_Aop (0) | 2017.07.31 |
Step06_FileUpload (0) | 2017.07.30 |