Spring 진급 의 길 (9) - Spring AOP 절단면 프로 그래 밍 개념 및 JDK 프 록 시 를 통 해 AOP 프 록 시 대상 생 성
AOP 의 명사 해석
Advice (알림): 절단면 이 무엇 인지, 언제 사용 하 는 지 정의 합 니 다.주로 before, after, after - returning, after - throwing, aound (통 지 된 방법 이 호출 되 기 전과 호출 된 후에 실행) 를 포함한다.
JoinPoint (연결 점): 프로그램 실행 과정 에서 명확 한 점, 예 를 들 어 방법의 호출, 이상 하 게 던 집 니 다.
PointCut (접점): Advice 의 연결 점 을 삽입 할 수 있 습 니 다. 접점 입 니 다. 특정한 연결 점 이 Advice 가 정의 하 는 상황 이 만족 할 때 이 연결 점 은 Advice 가 정의 하 는 처리 절차 에 삽 입 됩 니 다. 그러면 이 연결 점 은 접점 으로 변 합 니 다.
Aspect (절단면): 절단면 은 알림 과 접점 의 결합 이 고 알림 과 접점 은 절단면 에 관 한 모든 내용 을 공동으로 정의 합 니 다. 무엇 을 포함 하고 언제 어디서 실행 하 는 지 포함 합 니 다.
도입: 기 존 클래스 에 새로운 방법 이나 속성 을 추가 할 수 있 습 니 다.
짜 기: 대상 에 절단면 을 적용 하여 새로운 프 록 시 대상 을 만 드 는 과정.
JDK 프 록 시 를 통 해 AOP 프 록 시 대상 생 성
Spring 의 AOP 에이 전 트 는 Spring 의 IOC 용기 가 생 성 · 관 리 를 맡 고 그 의존 관계 도 IOC 용기 가 관리 하기 때문에 AOP 에이 전 트 는 용기 에 있 는 다른 Bean 을 직접 표적 으로 사용 할 수 있다.Spring 은 기본적으로 자바 동적 에이전트 로 AOP 대 리 를 만 듭 니 다. 다음은 이 대 리 를 만 드 는 과정 을 스스로 실현 합 니 다.
<span style="font-size:14px;">package com.siti.spring20160314;
public interface Person {
public void saySth();
}</span><span style="font-size:18px;">
</span>
User 클래스 는 이 Person 인 터 페 이 스 를 실현 하고 그 방법 을 실현 합 니 다.
package com.siti.spring20160314;
public class User implements Person{
private String userName;
private String password;
public User(){}
public User(String userName, String password) {
super();
this.userName = userName;
this.password = password;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public void saySth() {
System.out.println("hello!");
}
}
동적 에이전트 모드 를 통 해 이 대상 의 에이전트 대상 을 생 성 합 니 다.대리 대상 의 요청 을 차단 하고 요구 에 부합 되면 해당 요청 에 부합 되 지 않 는 요청 을 거부 합 니 다.세 립 도의 권한 통 제 는 이런 방식 으로 통제 할 수 있다 는 것 을 알 수 있다.
package com.siti.spring20160314;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class MyProxy4AOPObject implements InvocationHandler{
private Object targetObj;
public Object getProxyObject(Object targetObj){
this.targetObj = targetObj;
//
//
//
return Proxy.newProxyInstance(this.targetObj.getClass().getClassLoader(),
this.targetObj.getClass().getInterfaces(), this);
}
@Override
public Object invoke(Object proxy, Method method, Object[] arg2)
throws Throwable {
User user = (User) this.targetObj;
if(user.getUserName() != null && user.getUserName() != ""){
method.invoke(targetObj, arg2);
}
return null;
}
}
테스트 클래스
package com.siti.spring20160314;
public class MainTest {
public static void main(String[] args) {
User user = new User("", "wy");
MyProxy4AOPObject myProxy4AOPObject = new MyProxy4AOPObject();
Person person = (Person) myProxy4AOPObject.getProxyObject(user);
person.saySth();
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.