Поговорим с вами о прокси -режиме Java
1. Статический прокси
1.1 Как статический прокси -прокси, и класс прокси -класса должны поддерживать общий интерфейс.
публичный интерфейс iuserdao {void save ();}1.2 класс прокси, целевой объект
открытый класс userDao реализует iuserdao {@override public void said () {System.out.println ("----- Данные были сохранены !!! ------"); }}1.3 Прокси -объекты
открытый класс userdaoproxy реализует iuserdao {// получать и сохранить целевой объект Private iuserdao Target; public userdaoproxy (iuserdao target) {this.target = target; } @Override public void Said () {System.out.println ("Start Transaction ..."); target.save (); // Метод для выполнения целевой объектной системы.out.println ("Отправить транзакцию ..."); }}1.4 Тестовый класс
public class app {public static void main (string [] args) {// целевой объект iUserdao target = new userDao (); // proxy iuserdao proxy = new userdaoproxy (target); proxy.save (); // Выполнить метод прокси}} 2. Динамический агент
2.1 Аналогично, динамический прокси также должен завершить интерфейс. (Аналогично выше)
2.2 Целевой объект такой же.
2.3 Это просто по -другому в прокси -объектах
открытый класс ProxyFactory {// Поддерживать целевой объект объекта частного объекта; public proxyfactory (объект цели) {this.Target = target; } // Сгенерировать Proxy Object Public Object getProxyInstance () {return proxy.newproxyInstance (target.getClass (). GetClassLoader (), target.getClass (). GetInterfaces (), new vockehandler () {@Override public Object Invoke (Object Proxy, Method Method, Object [] Args). транзакция "); // Выполнить целевой объект объект объект returnValue = method.invoke (target, args); system.out.println (" отправить транзакцию "); return returnvalue;}}); }}2.4 Тестовый класс
public class app {public static void main (string [] args) {// целевой объект iUserdao target = new userDao (); System.out.println (target.getClass ()); // Создать прокси -объект для целевого объекта iuserdao proxy = (iuserdao) new proxyfactory (target) .getProxyInstance (); System.out.println (proxy.getClass ()); // Выполнить метод [Proxy Object] proxy.save (); }} 3. Cglib Proxy
3.1 CGLIB Proxy не нуждается в завершении интерфейса, ему нужно только написать класс и класс прокси, который для прокси. Прокси здесь такой же, как 1.2, поэтому он больше не написан.
3.2 Прокси -класс отличается. При использовании прокси -режима CGLIB вам необходимо обратиться к пакету Core Framework от Spring.
открытый класс ProxyFactory реализует MethodInterceptor {// Поддерживать целевой объект целевого объекта частного объекта; public proxyfactory (объект цели) {this.Target = target; } // Создать прокси -объект для целевого объекта Public Object getProxyInstance () {// 1. Enhancer Enhancer EN = новый Enhancer (); // 2. Установить родительский класс en.setsuperclass (target.getClass ()); // 3. Установить функцию обратного вызова en.setCallback (this); // 4. Создать подкласс (прокси -объект) return en.create (); } @Override public Object Intercept (объект obj, метод метода, объект [] args, methodproxy proxy) бросает Throwable {System.out.println ("Start Transaction ..."); // метод для выполнения целевого объекта объекта returnValue = method.invoke (target, args); System.out.println ("отправить транзакцию ......"); returnValue; }}3.3 Тестовый класс
public class app {public static void main (string [] args) {// целевой объект userdao target = new userdao (); System.out.println (target.getClass ()); // Proxy Object userdao proxy = (userDao) new ProxyFactory (Target) .getProxyInstance (); System.out.println (proxy.getClass ()); // Метод для выполнения Proxy Object Proxy.save (); }}Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.