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

网站设计开发的难点佛山专业建站公司

网站设计开发的难点,佛山专业建站公司,学校资源网站建设方案,企业建设网站的案例目录 一、前言二、案例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.zqtcl.cn/news/857061/

相关文章:

  • 广州网站优化渠道木门网站模板
  • 手机网站菜单设计wordpress加联系方式
  • 网站管理助手怎么使用多种郑州网站建设
  • 汉中网站建设费用外贸网站服务商
  • 苏宿工业园区网站建设成功案例色流网站如何做
  • 北沙滩网站建设公司电子商务网站建设管理论文
  • 公司备案证查询网站查询系统网页设计html代码大全及含义
  • 成都开发网站建设做网站一般会出现的问题
  • 企业网站设计布局方式如何在社交网站上做视频推广方案
  • 惠城网站建设服务做1688网站需要懂英语吗
  • 请人做网站要多少钱搜索引擎优化概述
  • 郑州中森网站建设免费网站app生成软件
  • 做诚信通网站seo新手快速入门
  • 做网站怎么去找客户带会员中心WordPress免费主题
  • 网站建设资费安平县护栏网站建设
  • 做视频网站侵权吗个体户网站备案
  • 苏州姑苏区建设局网站智慧团建登录官网手机版
  • 如何搭建一个视频网站广告制作方案
  • 网站策划ps苏州建站公司速找苏州聚尚网络
  • 网站备案 关闭客户制作网站时的问题
  • 项目网站分析推荐做ppt照片的网站
  • wordpress注明网站网站建设需要什么手续
  • 厦门过路费网站福建省建设执业资格注册中心网站
  • c 网站开发案例详解手机网站返回顶部代码
  • 济南微网站建设图书馆评估定级关于网站建设标准
  • flash型网站宝塔面板做网站绑定域名
  • 建设网站的策划书门户网站 流量
  • 佛山高端网站建设便宜自适应网站建设
  • 网络营销创意案例桂林seo公司推荐23火星
  • 网站开发知识产权归属问题wordpress会计模板下载