spring AOP (4) 基础知识-代理

这篇文章主要讲解java的基础知识--代理。

代理其实是一种设计模式,下面的讲解是参照<<Java编程思想>>的内容。

我们先举个简单的示例来阐述什么是代理。

假如我们有一个接口Interface。

package spring3.aop.aop2;

public interface Interface {

	public void do1();

	public void do2(String str);

}

 我们在定义一个真实的类Target,来实现我们的接口Interface

package spring3.aop.aop2;

public class Target implements Interface {

	@Override
	public void do1() {
		System.out.println("Target.do1()");
	}

	@Override
	public void do2(String str) {
		System.out.println("Target.do2(" + str + ")");
	}

}

 我们在写一个代理类Proxy,它有一个属性,来存放目标对象。

package spring3.aop.aop2;

public class Proxy implements Interface {

	private Interface target;

	public Proxy(Interface target) {
		this.target = target;
	}

	@Override
	public void do1() {
		System.out.println(" before Target.do1()");
		target.do1();
		System.out.println(" after Target.do1()");
	}

	@Override
	public void do2(String str) {
		System.out.println("before Target.do2(" + str + ")");
		target.do2(str);
		System.out.println("before Target.do2(" + str + ")");
	}
}

 我们来运行下,看看代理效果

package spring3.aop.aop2;

public class ProxyMain {

	public static void main(String[] args) {
		Interface target = new Target();
		target.do1();
		target.do2("test");
		
		Interface proxy = new Proxy(target);
		proxy.do1();
		proxy.do2("test");
	}
}

 结果:

Target.do1()
Target.do2(test)
 before Target.do1()
Target.do1()
 after Target.do1()
 before Target.do2(test)
Target.do2(test)
 before Target.do2(test)

 以上就是最初的代理,静态代理。

就是使用一个和被代理对象有相同接口的代理类,用户实际使用这个代理类对象来完成相应操作,而不是直接使用目标类对象。但是静态代理又弊端,需要代理一个接口,就需要创建一个代理类,增加了代码量。

怎么办呢?

等待看后续的java动态代理。自己也可以先研究下。

未完待续。。。

猜你喜欢

转载自xieyan30.iteye.com/blog/1844494