spring 04 aop_대리
특징:
단점:
public interface UserDao {
public void save();
}
public class UserDaoImpl implements UserDao {
public void save(){
System.out.println(" ");
}
}
public class UserDaoProxy implements UserDao{
private UserDao userDao = new UserDaoImpl();
public void save(){
System.out.println(" ......");
userDao.save();
System.out.println(" ......");
}
}
public class App {
@Test
public void test(){
UserDao proxy = new UserDaoProxy();
proxy.save();
}
}
동적 에이전트
JDK 가 프 록 시 대상 을 만 드 는 Api (Proxy)
static Object
newProxyInstance(ClassLoader loader, Class>[] interfaces, InvocationHandler h)
매개 변수 loader: 현재 대상 이 사용 하 는 클래스 로 더!
매개 변수 interfaces: 현재 대상 이 실현 하 는 인터페이스
인자 h: 인터페이스 형식, 이벤트 프로세서. 대상 방법 을 실행 할 때 이벤트 가 발생 합 니 다.현재 실행 중인 방법 (method 대상) 을 이벤트 프로세서 방법 파라미터 에 전송 하면 업무 논리 에 따라 목표 대상 방법 이나 확장 기능 을 실행 할 지 여 부 를 판단 할 수 있 습 니 다!
종류
public interface UserDao {
public void save();
public void find();
}
public class UserDaoImpl implements UserDao {
public void save(){
System.out.println(" ");
}
public void find(){
System.out.println(" ");
}
}
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class ProxyFactory {
private Object target; //
public ProxyFactory(Object target){
this.target = target;
}
public Object getProxyInstance(){
Object proxy = Proxy.newProxyInstance(
target.getClass().getClassLoader(),
target.getClass().getInterfaces(),
new InvocationHandler(){
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Object result = null;
if(method.getName().equals("save")){
System.out.println(" ");
result = method.invoke(target, args);
System.out.println(" ");
}else{
result = method.invoke(target, args);
}
return result;
}
}
);
return proxy;
}
}
public class App {
@Test
public void test(){
//
UserDaoImpl userDaoImpl = new UserDaoImpl();
UserDao proxy = (UserDao) new ProxyFactory(userDaoImpl).getProxyInstance();
/* ; */
proxy.save();
}
}
cglib 에이전트
'하위 에이전트' 라 고도 부 릅 니 다. 목표 대상 이 인 터 페 이 스 를 실현 하지 않 으 면 jdk 가 제공 하 는 대 리 를 사용 할 수 없고 하위 클래스 로 실현 할 수 있 습 니 다!실행 시기 에 동적 으로 메모리 에 하위 클래스 대상 을 구축 하 는 방법 으로 대상 을 확장 합 니 다. 이것 이 바로 cglib 에이전트 입 니 다!Spring 도 cglib 에이 전 트 를 지원 합 니 다. 핵심 패키지 에 이 기능 이 포함 되 어 있 습 니 다!
요약:
클래스:
public class UserDao {
public void save(){
System.out.println(" save");
}
public void find(){
System.out.println(" find");
}
}
import java.lang.reflect.Method;
import org.springframework.cglib.proxy.Callback;
import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.InvocationHandler;
public class ProxyFactory implements InvocationHandler{
private Object target; //
public ProxyFactory(Object target){
this.target = target;
}
//
public Object getProxyInstance(){
//
Enhancer enhancer = new Enhancer();
//
enhancer.setSuperclass(target.getClass());//
//
enhancer.setCallback((Callback) this);
return enhancer.create();
}
@Override
public Object invoke(Object arg0, Method method, Object[] args) throws Throwable {
Object result = null;
if(method.getName().equals("save")){
System.out.println(" ");
result = method.invoke(target, args);
System.out.println(" ");
}else{
result = method.invoke(target, args);
}
return result;
}
}
public class App {
@Test
public void test(){
//
UserDao userDao = new UserDao();
UserDao proxy = (UserDao) new ProxyFactory(userDao).getProxyInstance();
/* ; */
proxy.save();
proxy.find();
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.