本篇文章给大家谈谈java的代理是怎么实现的,以及java如何实现代理机制对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
1、java动态代理实现步骤?2、Java怎么实现多层动态代理3、java怎么用代理模式实现多窗口运行4、Java代理的作用和实现?5、java动态代理怎样实现?
java动态代理实现步骤?
您好,提问者:
1、可以使用apache开发的HttpClient.jar来实现。
2、如果纯Java代码,首先创建一个Proxy类来进行指定协议,比如:Proxy.HTTP,构造方法请见JDK API文档,另外指定一个SocketAddress的ip和端口,一般http端口为80。
接下来就是访问Http网站了,使用URL url = new URL(“xxx”);地址,然后使用HttpConnection对象,把Proxy指定进去就可以了。
Java怎么实现多层动态代理
java动态代理主要是通过Proxy类的newProxyInstance()方法,该方法需要三个参(ClassLoader loader, Class?[] interfaces, InvocationHandler h),其中分别为:
①:该对象的类加载器classloader
②:被代理类的类对象
③:一个InvocationHandler 处理器接口
InvocationHandler中有一个方法:invoke(Object proxy, Method method, Object[] args) ,通过显式调用可以实现对代理对象的类方法进行操作,这里主要是采用反射的原理,SrpingAop就是利用这一点进行实现的。
java怎么用代理模式实现多窗口运行
本文实例形式详述了java实现一个程序运行时的启动窗口效果,如常用的microsoft word、 borland jbuilder 等,这样的窗口称为信息窗口。使用信息窗口的好处是可以使用户在等待软件主界面出现前的一段时间中得知软件运行状态。本例将演示如何来实现信息窗口,当打开程序时,信息窗口先显示,并在窗口上倒计时,直到“waiting 0”时,关闭该窗口,显示程序的主窗口。
该功能的主要实现方法如下:
一般来说,大多数的信息窗口是没有标题栏的,因此信息窗口不能由继承jframe 类来实现,一种简单的做法是通过继承jwindow 来实现(当然继承window 类也可以,但一个原则是尽量使用swing 中的界面
类)。另外,本例用到java.awt 包中的mediatracker 类。使用该类的好处是可以更好地管理程序中要使用的图片,同时还可以保证图片和界面同时显示,避免了窗口显示后很久才显示图片的缺点。
具体操作步骤如下:
1.新建一个project,取名为jspleshwindowdemo,其他设置按默认值。
2.新建一个application ,取名为jspleshwindowdemo,主窗口取名为mainframe,主窗口标题取名为jspleshwindowdemo。
3.先来编写信息窗口的代码。新建一个新类spleshwindow.java,继承java.swing.jwindow类。在spleshwindow 类中,定义新的属性,代码如下:
private string statusstr=null; //信息窗口中要显示的信息
private image logoimg=null; //信息窗口中的显示图片
4.向构造方法中添加代码,加载图片并初始化窗体,实现代码如下:
public spleshwindow(jframe owner) { //以jframe 对象为参数,可以是信息窗口和主窗口交互
super( owner );
// 加载图片
logoimg=gettoolkit().getimage( classloader.getsystemresource(“images/splesh.jpg”) );
// 等待图片加载完成
java.awt.mediatracker tracker=new java.awt.mediatracker( this ); //创建一个mediatracker 对象
tracker.addimage( logoimg , 0 ); //将图片放入mediatracker 对象中,序号为0
try{ //等待直到图片加载完成
tracker.waitforall();
}catch ( interruptedexception e ) {
e.printstacktrace();
}
// 设置信息窗体在屏幕上的显示位置
setlocation( gettoolkit().getscreensize().width/2 – logoimg.getwidth(this)/2 , gettoolkit().getscreensize().height/2 –
logoimg.getheight(this)/2 );
setsize( logoimg.getwidth(this) , logoimg.getheight(this) ); // 设置窗口大小
}
5.编写设置显示信息的方法,代码如下:
public void setstatus( string status ){
statusstr=status;
paint( getgraphics() ); // 重画窗口来更新信息窗口中的显示信息
}
6.重置paint()方法来绘制图片和显示信息的方法,代码如下:
public void paint(graphics g) {
/**@todo override this java.awt.component method*/
super.paint(g);
//绘制图片
if ( logoimg!=null )
Java代理的作用和实现?
代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
java动态代理怎样实现?
在目前的Java开发包中包含了对动态代理的支持,但是其实现只支持对接口的的实现。
其实现主要通过是java.lang.reflect.Proxy类和java.lang.reflect.InvocationHandler接口。
Proxy类主要用来获取动态代理对象,InvocationHandler接口用来约束调用者实现,如下,HelloWorld接口定义的业务方法,HelloWorldImpl是HelloWorld接口的实现,HelloWorldHandler是InvocationHandler接口实现。代码如下:
业务接口:
public interface HelloWorld {
void sayHelloWorld() ;
}
业务接口实现:
public class HelloWorldImpl implements HelloWorld {
public void sayHelloWorld() {
System.out.println(“Hello World!”);
}
}
InvocationHandler实现,需要在接口方法调用前后加入一部份处理工作,这里仅仅在方法调用前后向后台输出两句字符串,其代码如下:
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class HelloWorldHandler implements InvocationHandler {
//要代理的原始对象
private Object objOriginal;
/**
* 构造函数。
* @param obj 要代理的原始对象。
*/
public HelloWorldHandler(Object obj) {
this.objOriginal = obj ;
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Object result ;
//方法调用之前
doBefore();
//调用原始对象的方法
result = method.invoke(this.objOriginal ,args);
//方法调用之后
doAfter();
return result ;
}
private void doBefore() {
System.out.println(“before method invoke!”);
}
private void doAfter() {
System.out.println(“after method invoke!”);
}
}
测试代码:
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
public class Test {
public static void main(String[] args) {
HelloWorld hw = new HelloWorldImpl();
InvocationHandler handler = new HelloWorldHandler(hw);
HelloWorld proxy = (HelloWorld) Proxy.newProxyInstance(
hw.getClass().getClassLoader(),
hw.getClass().getInterfaces(),
handler);
proxy.sayHelloWorld();
}
}
Ø 首先获取一个业务接口的实现对象;
Ø 获取一个InvocationHandler实现,此处是HelloWorldHandler对象;
Ø 创建动态代理对象;
Ø 通过动态代理对象调用sayHelloWorld()方法,此时会在原始对象HelloWorldImpl. sayHelloWorld()方法前后输出两句字符串。
运行测试类输出如下:
before method invoke!
Hello World!
after method invoke!
此处Test类中的方法调用代码比较多,在我们的实际应用中可以通过配置文件来来简化客户端的调用实现。另外也可以通过动态代理来实现简单的AOP。
关于java的代理是怎么实现的和java如何实现代理机制的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。