动态代理方法代码实现

本文探讨了Java中动态代理的实现方式,并结合工厂模式创建代理对象,通过具体示例展示了如何利用这两种设计模式增强软件的灵活性和扩展性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

动态代理方法:

代码实现:
package kkk;

import java.lang.reflect.InvocationHandler;

import java.lang.reflect.Method;

import java.lang.reflect.Proxy;

interface IMessage {

public void send() ;

}

class MessageReal implements IMessage {

@Override

public void send() {

// TODO Auto-generated method stub

System.out.println("【发送消息】www.baidu.cn") ;

}

}

class MLDNProxy implements InvocationHandler {

private Object target ;

public Object bind(Object target) {

this.target = target ;

return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this) ;

}

public boolean connect() {

System.out.println("【消息代理】进行消息发送通道的连接。");

return true ;

}

public void close() {

System.out.println("【消息代理】关闭消息通道。");

}

@Override

public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

// TODO Auto-generated method stub

Object returnData = null ;

if(this.connect()){

returnData = method.invoke(this.target, args) ;

this.close();

}

return returnData;

}

}

public class ll {

public static void main(String[] args) throws Exception{

// TODO Auto-generated method stub

IMessage iMessage = (IMessage) new MLDNProxy().bind(new MessageReal()) ;

iMessage.send();

}

}

 

 

Annotation整合工厂设计模式与代理设计模式:

package kkk;

import java.lang.reflect.InvocationHandler;

import java.lang.reflect.InvocationTargetException;

import java.lang.reflect.Method;

import java.lang.reflect.Proxy;

interface IMessage {

public void send(String msg) ;

}

class MessageService {

private IMessage message ;

public MessageService() {

this.message = Factory.getInstance(MessageImpl.class) ;

}

public void send(String msg){

this.message.send(msg);

}

}

class Factory {

private Factory() {}

public static <T> T getInstance(Class<T> clazz) {          //直接返回一个实例化对象

try {

return (T) new  MessageProxy().bind(clazz.getDeclaredConstructor().newInstance()) ;

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

return null ;

}

}

}

class MessageProxy implements InvocationHandler {

private Object target ;

public Object bind(Object target) {

this.target = target ;

return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this) ;

}

public boolean connect() {

System.out.println("【代理操作】进行消息发送通道的连接。") ;

return true ;

}

public void close() {

System.out.println("【代理操作】关闭连接通道。") ;

}

 

@Override

public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

// TODO Auto-generated method stub

try{

if(this.connect()){

return method.invoke(this.target,args);

}else {

throw new Exception("【Error】消息无法进行发送。") ;

}

}finally {

this.close();

}

}

}

 

class MessageImpl implements IMessage {

@Override

public void send(String msg) {

// TODO Auto-generated method stub

System.out.println("【消息发送】" + msg );

}

}

 

public class ll {

 

public static void main(String[] args) throws Exception{

// TODO Auto-generated method stub

 

MessageService messageService = new MessageService();

messageService.send("www.baidu.cn");

}

 

}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值