两种常用设计模式的研究----Spring框架的理解

##适配模式
–自己理解:通过springmvc理解 类适配
适配模式大抵是一种为方法做参数绑定的方式。
即我们已知servlet是实现HttpServlet接口,所以它具有request、response等数据的传输,所以利用这一点,让一个类继承我们的handler实例,同时又去实现HttpServlet,就可以实现此方法既有handler的数据处理功能,又具有httpservlet的参数数据传输。

代理模式

代理模式分为动态代理和静态代理两种
静态代理:
静态代理是一种由一个共同接口,来串联代理类和被代理类。从而实现实现旧功能而添加新功能的一种方式。所谓静态,即在编译时三个类已经被确定好。这种模式常用在对过去的复杂类的功能进行修改、再处理。

动态代理:
动态代理是指在程序运行过程中,将方法植入进行。&但个人感觉实际上并没有在java运行时植入&,此理论具体要参考java的反射机制和内省(即可以透过方法在程序运行当中,了解到一个类的内部全部信息/暂时理解/)。
此方法依靠的是invocationHandler类。
同静态代理模式一致,需要共同的接口,但是动态代理的实现,需要多两个类:功能类和invocationHandler类(处理器),通过实现invocationHandler,将新增功能和原始功能嫁接在一起。
//实现Invocation

public class StuInvocationHandler<T> implements InvocationHandler{
	T target;
	public StuInvocationHandler(T target) {
		this.target=target;
	}
	public Object invoke(Object proxy, Method method, Object[] arg) throws Throwable {
		System.out.println("代理执行"+method.getName()+"方法");
		TimeUntil.start();
		Object result=method.invoke(target, arg);
		TimeUntil.finish(method.getName());
		return result;
	}

//具体执行

	public static void main(String[] args) {
   	Person zhangsan=new Student("zhangsan");
   	InvocationHandler stuHandler=new StuInvocationHandler<>(zhangsan);
   	Person stuProxy=(Person)Proxy.newProxyInstance(Person.class.getClassLoader(), new Class[]{Person.class}, stuHandler);
   	stuProxy.say();
   }

反射的代码(简单的得到功能的原因,具体更深)
//功能A

public class A {
	public void foo(String name){
		System.out.println(name+",hello");
	}
}

//反射代码

public class Reflect {
	public static void main(String[] args) throws Exception {
		Class<?> clz=Class.forName("aboutReflection.A");
		Object o=clz.newInstance();
		Method m=clz.getMethod("foo", String.class);
		for(int i=0;i<16;i++){
			m.invoke(o, Integer.toString(i));
		}
	}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值