关于java的代理 有两种:静态代理和动态代理;所谓代理好处我的理解就是代理的目标对象的同时,做些其他的事情譬如事物的安全性检测 ;下面举个例子
写道
//定义一个接口
package com.spring.static_proxy;
/**
*
* @author CHENLEI
*
*/
public interface usermanager {
public void delet(int id);
public void add(String username);
}
写道
// 实现定义的接口
public class usermanagerImp implements usermanager {
@Override
public void delet(int id) {
System.out.println("delet invoked");
}
@Override
public void add(String username) {
System.out.println("add invoked");
}
}
写道
//创建一个代理类实现usermanager接口
/**
* 静态代理
*
* @author CHENLEI
*
*/
public class usermanagerProxy implements usermanager{
private usermanager usermanager;//要代理的对象
public usermanagerProxy(usermanager usermanager){
this.usermanager=usermanager;
}
@Override
public void delet(int id) {
checked();
}
public void add(String username) {
checked();//横切性问题,独立的事物,和add()互不影响-----横切性的关注点
this.usermanager.add("okok");
}
//安全检查(代理类干的其他事情)
private void checked(){}
}
ok 这里静态的代理就 做好了
测试
写道
写道
package com.spring.static_proxy;
import com.spring.Proxy.handler;
public class testproxy {
public static void main(String[]args){
usermanager user=new usermanagerImp();
usermanagerProxy userproxy=new usermanagerProxy(user);
userproxy.add("okok");
}
}
下面是动态代理,这个东西我比较喜欢,灵活,不需要为每一个类编写代理类,只要一个就ok
首先我们要实现一个接口InvocationHandler,通过一个方法返回一个要代理object对象,同时我们要重写invoke()方法
Proxy.newProxyInstance()方法的参数,依次是代理类的classloader,代理类所实现的接口,这里就是我们的usermanaher接口,最后一个是我们代理的实例对象
method就是我们代理目标对象的方法
package com.spring.Proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
/**
* 动态代理demo
* @author CHENLEI
*/
public class handler implements InvocationHandler {
private Object targetobject;//代理的目标对象
public Object newPorxy(Object targetobject){//动态的返回要代理的目标对象
this.targetobject=targetobject;
return Proxy.newProxyInstance(targetobject.getClass().getClassLoader(),
targetobject.getClass().getInterfaces(),this);
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
if(method.getName().equalsIgnoreCase("add")){
checked(method);//安全检查
return method.invoke(targetobject,args);//method代理目标对象所要调用的方法和
args 参数
}else{
return method.invoke(targetobject,args);//method代理对象所要调用的方法
}
}
private void checked(Method method) {
System.out.println(method.getName()+" checked invoked");
}
}
测试动态代理
package com.spring.static_proxy;
import com.spring.Proxy.handler;
public class testproxy {
public static void main(String[]args){
// usermanager user=new usermanagerImp();
//
// usermanagerProxy userproxy=new usermanagerProxy(user);
// userproxy.add("okok");
handler hand=new handler();
usermanager user=(usermanager) hand.newPorxy(new usermanagerImp());//动态的返回目标对象
user.add("okok");user.delet(1);
}
}
ok 在这里大概的代理就搞定了。
jdk的动态代理需要实现一个 接口才可以生产代理对象
分享到:
相关推荐
### Java代理模式与Java动态代理详解 #### 一、代理模式概述 代理模式是一种软件设计模式,它在客户端和目标对象之间提供了一种间接层。这种模式的主要目的是控制客户端对目标对象的访问,并且可以在不修改原有...
在Java编程中,有时我们需要模拟用户的网络环境,例如设置IE(Internet Explorer)浏览器的代理以进行自动化测试或者数据抓取。这个"java操作IE代理"的主题涉及到如何在Java程序中控制IE的网络代理设置,这通常需要...
Lotus Domino Java 代理获取传递值 JSON Lotus Domino 是一种基于Notes技术的服务器端应用程序, Lotus Domino Java 代理是指在 Domino 服务器上运行的 Java 代理程序,可以用来处理用户请求、提供数据服务等。今天...
Java代理服务器程序是一种用于转发网络请求的应用,它在客户端与目标服务器之间起到中介的作用。这样的设计使得用户可以通过代理服务器访问互联网,从而实现多种功能,如匿名浏览、负载均衡、缓存优化、网络监控等。...
关于"权限问题.txt",这可能是指在执行Java代理时遇到的权限相关问题。在Lotus Domino中,每个代理都有一个执行级别,如服务器、管理员或用户。根据代理的安全设置,它可能需要特定级别的权限才能访问某些资源或执行...
Lotus Domino是一个企业级的应用开发平台,而Java代理在Lotus Domino中被用来处理服务器端的任务,例如数据处理、业务逻辑或响应HTTP请求。在这个特定的案例中,`JQueryReportToolJavaAgent`是一个Java代理,它被...
在Java编程语言中,代理模式是一种设计模式,它允许我们为一个对象提供一个代理以控制对这个对象的访问。代理模式通常用于增加额外的功能或在访问原对象时进行额外的操作,比如日志记录、安全控制、性能度量等。Java...
本主题将深入探讨如何使用Java语言来编写这样的代理服务器。以下是对这个主题的详细解析: 首先,理解HTTP代理服务器的基本原理是必要的。HTTP代理服务器作为客户端与目标服务器之间的中介,它接收客户端的HTTP请求...
Java 实现免费代理IP的获取方式 并动态实时校验是否有效,java文件项目内含有Jsoup的Jar包(Jsoup是加工过的,含请求),有2个主入口程序: 其一:用于请求代理IP,并立即校验是否是一个有效的代理IP,如果有效,...
Java代理机制是Java编程中一个重要的特性,它允许我们在不修改原有代码的基础上,为已有类增加额外的功能。本文将深入探讨两种主要的Java代理实现:JDK动态代理和CGLIB代理。 一、JDK动态代理 JDK动态代理基于接口...
HTTP代理服务器java 简单网站过滤
Java动态代理是Java编程中一个重要的特性,它允许我们在运行时创建代理对象,这些代理对象可以代表并增强原对象的功能。动态代理在很多场景下都非常有用,比如日志记录、性能监控、事务管理等。本示例将带你深入理解...
在Java编程中,设计模式是一种解决常见问题的模板或最佳实践,它可以帮助开发者编写更加灵活、可维护和可扩展的代码。代理设计模式是其中的一种,它的主要作用是在不修改原有对象的基础上,为对象添加额外的功能或者...
以下是关于Java动态代理的一些详细知识点: 1. **Java接口代理**: Java动态代理是基于接口的,因此,只有实现了特定接口的类才能被代理。代理对象必须与原对象实现相同的接口,这样才能在运行时调用相同的方法。 ...
在Java编程中,代理模式是一种常用的结构型设计模式,它为其他对象提供一种代理以控制对这个对象的访问。代理模式通常用于增加额外的功能或在访问原始对象时进行额外的操作,比如日志记录、性能监控等。Java提供了两...
在给定的`autoProxy.txt`文件中,可能包含了一些关于如何自动配置和使用动态代理的例子或者更复杂的代理场景,例如CGLIB、JDK动态代理的选择、代理性能优化等内容。分析和理解这个文件的内容,可以帮助我们深入理解...
Java代理模式是一种设计模式,它在面向对象编程中扮演着重要的角色,主要目的是为了在不修改原有对象的基础上,为对象添加额外的功能或者控制对对象的访问。代理模式的核心思想是通过代理类来间接调用目标类的方法,...
在Java编程中,获取浏览器的代理设置是一项重要的任务,特别是在开发网络应用或者需要模拟用户网络环境的场景下。本文将详细讲解如何利用Java来获取浏览器的代理设置,并结合提供的文件`registry.jar`和`ICE_...
Java动态代理是Java语言提供的一种在运行时创建代理对象的技术,它允许我们为已存在的接口创建代理类,以便在调用真实目标对象的方法时添加额外的功能或行为。在这个实例中,我们将深入探讨Java动态代理的核心概念,...
这个文件名可能是某个关于Java动态代理的示例代码或者教程的组成部分,可能包含了如何创建和使用代理对象的具体代码。不过,由于没有具体的文件内容,我们无法详细分析其中的知识点。 总的来说,Java动态代理机制...