Java 프록시 모드에 대해 이야기합시다
1. 정적 프록시
1.1 정적 프록시 프록시와 프록시 클래스는 공통 인터페이스를 유지해야합니다.
공개 인터페이스 iuserdao {void save ();}1.2 프록시 클래스, 대상 객체
Public Class userDao는 iuserdao {@override public void save () {system.out.println ( "----- 데이터가 저장되었습니다 !!! ------"); }}1.3 프록시 객체
Public Class userDaoproxy는 iuserdao {// 대상 객체 개인 iuserdao target을 수신하고 저장합니다. public userdaoproxy (iuserdao target) {this.target = target; } @override public void save () {system.out.println ( "트랜잭션 시작 ..."); target.save (); // 대상 객체 System.out.println을 실행하는 메소드 ( "트랜잭션 제출 ..."); }}1.4 테스트 클래스
공개 클래스 앱 {public static void main (String [] args) {// 대상 객체 iuserdao target = new userDao (); // 프록시 iuserdao proxy = 새로운 userDaoproxy (target); proxy.save (); // 프록시 메소드 실행}} 2. 동적 에이전트
2.1 마찬가지로 동적 프록시도 인터페이스를 완료해야합니다. (위와 유사)
2.2 대상 객체는 동일합니다.
2.3 프록시 객체에서는 다릅니다
public class proxyfactory {// 대상 객체 유지 개인 개체 대상; public proxyfactory (객체 대상) {this.target = target; } // 프록시 개체 생성 공개 객체 getProxyInstance () {return proxy.newproxyInstance (target.getClass (). getClassLoader (), target.getClass (). getInterfaces (), 새로운 invocationHandler () {@OverRide Public Object invoke (개체 proxy, method method, trows) STOLL.STROWS THROWS. 트랜잭션 "); // 대상 객체 메소드 객체 객체 returnValue = method.invoke (target, args); system.out.println ("트랜잭션 제출 "); returnvalue;}}); }}2.4 테스트 클래스
공개 클래스 앱 {public static void main (String [] args) {// 대상 객체 iuserdao target = new userDao (); System.out.println (target.getClass ()); // 대상 객체에 대한 프록시 객체 생성 iuserdao proxy = (iuserdao) 새로운 proxyfactory (target) .getProxyInstance (); System.out.println (proxy.getClass ()); // 메소드를 실행 [프록시 객체] proxy.save (); }} 3. CGLIB 프록시
3.1cglib 프록시는 인터페이스를 완료 할 필요가 없으며, 클래스와 프록시 클래스 만 쓰기 만하면됩니다. 여기의 프록시는 1.2와 동일하므로 더 이상 쓰여지지 않습니다.
3.2 프록시 클래스는 다릅니다. CGLIB 프록시 모드를 사용하는 경우 스프링의 핵심 프레임 워크 패키지를 참조해야합니다.
공개 클래스 근접 팩토리 홀 메소드 interceptor {// 대상 객체 개인 개체 대상 유지; public proxyfactory (객체 대상) {this.target = target; } // 대상 객체에 대한 프록시 객체를 만듭니다 public object getProxyInstance () {// 1. 도구 클래스 인핸서 EN = New Enhancer (); // 2. 상위 클래스 en // 3. 콜백 함수 EN.SETCALLBACK (this)를 설정합니다. // 4. 서브 클래스를 만듭니다 (프록시 오브젝트) return en.create (); } @Override public Object Intercept (Object OBJ, Method Method, Object [] args, MethodProxy Proxy) 던질 가능 {System.out.println ( "시작 트랜잭션 ..."); // 대상 객체를 실행하는 메소드 객체 returnValue = method.invoke (target, args); System.out.println ( "거래 제출 ......"); return returnValue; }}3.3 테스트 클래스
공개 클래스 앱 {public static void main (String [] args) {// 대상 객체 userDao target = new userDao (); System.out.println (target.getClass ()); // 프록시 객체 userDao proxy = (userDao) 새로운 proxyFactory (target) .getProxyInstance (); System.out.println (proxy.getClass ()); // 프록시 객체를 실행하는 메소드 proxy.save (); }}위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.