Spring AOP实现缓存

发布在 java, spring

AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善。OOP引入封装、继承、多态等概念来建立一种对象层次结构,用于模拟公共行为的一个集合。不过OOP允许开发者定义纵向的关系,但并不适合定义横向的关系,例如日志功能。日志代码往往横向地散布在所有对象层次中,而与它对应的对象的核心功能毫无关系对于其他类型的代码,如安全性、异常处理和透明的持续性也都是如此,这种散布在各处的无关的代码被称为横切(cross cutting),在OOP设计中,它导致了大量代码的重复,而不利于各个模块的重用。

AOP技术恰恰相反,它利用一种称为”横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为”Aspect”,即切面。所谓”切面”,简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。

阅读全文

spring boot整合websocket

发布在 java, spring

在spring boot项目中使用websocket,网上查阅了一些资料,记录一下以备查阅。

使用websocket有两种方式,一种是sockJs,一种是H5方式,个人感觉H5方式更加简单。无论使用哪种方式,都需要引入的POM依赖如下

1
2
3
4
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>

阅读全文

在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件。在Spring Cloud中,有分布式配置中心组件spring cloud config ,它支持配置服务放在配置服务的内存中(即本地),也支持放在远程Git仓库或svn中。在spring cloud config 组件中,分两个角色,一是config server,二是config client

阅读全文

spring cloud笔记-网关zuul

发布在 java, spring

在Spring Cloud微服务系统中,一种常见的负载均衡方式是,客户端的请求首先经过负载均衡(apache、Ngnix),再到达服务网关(zuul集群),然后再到具体的服。

Zuul的主要功能是路由转发和过滤器。路由功能是微服务的一部分,比如/api/user转发到到user服务,/api/shop转发到到shop服务。zuul默认和Ribbon结合实现了负载均衡的功能
阅读全文

在上一篇笔记-注册中心中,服务sample只是简单实现了eureka客户端,现在为它添加一个controller

1
2
3
4
5
6
7
8
9
10
11
@Controller
@RequestMapping("/")
public class TestController {
@ResponseBody
@RequestMapping("param")
public Object test(HttpServletRequest request){
Map params = HttpServletUtil.getRequestParameters(request);
params.put("msg","请求成功");
return params;
}
}

这个接口很简单,获取请求参数,在参数Map中加一个msg,然后再原样返回给请求方。

通常来说,请求方可以直接通过ip:port/param?key=value的形式访问sample,但是这样做就跟传统的web项目没区别了,注册中心也就失去了它本来的意义。
阅读全文

最近学习spring cloud,boot+cloud的形式用起来挺不错的,学习过程中试着搭建了一个完整的分布式微服务结构,这个结构由以下组件组成组成

  • eureka server:注册中心
  • config server:配置中心
  • gateway:网关
  • service:服务

spring cloud服务的注册与发现的理论网上一大堆,推荐几篇不错的系列博客

这些博客的写得相当不错,我学习的时候也大多参考这些博客,不过上面博客中的一些例子用的版本相对较老,这里贴出我使用的版本
阅读全文

最近接触spring boot,网上火了好一阵,一开始对这个并不感冒,个人也不是很喜欢将配置写进代码中,所以也就没有去研究它。最近一个项目需要用到spring boot,学习了各路大神的心得后,结合以前的springMVC+spring+mybatis流程,做了一个简单的转换和对比。spring boot这么火热是有道理的,虽然部分配置写进代码,但是非常集中,再也不用在几个配置文件中改来改去,没有一大坨xml配置,jar包运行简直爽。开发热部署极大地提高了开发效率。
阅读全文

springMVC实现多版本接口

发布在 java, spring

最近的一个需求,在现有的系统上实现同一接口的多版本访问,便于以后的接口升级,客户端不改变请求地址,在参数中传递一个version字段指定访问哪个版本的接口。

在前一篇博文 springMVC修改接口注册映射逻辑 中,用修改springMVC注册和映射接口的逻辑实现了该功能,但缺点也很明显,客户端传入的版本号必须在服务端存在,如传入v2.0,则服务端必须存在v2.0版本的接口,否则会抛出404,无法实现降级调用最新接口或默认接口的功能。
阅读全文

最近的一个需求,在现有的系统上实现同一接口的多版本访问,便于以后的接口升级,客户端不改变请求地址,在参数中传递一个version字段指定访问哪个版本的接口。

因为现系统已经在运行,所以改造不能影响已在使用的接口,最开始的设想是建立一个新接口,然后用拦截器拦截请求,组装请求地址+版本号,重定向到新接口,如下:
阅读全文

  • 第 1 页 共 1 页

忘语

热爱生活,享受code


一名虔诚的程序猿