Spring2.5学习4.1_静态代理实现

原创 2015年07月07日 15:33:00

在静态代理中代理对象与被代理对象(目标对象)必须实现同一个接口,完整保留被代理对象的接口样式,也将接口不变的原则一直保留。

下面通过一个简单的示例来说明:

HelloInterface接口

package proxy;

public interface HelloInterface {
	public void sayHello();
}

实现HelloInterface接口的类HelloInterfaceImpl

package proxy;

public class HelloInterfaceImpl implements HelloInterface {

	@Override
	public void sayHello() {
		System.out.println("Hello xianjj");
	}

}

用于增强实现类HelloInterfaceImpl功能的类(代理)proTest

package proxy;

public class ProTest implements HelloInterface {

	HelloInterface helloInterface;
	public ProTest(HelloInterface helloInterface) {
		super();
		this.helloInterface = helloInterface;
	}
	@Override
	public void sayHello() {
		System.out.println("准备");
		helloInterface.sayHello();
		System.out.println("结束");
	}

	public static void main(String[] args) {
		HelloInterface pro = new proTest(new HelloInterfaceImpl());
		pro.sayHello();
	}
}

ProTest类实现了HelloInterface接口,并且构造方法的参数类型也是HelloInterface,这样ProTest具有实例变量helloInterface,这样就知道代理类的具体实现了,主要是使用proTest类对HelloInterfaceImpl的功能进行“包装”;最后通过main方法进行输出,结果如下截图。

在不改变原有类HelloInterfaceImpl的基础上对其进行功能性增强,在Hello xianjj的前后分别输出“准备”,‘结束’字样,这就是一个典型的日志或事务的AOP功能模型。从这里可以看到静态代理类自身的主要缺点,即扩展性不好,如果想代理更多的类,就需要创建更多的代理类。

在本例中proTest是代理类,HelloInterfaceImpl就是被代理的对象。


结果:


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

SpringBoot系列—基础配置

入口类 SpringBoot项目一般在项目的根包目录下会有一个artifactId+Application命名规则的入口类,入口类有一个main方法(标注的java应用的的入口方法),main方法中使...
  • jeofey
  • jeofey
  • 2017年06月13日 15:35
  • 237

设计模式(三)建造者模式

建造者模式概念 任务:软件开发过程中,当遇到一个“复杂的对象”,该对象由好多部分组成,各个部分的组合比较稳定或有一定的依赖次序,但各部分自身却经常面临变化时,可以隔离出“复杂对象的各个部分”的变...
  • jeofey
  • jeofey
  • 2015年11月25日 18:17
  • 1220

Spring2.5学习4.1_AOP

Java的动态代理: Spring的面向切面编程(AOP)底层实现原理是动态代理,因此在学习面向切面编程之前必须先了解动态代理。 Java中动态代理应用非常广泛,动态代理是23中设计模式中非常常用...
  • jeofey
  • jeofey
  • 2015年07月01日 11:21
  • 701

Spring2.5学习3.2_编码剖析@Resource注解的实现原理

首先看一下J2EE提供的@Resource注解:该注解默认安照名称进行装配,名称可以通过name属性进行指定, 如果没有指定name属性,当注解写在字段上时,默认取字段名进行按照名称查找,如果注解写在...
  • jeofey
  • jeofey
  • 2015年06月03日 21:44
  • 669

Spring MVC 学习笔记(二) 基于spring2.5注解实现的spring MVC项目

建立web项目导入jar包(spring.jar, spring-webmvc.jar, commons-logging.jar。其他jar包为hibernate相关jar包) 3 . 修改we...

Spring MVC 学习笔记(二) 基于spring2.5注解实现的spring MVC项目

建立web项目 导入jar包(spring.jar, spring-webmvc.jar, commons-logging.jar。其他jar包为hibernate相关jar包) 3 . 修改web....

ActiveMQ5.4.2+Spring2.5实现异步邮件

(1)applicationContext.xml 添加命名空间xmlns:amq及对应的schemaLocation

DWR3.0+Spring2.5实现Comet服务器到浏览器的消息推送

网上找到不少相关例子,不过大部分是dwr2的例子,效果一般,研究了一下dwr3.0相关内容,做了个DEMO,实现了向一个或多个精确目标推送内容。重点在于向ScriptSessionManager中加入...

Spring2.5学习2.3_如何注入基本类型

前面学习了如何注入依赖对象,现在学习一下如何注入基本类型。 PersonServiceBean.java package xjj.service.impl; import xjj.dao.Pe...
  • jeofey
  • jeofey
  • 2015年05月31日 14:57
  • 705

使用Spring2.5的Autowired实现注释型的IOC

 使用Spring2.5的新特性——Autowired可以实现快速的自动注入,而无需在xml文档里面添加bean的声明,大大减少了xml文档的维护。(偶喜欢这个功能,因为偶对xml不感冒)。     ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Spring2.5学习4.1_静态代理实现
举报原因:
原因补充:

(最多只允许输入30个字)