当前位置: 首页 > news >正文

桂林北站是哪个区开一个网站需要多少钱

桂林北站是哪个区,开一个网站需要多少钱,网站备案成功后怎么,男女做那个那个的视频网站准备案例 需求 模拟某企业用户管理业务,需包含用户登录,用户删除,用户查询功能,并要统计每个功能的耗时。 分析与实现 定义一个UserService表示用户业务接口,规定必须完成用户登录,用户删除&#xff0c…

准备案例

需求

模拟某企业用户管理业务,需包含用户登录,用户删除,用户查询功能,并要统计每个功能的耗时。

分析与实现

定义一个UserService表示用户业务接口,规定必须完成用户登录,用户删除,用户查询功能。

/**模拟用户业务功能*/
public interface UserService {String login(String loginName , String passWord) ;void selectUsers();boolean deleteUsers();void updateUsers();
}

定义一个实现类UserServiceImpl实现UserService,并完成相关功能,且统计每个功能的耗时。 

public class UserServiceImpl implements UserService{@Overridepublic String login(String loginName, String passWord)  {long startTimer = System .currentTimeMillis();try {Thread.sleep(1000);if("admin".equals(loginName) && "1234".equals(passWord)) {return "success";}return "登录名和密码可能有毛病";} catch (Exception e) {e.printStackTrace();return "error";}finally{long endTimer = System.currentTimeMillis();System.out.println("login方法耗时:" + (endTimer - startTimer) / 1000.0 + "s");}}@Overridepublic void selectUsers() {long startTimer = System .currentTimeMillis();System.out.println("查询了100个用户数据!");try {Thread.sleep(2000);} catch (Exception e) {e.printStackTrace();}finally{long endTimer = System.currentTimeMillis();System.out.println("selectUsers方法耗时:" + (endTimer - startTimer) / 1000.0 + "s");}}@Overridepublic boolean deleteUsers() {long startTimer = System .currentTimeMillis();try {System.out.println("删除100个用户数据!");Thread.sleep(500);return true;} catch (Exception e) {e.printStackTrace();return false;}finally{long endTimer = System.currentTimeMillis();System.out.println("deleteUsers方法耗时:" + (endTimer - startTimer) / 1000.0 + "s");}}@Overridepublic void updateUsers() {long startTimer = System .currentTimeMillis();try {System.out.println("修改100个用户数据!");Thread.sleep(2500);} catch (Exception e) {e.printStackTrace();}finally{long endTimer = System.currentTimeMillis();System.out.println("updateUsers方法耗时:" + (endTimer - startTimer) / 1000.0 + "s");}}
}

 定义测试类,创建实现类对象,调用方法。

public class Test {public static void main(String[] args) {UserService userService = new UserServiceImpl();System.out.println(userService.login("admin", "1234"));System.out.println(userService.deleteUsers());userService.selectUsers();userService.updateUsers();}
}

提出问题

业务对象的的每个方法都要进行性能统计,存在大量重复的代码。

使用动态代理解决问题

动态代理

代理就是被代理者没有能力或者不愿意去完成某件事情,需要找个人代替自己去完成这件事,动态代理就是用来对业务功能(方法)进行代理的。

关键步骤

1.必须有接口,实现类要实现接口(代理通常是基于接口实现的)。

2.创建一个实现类的对象,该对象为业务对象,紧接着为业务对象做一个代理对象。

代理过程

当我们要对login方法进行耗时统计时,先进入代理对象,然后统计开始时间,接着真正执行登录方法,最后统计结束时间,如下图所示:

 代码

接口不用变,修改实现类和测试类,增加一个代理工具类,如下:

public class UserServiceImpl implements UserService{@Overridepublic String login(String loginName, String passWord)  {try {Thread.sleep(1000);} catch (Exception e) {e.printStackTrace();}if("admin".equals(loginName) && "1234".equals(passWord)) {return "success";}return "登录名和密码可能有毛病";}@Overridepublic void selectUsers() {System.out.println("查询了100个用户数据!");try {Thread.sleep(2000);} catch (Exception e) {e.printStackTrace();}}@Overridepublic boolean deleteUsers() {try {System.out.println("删除100个用户数据!");Thread.sleep(500);return true;} catch (Exception e) {e.printStackTrace();return false;}}@Overridepublic void updateUsers() {try {System.out.println("修改100个用户数据!");Thread.sleep(2500);} catch (Exception e) {e.printStackTrace();}}
}
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
/**public static Object newProxyInstance(ClassLoader loader,  Class<?>[] interfaces, InvocationHandler h)参数一:类加载器,负责加载代理类到内存中使用。参数二:获取被代理对象实现的全部接口。代理要为全部接口的全部方法进行代理参数三:代理的核心处理逻辑*/
public class ProxyUtil {/**生成业务对象的代理对象。* @param obj* @return*/public static <T> T  getProxy(T obj) {// 返回了一个代理对象了return (T)Proxy.newProxyInstance(obj.getClass().getClassLoader(),obj.getClass().getInterfaces(),new InvocationHandler() {@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {// 参数一:代理对象本身。一般不管// 参数二:正在被代理的方法// 参数三:被代理方法,应该传入的参数long startTimer = System .currentTimeMillis();// 马上触发方法的真正执行。(触发真正的业务功能)Object result = method.invoke(obj, args);long endTimer = System.currentTimeMillis();System.out.println(method.getName() + "方法耗时:" + (endTimer - startTimer) / 1000.0 + "s");// 把业务功能方法执行的结果返回给调用者return result;}});}
}
public class Test {public static void main(String[] args) {// 1、把业务对象,直接做成一个代理对象返回,代理对象的类型也是 UserService类型UserService userService = ProxyUtil.getProxy(new UserServiceImpl());System.out.println(userService.login("admin", "1234"));System.out.println(userService.deleteUsers());userService.selectUsers();userService.updateUsers(); // 走代理}
}

动态代理的优点

非常的灵活,支持任意接口类型的实现类对象做代理,也可以直接为接口本身做代理。

可以为被代理对象的所有方法做代理。

可以在不改变方法源码的情况下,实现对方法功能的增强。

不仅简化了编程工作、提高了软件系统的可扩展性,同时也提高了开发效率。

http://www.yidumall.com/news/31194.html

相关文章:

  • 万州做网站多少钱ip域名解析查询
  • 做网站后台系统的规范如何免费做网站网页
  • 淘宝网站建设 推广 上海百度搜索排行榜前十名
  • 做住宿的有几个网站深圳网络广告推广公司
  • 外贸建站源码青岛网站优化公司
  • 如何建立个人免费网站北京seoqq群
  • 要如何关闭公司网站 撤销备案流量购买网站
  • 新乡个人网站建设哪家好重庆网站网络推广
  • 学做日本料理的网站南宁市优化网站公司
  • 自己做的网站怎么发布上营销软文代写
  • e wordpress rest api重庆seo优化公司
  • 手机上如何建立wordpressseo 优化 工具
  • 博物馆 网站 建设潍坊网站建设
  • 网站建设公司 六安本周时事新闻概要10条
  • 小公司做网站东莞疫情最新消息通知
  • 二手网站哪些做的比较好公关公司是干嘛的
  • 商业设计网站推荐长沙靠谱seo优化价格
  • 网站链接跳转如何做什么软件可以免费发广告
  • 网站客户运营怎样做企业推广
  • 基于云服务器的网站开发网络防御中心
  • 三水网站制作公司淘宝seo对什么内容优化
  • 网站做支付借口多少钱网络营销专业是干什么的
  • 公安局备案网站名称互联网营销平台
  • 物联网网站的建设和维护百度搜索入口
  • 焦作网站建设设计百度热搜榜排行
  • 怎么做网站扫描北京seo产品
  • 怎么看网站用什么代码做的百度首页登录入口
  • 自己搭建个人网站的注意事项搜索排名影响因素
  • szfob外贸论坛网站网站设计公司哪家专业
  • wordpress中文视频插件下载地址seo学徒招聘