今天在研究Webwork2&Struts2的时候仔细研究了一下Dynamic proxy。
Dynamic proxy在很多的时候都要用到 ,例如 Spring的AOP, Webwork&Struts2的Interceptor,EJB
proxy与dynamic proxy的区别
业务接口:
HelloWorld .java
java 代码
- public interface HelloWorld {
- void sayHelloWorld() ;
- }
业务接口实现:
HelloWorldImpl .java
java 代码
- public class HelloWorldImpl implements HelloWorld {
- public void sayHelloWorld() {
- System.out.println("Hello World!");
- }
- }
-
dynamic proxy方式的代理:
HelloWorldHandler .java
java 代码
- import java.lang.reflect.InvocationHandler;
- import java.lang.reflect.Method;
- public class HelloWorldHandler implements InvocationHandler {
-
- private Object objOriginal;
-
-
-
-
- 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!");
- }
- }
proxy方式的代理
HelloWorldProxy .java
java 代码
- public class HelloWorldProxy implements HelloWorld {
-
- private HelloWorldImpl objImpl
-
-
-
-
- public HelloWorldHandlerHelloWorldImpl objImpl{
- this.objImpl= objImpl;
- }
- public void sayHelloWorld() {
- System.out.println("In the Proxy Class!");
- objImpl.sayHelloWorld();
- System.out.println("In the Proxy Class!");
- }
- }
dynamic proxy方式测试代码:
Test .java
java 代码
- 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();
- }
- }
Notice:newProxyInstance传递的是一个接口对象。否则会报错
分享到:
相关推荐
2. 高性能: Castle Dynamic Proxy使用Emit和委托等技术生成代理类型,调用真实类的方法,性能方面也没有太多损失。 3. 灵活的拦截处理: Castle Dynamic Proxy提供了灵活的拦截处理机制,可以拦截方法调用,进行...
Castle框架注入依赖所需dll Version:2.1.0.0
通常,Struts2的安全漏洞主要涉及Action、Result、Interceptor等核心组件,或者是OGNL(Object-Graph Navigation Language)表达式中的安全问题。 在Struts2的历史中,有几次著名的漏洞事件,如CVE-2017-5638(S2-...
在Struts2中,拦截器(Interceptor)是一个关键概念,它扮演着处理请求、添加额外功能和增强应用行为的角色。本文将深入探讨Struts2拦截器的原理以及它与Java中的动态代理之间的联系。 首先,让我们了解Struts2拦截...
STRUTS2的核心是Action和Interceptor,Action处理用户的请求,Interceptor处理业务逻辑和数据验证。在EXTJS4与STRUTS2的集成中,STRUTS2作为后端服务器,接收EXTJS4发起的Ajax请求,执行相应的业务逻辑,并返回处理...
2. **Interceptor(拦截器)**:拦截器是Struts2的核心特性之一,它们是处理请求和响应之间的一个个中间层,可以实现如日志、权限检查等功能。 3. **配置文件**:通常为struts.xml,用来配置Action、结果类型、拦截...
同时,我们需要在Struts2的配置文件中指定Spring的Action代理(Spring-Action-Proxy),这样,Struts2的Action实例将由Spring管理。 在图书管理系统中,我们可以定义一个Spring Bean来代表图书实体类,包含了如书名...
### Xwork——Struts2核心 #### Xwork与Struts2的关系 Xwork作为Struts2的核心组件之一,它的设计理念和技术实现对整个Struts2框架起着决定性的作用。Struts2是一个流行的Java Web开发框架,它采用了MVC(Model-...
亲测好用,挺不错的资源,大家快来下载吧!挺有用的!需要的话可以来下载哦!可以拿到满分的网络代理,采用读者优先的方式避免竞争,避免了pipe broken造成的服务器中断。
### Flex与Struts2整合详解 #### 一、引言 Flex与Struts2的整合是一种将Adobe Flex作为前端富客户端界面技术与Struts2框架作为后端MVC架构进行结合的方法,以此来构建高性能、高响应度的Web应用程序。通过这种整合...
package cn.sxt.dynamicproxy; import java.util.ArrayList; import java.util.List; import cn.sxt.service.UserService; import cn.sxt.service.UserServiceImpl; public class Client { public ...
proxy2proxy 多级协议代理软件当前支持32/64位Windows7/8/10等操作系统。 proxy2proxy 多级协议代理软件特点: 1)支持单级/多级协议代理服务。 2)支持 HTTP/HTTPS 协议网络代理。 3)支持大规模网络...
这是动态代理的简单实例,方便学,入手.这个例子非常的简单哦!
说明: 1. geneve-proxy-main 运行依赖PyYAML-5.3.1 和python3 2. 安装PyYAML-5.3.1 2.1 解压PyYAML-5.3.1.tar.gz,进入解压目录。解压命令:tar -zxvf PyYAML-... python3 main.py > /var/log/geneve-proxy.log 2>&1 &
2. **JDK动态代理**:Java的`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口提供了动态生成代理对象的能力。在运行时,我们可以根据接口创建代理对象,而无需预先编写代理类。`...
本文将深入探讨如何使用Spring的IOC和DI特性,结合动态代理(Dynamic Proxy)来实现一种类似AOP(面向切面编程)的功能,以达到在不修改原有代码的情况下增强或拦截方法调用的目的。 **一、Spring IOC(控制反转)*...
- Struts 2的基本架构,包括Action类、Result类型、Interceptor拦截器等核心概念。 - 如何创建一个简单的Struts 2应用,配置struts.xml文件以定义Action和结果映射。 - 使用Struts 2的JSON插件,使Action能够返回...
Struts2是一个基于MVC(Model-View-Controller)设计模式的开源JavaEE框架,它为构建企业级Web应用程序提供了强大的支持。理解Struts2的工作原理对于开发人员来说至关重要,因为它可以帮助我们更好地优化代码,提高...
DynamicProxy.zip
- Struts2作为Struts1的进化版,基于WebWork,提供了更好的插件支持,如Spring和Hibernate集成。 2. 相关术语: - HTTP:超文本传输协议,基于TCP/IP通信,用于传输Web内容。 - Servlet:Java编程接口,用于处理...