Spring-(四)动态代理示例初认识
本文最后更新于:December 26, 2021 am
Spring 是目前主流的 Java Web 开发框架,是 Java 世界最为成功的框架。Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。该框架是一个轻量级的开源框架,具有很高的凝聚力和吸引力。Spring 框架不局限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何 Java 应用都可以从 Spring 中受益。Spring 框架还是一个超级粘合平台,除了自己提供功能外,还提供粘合其他技术和框架的能力。
目录 JDK动态代理 要求:JDK动态代理要求目标类必须实现接口。
someService.java
package com.tothefor.bao04.service;public interface someService { public void doA () ; public void doB () ; }
someServiceImpl.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 package com.tothefor.bao04.service.impl;import com.tothefor.bao04.service.someService;public class someServiceImpl implements someService { @Override public void doA () { System.out.println("调用doA方法。" ); } @Override public void doB () { System.out.println("调用doB方法。" ); } }
Utils.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 package com.tothefor.bao04.utils;import java.util.Date;public class Utils { public static void doTime () { System.out.println("当前时间为:" + new Date()); } public static void doLog () { System.out.println("打印调用日志函数。" ); } }
myInvocationHandler.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 package com.tothefor.bao04.handler;import com.tothefor.bao04.utils.Utils;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;public class myInvocationHandler implements InvocationHandler { private Object target; public myInvocationHandler (Object target) { this .target = target; } @Override public Object invoke (Object proxy, Method method, Object[] args) throws Throwable { System.out.println("method名称:" +method.getName()); Utils.doTime(); Object invoke = method.invoke(target, args); Utils.doLog(); return invoke; } }
测试类:
@Test public void test04 () { someService target = new someServiceImpl(); InvocationHandler handler = new myInvocationHandler(target); someService proxy = (someService) Proxy.newProxyInstance( target.getClass().getClassLoader(), target.getClass().getInterfaces(), handler); proxy.doA(); proxy.doB(); }