Spring 진급 의 길 (9) - Spring AOP 절단면 프로 그래 밍 개념 및 JDK 프 록 시 를 통 해 AOP 프 록 시 대상 생 성

소프트웨어 개발 에서 응용 에 분포 되 어 있 는 여러 가지 기능 을 횡단 관심 점 이 라 고 하 는데 일반적인 상황 에서 이런 횡단 관심 점 은 개념 적 으로 응용의 업무 논리 와 분리 된다.이러한 가로 관심 사 를 우리 의 업무 논리 와 분리 하 는 것 은 절단면 프로 그래 밍 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();
	}
}

좋은 웹페이지 즐겨찾기