- 관점 중심의 프로그래밍이다.
- 불러다 사용하는것은 상관이 없는데 언제 불러다 사용할것이며, 언제 실행할것인가? (관점) => 메서드 호출방법
- 에스펙트(Aspect)
- 기존 객체지향 프로그래밍에서 모듈화 기법으로 추가된 중복코드(공통 처리 부분)를 별도의 독립된 클래스(Aspect)로 만들어 놓은 것이다.
- 각 모듈이 실행될 때 Aspect를 위임해서 실행되게 하는 프로그래밍 방식이다.
- Spring - AOP 총정리
- 기본개념
- 참고) OOP(Object Oriented Programming):객체 지향의 프로그래밍
- 좁은 의미의 Aspect
- 특정 메서드 앞에 실행되게 하는 인터페이스
- 1)스프링의 AOP(메서드 중심)->핵심클래스(target)의 메서드(ex 회원수정)
- 2)생성된 객체를 배열로 받아온다.
- 3)핵심클래스의 객체를 얻어온다.
- TestService(인터페이스)
- TestServiceImpl (save(),write())
- 인터페이스
- 여러개의 클래스 중에서 공통으로 사용기능(핵심기능을 가진 메서드)
- 모든 핵심클래스에서 공통으로 사용할 목적으로 메서드이다.
- 핵심클래스(=Target)
- 핵심기능 메서드 => save(),writer()
- 회원로그인 -> JoinPoint(메서드 앞에)
- 어느 특정 메서드가 실행지정(PointCut)
- 1.핵심클래스 빈즈등록
- 2.Advice클래스 빈즈등록
- 3.PointCut 생성(어느위치에 AOP메서드를 지정해서 실행)
- 접근지정 반환형 패키지명....클래스명 하위패키지(..) 특정메서드명(..) 0개이상
- ()매개변수 한개 표시, (,*)매개변수 2개
- ".writer." : 패키지 상관 없고, 메서드 이름(writer)만 가지고 따지겠다는 의미이다.
- 4.Advisor 설정 (Advice+PointCut 이 둘을 연결시켜준다.)
- 5.AOP를 적용(ProxyFactoryBean객체를 생성)
- AOP객체를 생성 target(핵심클래스)
- 프록시 객체는 중간에서 메서드를 가로채서 타깃클래스 먼저 실행시킨다.(중간에 가로채서 앞또는 뒤, 양쪽 모두에 호출한다.)
- ResultMain ->main()
- 핵심클래스 write()
- 흐름 : AOP객체를 생성 -> Adivisor작동 -> Advice+pointcut -> 중간에 가로채서 실행
- 자식클래스의 id뿐만 아니라 부모 인터페이스의 id로도 자식객체를 가져올 수도 있다.
: 자식클래스가 호출되기 전에 찍힌다.
- AfterReturningAdvice 인터페이스 상속
- 리턴객체 2. 핵심클래스의 메서드 정보 3. 생성된 객체들 4. 핵심클래스의 객체
🎁Advice클래스 빈즈빈즈 추가 등록
🎁PointCut 추가 생성
🎁Advisor 설정 추가
🎁AOP를 적용(ProxyFactoryBean객체를 생성)
- 특정 메서드 뒤에 호출되는것을 볼 수 있다.
- org.aopalliance.intercept.MethodInterceptor 인터페이스 상속
- Around Advice(핵심메서드의 앞, 뒤로 실행)
- => MethodInterceptor 인터페이스 상속
- 자동으로 invoke()를 호출 => 앞, 뒤에 공통으로 실행할 내용을 기술
- 핵심클래스의 메서드 호출 =>MethodInvocation객체명.proceed()를 이용해서 호출
- 핵심클래스의 메서드 호출
- 반환값O : 리턴값이 있는 메서드를 호출하는 경우
🎁Advice클래스 빈즈빈즈 추가 등록
🎁PointCut 이미 지정 되어있다.
🎁Advisor 설정 추가
🎁AOP를 적용(ProxyFactoryBean객체를 생성)