동적 에이전트와 정적 에이전트 관계
따라서 동적 에이전트의 역할은 동적 생성 정적 에이전트 종류와 유사하다.
정적 프록시 클래스 코드:
커넥터:
package net.battier.dao;
/**
*
*
* @author Administrator
*
*/
public interface Count {
//
public void queryCount();
//
public void updateCount();
}
구현 클래스:
package net.battier.dao.impl;
import net.battier.dao.Count;
public class CountImpl implements Count {
@Override
public void queryCount() {
System.out.println(" ...");
}
@Override
public void updateCount() {
System.out.println(" ...");
}
}
정적 프록시 클래스:
package net.battier.dao.impl;
import net.battier.dao.Count;
public class CountProxy implements Count {
private CountImpl countImpl;
/**
*
*
* @param countImpl
*/
public CountProxy(CountImpl countImpl) {
this.countImpl = countImpl;
}
@Override
public void queryCount() {
System.out.println(" ");
// ;
countImpl.queryCount();
System.out.println(" ");
}
@Override
public void updateCount() {
System.out.println(" ");
// ;
countImpl.updateCount();
System.out.println(" ");
}
}
호출 클래스:
package net.battier.test;
import net.battier.dao.impl.CountImpl;
import net.battier.dao.impl.CountProxy;
public class TestCount {
public static void main(String[] args) {
CountImpl countImpl = new CountImpl();
CountProxy countProxy = new CountProxy(countImpl);
countProxy.updateCount();
countProxy.queryCount();
}
}
동적 프록시 클래스 코드:
커넥터:
package net.battier.dao;
public interface BookFacade {
public void addBook();
}
구현 클래스:
package net.battier.dao.impl;
import net.battier.dao.BookFacade;
public class BookFacadeImpl implements BookFacade {
@Override
public void addBook() {
System.out.println(" 。。。");
}
}
동적 프록시 클래스:
package net.battier.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
/**
* JDK
*
* @author student
*
*/
public class BookFacadeProxy implements InvocationHandler {
private Object target;
/**
*
* @param target
* @return
*/
public Object bind(Object target) {
this.target = target;
//
return Proxy.newProxyInstance(target.getClass().getClassLoader(),
target.getClass().getInterfaces(), this); // ( ,cglib )
}
@Override
/**
*
*/
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Object result=null;
System.out.println(" ");
//
result=method.invoke(target, args);
System.out.println(" ");
return result;
}
}
호출 클래스:
package net.battier.test;
import net.battier.dao.BookFacade;
import net.battier.dao.impl.BookFacadeImpl;
import net.battier.proxy.BookFacadeProxy;
public class TestProxy {
public static void main(String[] args) {
BookFacadeProxy proxy = new BookFacadeProxy();
BookFacade bookProxy = (BookFacade) proxy.bind(new BookFacadeImpl());
bookProxy.addBook();
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Portswigger의 연구실 작성: CSRF 토큰 보호를 사용한 기본 클릭재킹이 견습생 수준 실습에서는 일부 CSRF 토큰 보호가 있음에도 불구하고 클릭재킹에 취약한 웹사이트에서 계정 삭제 흐름을 악용합니다. 주어진 자격 증명으로 로그인하면 계정 페이지로 이동한 후 사용자 계정을 삭제하는 데...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.