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

手机搭建个人网站广州网络设计

手机搭建个人网站,广州网络设计,星凯网站建设,vps wordpress 卸载目录 一、前言二、案例1 代码2 自定义代理类【静态代理】2.1 一个接口多个实现#xff0c;到底注入哪个依赖呢#xff1f;2.1.1 Primary注解2.1.2 Resource注解#xff08;指定name属性#xff09;2.1.3 Qualifier注解 2.2 面向接口编程2.3 如果没接口咋办呢#xff1f;2.… 目录 一、前言二、案例1 代码2 自定义代理类【静态代理】2.1 一个接口多个实现到底注入哪个依赖呢2.1.1 Primary注解2.1.2 Resource注解指定name属性2.1.3 Qualifier注解 2.2 面向接口编程2.3 如果没接口咋办呢2.3.1 示例2.3.2 继承 3 动态代理 一、前言 在【对AOP的理解】中提到过代理模式。本篇文章进一步谈谈我对代理模式的理解。 二、案例 1 代码 RestController RequestMapping(/user) public class UserController {Resourceprivate UserService userService;PostMapping(/login)public UserVO login(RequestBody LoginRequest loginRequest) {UserDO userDO userService.login(loginRequest.getUsername(), loginRequest.getPassword());return UserVO.builder().username(userDO.getUsername()).password(userDO.getPassword()).build();} }public interface UserService {UserDO login(String username, String password); }Service public class UserServiceImpl implements UserService {Resourceprivate LoginProcess loginProcess;Overridepublic UserDO login(String username, String password) {return loginProcess.login(username, password);} }Component public class LoginProcess {public UserDO login(String username, String password) {try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}return new UserDO().setUsername(forrest).setPassword(123456);} }我们想知道“登录”过程耗费的时间即loginProcess.login(username, password);耗费的时间。我们希望通过自定义代理类来实现。 2 自定义代理类【静态代理】 Slf4j Service public class UserProxyServiceImpl implements UserService {Resourceprivate UserServiceImpl userServiceImpl;Overridepublic UserDO login(String username, String password) {long startTimestamp System.currentTimeMillis();UserDO userDO userServiceImpl.login(username, password);log.info(login cost {} ms, System.currentTimeMillis() - startTimestamp);return userDO;} }如果这么写很显然启动时会报错No qualifying bean of type structure.proxy.example3.service.UserService available: expected single matching bean but found 2: userProxyServiceImpl,userServiceImpl RestController RequestMapping(/user) public class UserController {Resourceprivate UserService userService;... }UserService是接口有两个实现类Spring不知道到底要注入哪个bean因此报错了。 2.1 一个接口多个实现到底注入哪个依赖呢 在Spring框架中当存在多个相同类型的bean时可以通过三种主要方式来指定注入哪一个bean使用Primary注解、Resouce注解指定name属性和Qualifier注解。 2.1.1 Primary注解 Slf4j Service Primary public class UserProxyServiceImpl implements UserService {... }2.1.2 Resource注解指定name属性 RestController RequestMapping(/user) public class UserController {Resource(name userProxyServiceImpl)private UserService userService;... }IDEA的友好提示 妈妈再也不担心我注不对bean了:) 2.1.3 Qualifier注解 Resource(name “userProxyServiceImpl”)相当于 Autowired Qualifier(userProxyServiceImpl)RestController RequestMapping(/user) public class UserController {AutowiredQualifier(userProxyServiceImpl)private UserService userService;... }同样IDEA提供了友好的提示 2.2 面向接口编程 我们通过改变使用的bean从UserServiceImpl换成了UserProxyServiceImpl就新增了一些逻辑例如记录“登录”消耗的时间。对调用者完全是无感的。 这就是通过接口来解耦了调用方和实现方调用方–接口–实现方。 2.3 如果没接口咋办呢 2.3.1 示例 RestController RequestMapping(/user) public class UserController {Resourceprivate UserServiceImpl userService;PostMapping(/login)public UserVO login(RequestBody LoginRequest loginRequest) {UserDO userDO userService.login(loginRequest.getUsername(), loginRequest.getPassword());return UserVO.builder().username(userDO.getUsername()).password(userDO.getPassword()).build();} }Service public class UserServiceImpl {Resourceprivate LoginProcess loginProcess;public UserDO login(String username, String password) {return loginProcess.login(username, password);} }2.3.2 继承 RestController RequestMapping(/user) public class UserController { // Resource // private UserServiceImpl userService;Resourceprivate UserProxyServiceImpl userService;... }Slf4j Service public class UserProxyServiceImpl extends UserServiceImpl {Resourceprivate UserServiceImpl userServiceImpl;Overridepublic UserDO login(String username, String password) {long startTimestamp System.currentTimeMillis();UserDO userDO userServiceImpl.login(username, password);log.info(login cost {} ms, System.currentTimeMillis() - startTimestamp);return userDO;} }很显然所有用到UserServiceImpl的地方都要换成UserProxyServiceImpl。麻烦啊因此如果依赖的实现方可能变化一定要面向接口编程啊 如果第三方没提供接口也要自定义一个接口来解耦调用方和实现方 3 动态代理 详见对AOP的理解
http://www.w-s-a.com/news/416656/

相关文章:

  • 如何把动态图发网站做头像网页设计实训报告小结
  • 做简历用的网站wordpress版权说明
  • 网站关键词有哪些网站新闻前置审批
  • 怎么自己注册网站义乌做公司网站
  • 做哪种网站赚钱苏州住房城乡建设部网站
  • 镇江做网站学编程学哪一种比较好
  • 华美天一建筑公司网站赚钱做任务的网站有哪些
  • asp网站打开速度慢家乡网页设计教程
  • 网站 设计 深圳书店网站的建设
  • 北京网络营销推广培训哪家好南宁软件优化网站建设
  • flash网站引导页仓库管理系统源码
  • 济南网站制作公司排名营销型网站管理系统
  • 公司网站设计要多少钱用什么做网站的访问量统计
  • 湖北省住房和城乡建设厅门户网站沈阳网络平台推广公司
  • 河南平台网站建设公司网站如何提高转化率
  • 网站及推广wordpress 分享主题
  • 房产网站有哪些如何自己建一个微网站
  • 青岛市黄岛区城市建设局网站手机域名访问网站怎么进入
  • 网站模板 双语河南省建设人才信息网官网
  • 网站建设备案优化之看邹城网站开发
  • 网站方案书图书馆网站建设公司
  • 公司取名网免费版在线网站优化公司
  • dw怎么做秋季运动会网站九江集团网站建设
  • 响应式网站建设服务商wordpress 非小工具形式 微博秀
  • 网站安全检测漏洞扫描风险等级分布建设一个网站步骤
  • 摄影网站的意义开发企业小程序公司
  • 龙岩网站设计招聘信息网上免费logo设计
  • 高端定制网站开发建站教程详解网站共享备案可以申请支付接口
  • 做房产网站接不到电话企业推广宣传方式
  • 网站建设费用不用摊销下一页p30