Java EE

Spring入门详解及案例

老子叫甜甜 提交于 2021-02-20 17:23:16
Spring浅入浅出——不吹牛逼不装逼 前言: 今天决定要开始总结框架了,虽然以前总结过两篇,但是思维是变化的,而且也没有什么规定说总结过的东西就不能再总结了,是吧。这次总结我命名为浅入浅出,主要在于理解框架核心,轻松愉快使用框架。 核心思想 我们都学了面向对象,在生活中,当人们需要一件东西时,第一反应就是找东西,例如想吃面包,现在有两种情况,第一种是没有面包店,第二种是有面包店。第一种情况就是我们之前一直遇到的情况,在没有面包店的情况下,最直观的做法可能就是你按照自己的口味制作面包,也就是一个面包需要主动制作,谁想吃了就自己New。而我主要说的是第二种情况,就是有面包店,你想吃面包的时候找到面包店,把自己的口味告诉店家,店家就可以给你做符合你口味的面包了。注意:你并没有制作面包,而是由店家制作,但是完全符合你的口味。 这是一个很生活的例子,大家都明白,但这里包含了Spring中很重要的思想——控制反转,就是把制作面包的主动权交给店家,面包就是对象,店家相当于一个大容器,你想要什么对象,就让大容器去给你生产,这就是控制反转思想。 再详细点,当某个Java对象(调用者,例如你)需要调用另一个Java对象(被调用者,即被依赖对象,例如面包)时,在传统编程模式下,调用者通常会采用“New 被调用者”的代码方式来创建对象(例如你自己制作面包)。这种方式会增加调用者与被调用者之间的耦合性

Spring-JPA中关于Entity继承的问题(上)

僤鯓⒐⒋嵵緔 提交于 2021-02-20 17:12:59
参考资料: https://developer.aliyun.com/article/312873 org.hibernate.WrongClassException:Object with [id=11] was not of the specified subclass: xxxx.entity(loaded object was of wrong class ... 这个错误其实是说,在构建当前的Entity1列表(LIST)的时候,发现该Entity所共用对象的另一个Entity2中,已经存在了id=11的对象,并且Entity1和Entity2的id=11的对象在结构上是不一样的,无法覆盖。 看到这个错误是不是有点蒙,像是在听天书的感觉?其实,这个Exception的本质是和JPA中hibernate的继承映射有关。 当前笔者的项目中,定义了BaseEntity,其中包含了code(编码),name(名称),elementcode(要素的tag)这些通用属性。然后,分别定义了Entity1和Entity2,且都集成自BaseEntity。Entity1和Entity2的的elementcode返回的内容不一样。举例子来描述的话,就相当于两组不同的字典要素,一个是桌子(Entity1,elementcode=桌子),一个是椅子(Entity2,elementcode=椅子)

SpringMVC入门详解及案例

徘徊边缘 提交于 2021-02-20 16:51:27
Spring MVC浅入浅出——不吹牛逼不装逼 前言 上文书说了Spring相关的知识,对Spring来了个浅入浅出,大家应该了解到,Spring在三层架构中主做Service层,那还有Web层,也就是Controller层,这个就由SpringMVC来解决了。SpringMVC是Web层的一个框架,它是Spring的组成部分,可以先看看下面这张图: SpringMVC工作原理 MVC模式在之前我已经写过博客了《 Web开发模式 》,学SpringMVC之前有必要先看一下MVC模式。 SpringMVC框架主要由DispatcherServlet、处理器映射、控制器、视图解析器、视图组成,其工作流程如下: 客户端请求提交到DispatcherServlet; 由DispatcherServlet控制器寻找一个或多个HandlerMapping,找到处理请求的Controller; DispatcherServlet将请求提交到Controller; Controller调用业务逻辑处理后返回ModelAndView; DispatcherServlet寻找一个或多个ViewResolver视图解析器,找到ModelAndView指定的视图; 视图负责将结果显示到客户端。 在SpringMVC工作流程中包含4个SpringMVC接口,即DispatcherServlet

spring boot 2.0.3+spring cloud (Finchley)9、 安全组件Spring Boot Security

∥☆過路亽.° 提交于 2021-02-20 08:38:02
官方文档 一、Spring Security介绍 Spring Security是Spring Resource社区的一个安全组件,Spring Security为JavaEE企业级开发提供了全面的安全防护。Spring Security采用“安全层”的概念,使每一层都尽可能安全,连续的安全层可以达到全面的防护。Spring Security可以在Controller层、Service层、DAO层等以加注解的方式来保护应用程序的安全。Spring Security提供了细粒度的权限控制,可以精细到每一个API接口、每一个业务的方法,或每一个操作数据库的DAO层的方法。Spring Security提供的是应用程序层的安全解决方案,一个系统的安全还需要考虑传输层和系统层的安全,如采用Https协议、服务器部署防火墙等。 使用Spring Security的一个重要原因是它对环境的无依赖性、低代码耦合性。Spring Security提供了数十个安全模块,模块与模块之间的耦合性低,模块之间可以自由组合来实现特定需求的安全功能。 在安全方面,有两个主要的领域,一是“认证”,即你是谁;二是“授权”,即你拥有什么权限,Spring Security的主要 目标就是在这两个领域。 JavaEE有另一个优秀的安全框架Apache Shiro,Apache Shiro在企业及的项目开发中十分受欢迎

介绍一款 API 敏捷开发工具

末鹿安然 提交于 2021-02-20 07:07:06
作者:棒锤 xie.infoq.cn/article/b5c3a339267e1351c6151b42a 初衷 用尽可能简单的方式,完成尽可能多的需求。通过约定的方式 实现统一的标准。告别加班,拒绝重复劳动,远离搬砖 特性 用于快速开发API接口。不再定义 Controller , Service , Dao , Mybatis , xml , Entity , VO 等对象和方法. 可视化界面,将入参自动封装到可执行的脚本上,支持所有关系性数据库SQL执行语句,非关系型 MONGODB 查询语句.欢迎扩展 完全基于springboot2.x 作为springboot项目的stater方式集成,无侵入性,新老项目都能快速集成 只需编写一行代码即可完成大部分的业务需求开发,使用难度级别(测试 or 运维)也可参与开发 在线动态编译,无需重启,即时生效,多数据源操作 版本控制,历史记录比对,回滚等功能 远程一键发布到线上环境 线上POSTMAN调试,保存POSTMAN信息或三方文档的自动生成,历史调用记录存储,回塑 代码提示,SQL提示,语法提示 用户管理控制,安全性控制,以及历史行为记录 经过多次项目验证,传统业务型开发,服务端效率能够提升3-5倍,前后端联调提升效率1倍,测试效率2倍提升 传统开发步骤: 增加一张表 创建实体对象,映射这张表 创建API入参VO 创建API出参VO

纯0基础Java自学 Java基础

萝らか妹 提交于 2021-02-19 17:42:45
纯0基础Java自学 Java基础 做Java开发,Java基础是最需要下功夫的一项,因为基础决定上层建筑,如果以后想要进阶却发现自己的基础不牢固,又要重新补习基础是一件很麻烦的事情,所以建议各位小伙伴在刚开始学习的时候就打好Java基础。 推荐一本书《JAVA核心技术 卷1》,入门书籍看这一本就够了,但是不用全部看完,把 数据类型、核心语法、面向对象、数组、集合、IO流、String/StringBuffer/StringBuilder、线程、并发、反射、泛型这些模块看完 就可以了,后面的Swing、applet等等就不需要看了。 当然如果你是零基础学习Java并理解力不是爆棚的话,我建议以视频学习为主。 如果是零基础普通人,看视频学习/看不懂源码/用百度/看中文博客来学习丢人。 ps:如果 看的视频讲师的语速不是特别快,建议倍速观看。 因为我是零基础,所以我在自学的时候是听的李明杰的《Java语言基础课》这个课程时间不算长。 我觉得完整听完可以比较扎实的掌握Java基础,当然了,如果想要彻底学会还是需要自己的运用。然后再回到第一步,看书或者继续学习课程。 我当时学习的时候是先看了一遍视频,然后又看了一遍书。毕竟我还是希望我的基础知识更加的扎实。 JavaWeb基础 学习好了Java基础,接下来就是JavaWeb基础。 JavaWeb是一系列技术的综合

一次完整http请求过程

旧城冷巷雨未停 提交于 2021-02-19 11:40:22
1)建立TCP连接(之前需要完成DNS的解析) 在HTTP工作开始之前,客户单首先通过网络与服务器建立连接,该连接是通过TCP来完成的, 该协议与IP协议共同构建Internet,即著名的 TCP/IP协议族,因此Internet又被称为TCP/IP网络,HTTP是比TCP更高层次的应用层析协议,根据规则,只有低层协议建立后,才能进行高层协议的连接,一次你,首先要建立TCP连接,一般TCP连接的端口号80; 2)客户端向服务器端发送请求命令 一旦建立TCP连接,客户端就会向服务器发送请求命令,例如 GET/SAMPLE/hello.jsp HTTP/1.1 请求方法+请求URI+HTTP协议版本 3)客户端发送请求头信息 客户端发送请命令之后,还要以头信息单点心事先服务器发一些别的额信息,之后客户端发送一空白行来通知服务器,它已经结束了盖头信息的发送; 4)服务器端应答 客户端向服务器发出请求后,服务器回应客户端的额响应,例如 HTTP/1.1 200 ok 协议的版本号+响应状态码+回复信息 5)服务器返回响应头信息 正如客户端会随同请求发送关于自身的信息一样,服务器也随同响应向用户发送关于他自己的数据及被请求的文档。 6)服务器向客户端发送数据 服务器向客户端发型头信息后,它好UI发送一个空白行来表示偷袭新的发送到此结束,接着,它以Content

SpringBoot项目新建遇到问题整理(一)

梦想与她 提交于 2021-02-19 11:04:02
1.新建了一个SpringBoot项目:只引用需要用到的spring boot相关的jar包,除此之外没有任何的配置 启动application.java报错: APPLICATION FAILED TO START *************************** Description: Cannot determine embedded database driver class for database type NONE Action: If you want an embedded database please put a supported one on the classpath. If you have database settings to be loaded from a particular profile you may need to active it (no profiles are currently active). --——————>原因:因为spring boot只要你在pom中引入了spring-boot-starter-data-jpa,他就会默认需要加载数据库相关的配置 你要是没有在配置文件中配置数据库相关信息,它会加载默认的配置(不存在的) 然后就报错了, 所以你要是要用数据库相关的东西 你就完善配置 不用数据库相关的东西

认识长轮询:配置中心是如何实现推送的?

别说谁变了你拦得住时间么 提交于 2021-02-19 10:42:25
一 前言 传统的静态配置方式想要修改某个配置时,必须重新启动一次应用,如果是数据库连接串的变更,那可能还容易接受一些,但如果变更的是一些运行时实时感知的配置,如某个功能项的开关,重启应用就显得有点大动干戈了。配置中心正是为了解决此类问题应运而生的,特别是在微服务架构体系中,更倾向于使用配置中心来统一管理配置。 配置中心最核心的能力就是配置的动态推送,常见的配置中心如 Nacos、Apollo 等都实现了这样的能力。在早期接触配置中心时,我就很好奇,配置中心是如何做到服务端感知配置变化实时推送给客户端的,在没有研究过配置中心的实现原理之前,我一度认为配置中心是通过长连接来做到配置推送的。事实上,目前比较流行的两款配置中心:Nacos 和 Apollo 恰恰都没有使用长连接,而是使用的长轮询。本文便是介绍一下长轮询这种听起来好像已经是上个世纪的技术,老戏新唱,看看能不能品出别样的韵味。文中会有代码示例,呈现一个简易的配置监听流程。 二 数据交互模式 众所周知,数据交互有两种模式:Push(推模式)和 Pull(拉模式)。 推模式指的是客户端与服务端建立好网络长连接,服务方有相关数据,直接通过长连接通道推送到客户端。其优点是及时,一旦有数据变更,客户端立马能感知到;另外对客户端来说逻辑简单,不需要关心有无数据这些逻辑处理。缺点是不知道客户端的数据消费能力,可能导致数据积压在客户端