continue、break和标签

发布在 java

在任何迭代的主体部分都可以使用continue和break控制循环的流程,其中,break用于强行退出循环,不在执行循环中剩余的语句。continue则停止当前的迭代,然后退回循环起始处,开始下一次迭代。

在很多编程语言中,存在goto关键字,其含义是“如条件A成立,则跳到这里,否则跳到那里”。goto语句是在源码级上的跳转,若程序总是从一个地方跳到另外一个地方,程序的流程控制将很难识别,在大部分情况下不推荐使用goto,但是在极少情况下,goto是控制流程的极佳手段。

java中没有goto,但是java中提供了同样的机制:标签。大部分情况下我们都是直接使用continue或break控制循环,continue和break可以和标签一起使用,从而达到goto的效果。

阅读全文

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>

阅读全文

java笔记-类加载

发布在 java

Class文件由类装载器装载后,在JVM中将形成一份描述Class结构的元信息对象,通过该元信息对象可以获知Class的结构信息:如构造函数,属性和方法等,Java允许用户借由这个Class相关的元信息对象间接调用Class对象的功能。

阅读全文

说明

使用maven搭建maven仓库,找了网上的一些方法,踩了写坑,鼓捣了大半天终于弄好了,特此记录备忘。
网上基本上有两种方法,但本质上都是一样的,一种是将工程编译到本地,再将本地编译好的jar等文件上传到GitHub。另一种是在pom文件中配置插件,将编译上传使用插件完成。

创建GitHub仓库

在GitHub上创建一个仓库作为个人的maven仓库,以后自己编译后的jar都可以发布到该仓库中,我建立的仓库是maven-repo。
阅读全文

在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件。在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包运行简直爽。开发热部署极大地提高了开发效率。
阅读全文

忘语

热爱生活,享受code


一名虔诚的程序猿