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

wordpress要不要放网站地图做阿里巴巴网站公司

wordpress要不要放网站地图,做阿里巴巴网站公司,运营公司,网页设计与网站建设心得体会目录 一、前言二、案例1 代码2 自定义代理类【静态代理】2.1 一个接口多个实现,到底注入哪个依赖呢?2.1.1 Primary注解2.1.2 Resource注解(指定name属性)2.1.3 Qualifier注解 2.2 面向接口编程2.3 如果没接口咋办呢?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 {@Autowired@Qualifier("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.yayakq.cn/news/192535/

相关文章:

  • 秦皇岛做网站的公司哪家好wordpress标题字体样式
  • 商务网站建设实训报告沈阳的网站制作公司
  • 二维码生成器网站cad制图培训
  • 社交网站先做pc站可以吗网站运营管理方案
  • 网站定制论坛网站后缀ga
  • 做论坛网站看什么书甘肃手机版建站系统哪个好
  • 企业网站的建设论文365网站
  • asp网站ftp入侵织梦网络设计工作室网站模板
  • 做网站的英文编辑h5可以做网站么
  • 陶瓷刀具网站策划书红叶网站建设方案
  • 认证网站所有权要添加代码wordpress页面列表
  • 新建网站的缺点网站建设前期需要准备什么资料
  • 网站关键词seo怎么做河南省建筑资质查询
  • 网站设计与制作教程1网站深圳
  • 贵阳做网站电话新媒体营销期末试卷及答案
  • 从化建网站科技与生活
  • 做统计的网站吗厦门人才网官网招聘信息网
  • 最便宜的免费建站建设集团公司
  • 怎么用安卓机顶盒做网站服务器成都有哪些网站建设的公司
  • 做网站地图邮什么好处遵义网站
  • 重庆建设部网站官网工商网站如何做实名
  • 手机网站建设价格低义乌市住房和城乡建设局网站
  • 交友平台网站建设wordpress 站点维护
  • 泰兴网站建设公司义乌义亭招工做网站养猪工作
  • 网站建设怎么设置多语言怎样免费申请永久域名
  • 北京制作网站的基本流程网站首页怎么制作过程
  • 太原经济型网站建设价格网站推广策划书范文
  • 网站建设网页设计师做网站需要人员
  • 工作室 网站经营性备案wordpress 多站点共享
  • 青岛网站关键字优化中企动力300官网