AOP 의 JDK 동적 에이전트 와 CGLIB 의 에이전트
자바 코드
테스트 코드
/**
* Aspect
*/
@Aspect
public class ShopAddCheck {
/**
* Pointcut,Pointcut allAddMethod,
* ,
* Pointcut , ( Joinpoint)
*/
@Pointcut("execution(* save*(..))")
public void allAddMethod(){};
/**
* Advice,
*/
@Before("allAddMethod()")
public void checkShop(){
System.out.println("Check Shop");
}
}
//
BeanFactory bean = new ClassPathXmlApplicationContext("*.xml");
ShopManager shopManager = (ShopManager) bean.getBean("shopManagerImp");
shopManager.saveShop();
프로필 에 추가
Xml 코드
spring.ShopAddCheck"/>
spring.ShopManagerImp"/>
프로그램 에서 정의 하지 않 으 면 설정 파일 에서 도 정의 할 수 있 습 니 다.
자바 코드
spring.ShopAddCheck"/>
spring.ShopManagerImp"/>
spring.*.save*(..))"/>
AOP 의 방법 에서 JoinPoint 를 사용 하여 절 입 된 방법의 인자 등 정 보 를 얻 을 수 있 습 니 다.
자바 코드
public void checkShop(JoinPoint joinPoint){
// , Ojbect
joinPoint.getArgs();
//
joinPoint.getSignature().getName();
}
JDK 대리 와 CGLIB 대리 의 총 결(생 성 대리 대상 의 전 제 는 AOP 접근)1.목표 대상 이 인 터 페 이 스 를 실현 하면 기본 적 인 상황 에서 JDK 의 동적 대 리 를 이용 하여 AOP 를 실현 합 니 다.단순 한 IOC 로 대상 을 생 성 하 는 경우 에 도 AOP 접근 이 없 으 면 대리 가 생 성 되 지 않 고 NEW 의 인 스 턴 스 만 사용 하여 Spring 의 Bean 공장 2,목표 대상 에 게 인 터 페 이 스 를 실현 하면CGLIB 를 사용 하여 AOP 를 강제 할 수 있 습 니 다.CGLIB 를 사용 하여 AOP 를 실현 하 는 방법*CGLIB 라 이브 러 리 를 추가 합 니 다.*spring 프로필 에 추가 하면 3 을 강제 사용 할 수 있 습 니 다.대상 이 인 터 페 이 스 를 실현 하지 못 하면 CGLIB 라 이브 러 리 를 사용 해 야 합 니 다.spring 은 자동 으로 JDK 동적 에이전트 와 CGLIB 사이 에서 전환 합 니 다.(인터페이스 가 실현 되 지 않 은 경우 CGLIB 에이 전 트 를 사용 합 니 다.인터페이스 클래스 를 사용 하면 JDK 동적 에이전트)JDK 동적 에이전트 와 CGLIB 바이트 코드 로 생 성 되 는 차이 점 은?*JDK 동적 에이 전 트 는 인 터 페 이 스 를 실현 한 클래스 만 생 성 할 수 있 고 클래스*CGLIB 는 클래스 를 대상 으로 에이 전 트 를 실현 할 수 없습니다.주로 지 정 된 클래스 에 하위 클래스 를 생 성하 여 덮어 쓰 는 방법 입 니 다. 상속 이기 때문에 이런 종류 나 방법 은 final JDK 동적 에이전트 의 예 로 밝 히 지 않 는 것 이 좋 습 니 다.
자바 코드
인터페이스
구체 적 실현
JDK 동적 에이전트
마지막 테스트
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
프로그래밍 패러다임 -관점 지향(AOP)객체지향 설계 방식을 충분히 따르더라도, 여러 클래스에 공통된 기능이 흩어져서 존재할 수 있는데, 이렇게 흩어진 공통 기능들을 관심사 라고 한다. AOP에서 사용하는 여러 용어의 의미는 다음과 같다. 여러 곳에서 사...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.