Java 반사 구현 Aop 에이전트 상세 정보
프록시 인터페이스 정의
JDKf 동적 에이전트는 인터페이스에 동적 에이전트만 만들 수 있기 때문에 먼저 인터페이스를 정의합니다. 데이터의 Save 방법에 사무 처리를 추가해야 한다고 가정하면 UserDao 인터페이스가 있습니다. 그 안에 Save 방법이 있습니다. 코드는 다음과 같습니다.
public interface UserDao {
public void save();
}
정의 에이전트 구현다음은 인터페이스 정의를 실현하는 Save 방법입니다. 우리는 아래의 코드를 사용하여 실현합니다.
public class UserDaoImpl implements UserDao {
@Override
public void save() {
System.out.println("I am save user....");
}
}
증강 코드 정의사용자를 저장하기 전에 사무를 열고 사용자를 저장한 후에 사무를 제출하며 증강 코드에서 두 가지 방법인 before () 와after () 를 정의합니다. 각각save () 방법의 실행이 시작되기 전과 실행된 후입니다.
public class UserTx {
public void before(){
System.out.println("before save.....");
}
public void after(){
System.out.println("after save......");
}
}
Invocation handler 정의handler를 정의해야 하는 이유는 동적 에이전트를 실행할 때 실제적으로 실행하는 것은handler 안의 invoke () 방법이기 때문이다. 그러면 우리는 invoke () 방법에서 방법의 내용을 사용자 정의하여 에이전트와 강화된 논리와 효과를 얻을 수 있다.
public class UserDaoInvocationHandler implements InvocationHandler {
/
/
private Object proxyObj;
/
@param proxyObj
*/
public void setProxyObj(Object proxyObj) {
this.proxyObj = proxyObj;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
UserTx tx = new UserTx();
tx.before();
Object resultObj = method.invoke(proxyObj, args);
tx.after();
return resultObj;
}
}
테스트 결과위에서 모든 것을 정의했습니다. 우리는 실제적으로 우리가 지정한 대상을 동적 대리하고 대리 후의 대상으로 우리가 집행해야 할 방법을 집행하여 대리가 성공했는지 검증합니다.
import java.lang.reflect.Proxy;
public class ProxyTst {
public static void main(String[] args) {
// proxy object
UserDao target = new UserDaoImpl();
// invocation handler
UserDaoInvocationHandler handler = new UserDaoInvocationHandler();
handler.setProxyObj(target);
// proxy
UserDao targeted = (UserDao) Proxy.newProxyInstance(
target.getClass().getClassLoader(),
target.getClass().getInterfaces(),
handler);
// execute proxyed object
targeted.save();
}
}
위의 코드를 실행한 후에 우리는 컨트롤러에서 아래의 출력을 볼 수 있습니다. 이것은 UserDao가 성공적으로 에이전트되었음을 증명하는 동시에 우리는 우리의 프로그램에 성공적으로 사무 기능을 추가했습니다.
before save.....
I am save user....
after save......
이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
38. Java의 Leetcode 솔루션텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.