spring框架

SpringBoot 单元测试利器——Mockito

孤者浪人 提交于 2020-02-08 20:20:49
Mockito 是一种 Java mock 框架,他主要是用来做 mock 测试的,他可以模拟任何 Spring 管理的 bean、模拟方法的返回值、模拟抛出异常...等,在了解 Mockito 的具体用法之前,得先了解什麽是 mock 测试 1. 什么是 mock 测试? mock 测试就是在测试过程中,创建一个假的对象,避免你为了测试一个方法,却要自行构建整个 bean 的依赖链 像是以下这张图,类 A 需要调用类 B 和类 C,而类 B 和类 C 又需要调用其他类如 D、E、F 等,假设类 D 是一个外部服务,那就会很难测,因为你的返回结果会直接的受外部服务影响,导致你的单元测试可能今天会过、但明天就过不了了 而当我们引入 mock 测试时,就可以创建一个假的对象,替换掉真实的 bean B 和 C,这样在调用B、C的方法时,实际上就会去调用这个假的 mock 对象的方法,而我们就可以自己设定这个 mock 对象的参数和期望结果,让我们可以专注在测试当前的类 A,而不会受到其他的外部服务影响,这样测试效率就能提高很多 2. Mockito 简介 说完了 mock 测试的概念,接下来我们进入到今天的主题,Mockito Mockito 是一种 Java mock 框架,他主要就是用来做 mock 测试的,他可以模拟任何 Spring 管理的 bean、模拟方法的返回值

Spring学习笔记03-JdbcTemplate

前提是你 提交于 2020-02-08 18:16:17
Spring 文章目录 Spring 什么是JdbcTemplate JdbcTemplate对象的创建 JdbcTemplate的增删改查操作 关于查询操作 在Dao层直接使用JdbcTemplate 在Dao层对象继承JdbcDaoSupport类 什么是JdbcTemplate JdbcTemplate 是Spring框架中提供的一个对象,对原始的 JDBC API 进行简单封装,其用法与 DBUtils 类似。 JdbcTemplate对象的创建 配置数据源 JdbcTemplate 对象在执行sql语句时也需要一个数据源,这个数据源可以使用 C3P0 或者 DBCP ,也可以使用Spring的内置数据源 DriverManagerDataSource. 使用Spring内置的数据源 DriverManagerDataSource. 。在 bean.xml 里面配置 < ! -- 配置数据源 -- > < bean id = "dataSource" class = "org.springframework.jdbc.datasource.DriverManagerDataSource" > < property name = "driverClassName" value = "com.mysql.jdbc.Driver" > < / property > <

Spring

青春壹個敷衍的年華 提交于 2020-02-08 16:59:53
Spring 一、概述: 以下概述内容拷自w3cschool Spring 是最受欢迎的企业级 Java 应用程序开发框架,数以百万的来自世界各地的开发人员使用 Spring 框架来创建性能好、易于测试、可重用的代码。 Spring 框架是一个开源的 Java 平台,它最初是由 Rod Johnson 编写的,并且于 2003 年 6 月首次在 Apache 2.0 许可下发布。 Spring 是轻量级的框架,其基础版本只有 2 MB 左右的大小。 Spring 框架的核心特性是可以用于开发任何 Java 应用程序,但是在 Java EE 平台上构建 web 应用程序是需要扩展的。 Spring 框架的目标是使 J2EE 开发变得更容易使用,通过启用基于 POJO 编程模型来促进良好的编程实践。 两大重点: 1.依赖注入(DI) Spring 最认同的技术是控制反转的依赖注入(DI)模式。控制反转(IoC)是一个通用的概念,它可以用许多不同的方式去表达,依赖注入仅仅是控制反转的一个具体的例子。 当编写一个复杂的 Java 应用程序时,应用程序类应该尽可能的独立于其他的 Java 类来增加这些类可重用可能性,当进行单元测试时,可以使它们独立于其他类进行测试。依赖注入(或者有时被称为配线)有助于将这些类粘合在一起,并且在同一时间让它们保持独立。 到底什么是依赖注入

Java面试题—中级(中)

半腔热情 提交于 2020-02-08 10:41:47
什么是线程死锁?死锁如何产生?如何避免线程死锁? 死锁的介绍: 线程死锁是指由于两个或者多个线程互相持有对方所需要的资源,导致这些线程处于等待状态,无法前往执行。当线程进入对象的synchronized代码块时,便占有了资源,直到它退出该代码块或者调用wait方法,才释放资源,在此期间,其他线程将不能进入该代码块。当线程互相持有对方所需要的资源时,会互相等待对方释放资源,如果线程都不主动释放所占有的资源,将产生死锁。 死锁的产生的一些特定条件: 1、互斥条件:进程对于所分配到的资源具有排它性,即一个资源只能被一个进程占用,直到被该进程释放 。 2、请求和保持条件:一个进程因请求被占用资源而发生阻塞时,对已获得的资源保持不放。 3、不剥夺条件:任何一个资源在没被该进程释放之前,任何其他进程都无法对他剥夺占用。 4、循环等待条件:当发生死锁时,所等待的进程必定会形成一个环路(类似于死循环),造成永久阻塞。 如何避免: 1、加锁顺序: 当多个线程需要相同的一些锁,但是按照不同的顺序加锁,死锁就很容易发生。如果能确保所有的线程都是按照相同的顺序获得锁,那么死锁就不会发生。当然这种方式需要你事先知道所有可能会用到的锁,然而总有些时候是无法预知的。 2、加锁时限: 加上一个超时时间,若一个线程没有在给定的时限内成功获得所有需要的锁,则会进行回退并释放所有已经获得的锁

Java面试题——中级

一曲冷凌霜 提交于 2020-02-08 10:40:23
什么是线程死锁?死锁如何产生?如何避免线程死锁? 死锁的介绍: 线程死锁是指由于两个或者多个线程互相持有对方所需要的资源,导致这些线程处于等待状态,无法前往执行。当线程进入对象的synchronized代码块时,便占有了资源,直到它退出该代码块或者调用wait方法,才释放资源,在此期间,其他线程将不能进入该代码块。当线程互相持有对方所需要的资源时,会互相等待对方释放资源,如果线程都不主动释放所占有的资源,将产生死锁。 死锁的产生的一些特定条件: 1、互斥条件:进程对于所分配到的资源具有排它性,即一个资源只能被一个进程占用,直到被该进程释放 。 2、请求和保持条件:一个进程因请求被占用资源而发生阻塞时,对已获得的资源保持不放。 3、不剥夺条件:任何一个资源在没被该进程释放之前,任何其他进程都无法对他剥夺占用。 4、循环等待条件:当发生死锁时,所等待的进程必定会形成一个环路(类似于死循环),造成永久阻塞。 如何避免: 1、加锁顺序: 当多个线程需要相同的一些锁,但是按照不同的顺序加锁,死锁就很容易发生。如果能确保所有的线程都是按照相同的顺序获得锁,那么死锁就不会发生。当然这种方式需要你事先知道所有可能会用到的锁,然而总有些时候是无法预知的。 2、加锁时限: 加上一个超时时间,若一个线程没有在给定的时限内成功获得所有需要的锁,则会进行回退并释放所有已经获得的锁

我为什么创作《Spring boot 实战权威指南——基础篇》?

守給你的承諾、 提交于 2020-02-08 06:18:45
前言 Java的各种开发框架发展了很多年,影响了一代又一代的开发人员,无论是程序员,还是架构师,使用这些框架开发不到万人规模的企业应用或者开发1分钟千万访问量的互联网电商系统都面临着两方面的挑战。 一方面,要快速开发出系统,这就要求使用的开发框架尽量简单,无论是新手老手都能快速上手,快速完成页面渲染,数据库访问等常用技术。也要求开发框架能尽量多的集成第三方工具,以便随时调取。更希望在开发调试过程中,能够方便代码更改后快速重启。 另外一方面,当系统模块增加,用户使用量增加,面对这样的挑战,系统必须拆分成为小微系统甚至是微服务,程序员和架构师当然不希望换掉已有的开发框架,希望由小而美的系统能平稳过渡到大而强的分布式系统。 环顾当前Java开源世界中的流行技术框架,能同时满足快速开发和分布式系统架构的框架,当属群众基础最好,功能最全,基于Spring技术的Spring Boot框架。 这几年来,企业应用的开发框架都渐渐使用Spring Boot 2作为基础,以我的开发经历来看,在写作本书第一版的时候,公司一开始是拒绝使用Spring Boot 的,而坚持使用Spring,后来也是在调研后同意采用Spring Boot并取得了很好效果。 如果你搜索关于Spring 的开发“脚手架”,你会发现这些“脚手架”已经转为以SpringBoot 2为基础的开发框架

综合使用spring cloud技术实现微服务应用

岁酱吖の 提交于 2020-02-08 04:09:43
  在之前的章节,我们已经实现了配置服务器、注册服务器、微服务服务端,实现了服务注册与发现。这一章将实现微服务的客户端,以及联调、实现整个spring cloud框架核心应用。   本文属于《7天学会spring cloud系列》之五,涉及到的项目包括:   开源项目: http://git.oschina.net/zhou666/spring-cloud-7simple cloud-config-server:配置服务器 cloud-eureka-server:eureka注册服务器 cloud-simple-service:一个使用mybatis的数据库应用,服务端 cloud-simple-ui:webui客户端   我们先来看看如何实现webui客户端。在spring boot中,已经不推荐使用jsp,所以你如果使用jsp来实现webui端,将会很麻烦。这可能跟现在的开发主流偏重移动端有关,跟微服务有关,跟整个时代当前的技术需求有关。单纯以html来作为客户端,有很多好处,比如更利于使用高速缓存;使后台服务无状态话,更利于处理高并发;更利于页面作为服务,小服务组合成大服务等。   我们首选来创建webui应用,参考git cloud-simple-ui工程:    这个应用包括前端html页面,还包括一个后台controller浅层。这是一个前端应用

Spring IOP 没用

烈酒焚心 提交于 2020-02-08 01:11:17
Spring提供了很多轻量级应用开发实践的工具集合,这些工具集以接口、抽象类、或工具类的形式存在于Spring中。通过使用这些工具集,可以实现应用程序与各种开源技术及框架间的友好整合。比如有关jdbc封装的数据访问工具Spring JDBC,有关编写单元测试的spring test包以及spring-mock,有关访问动态脚本语言的Spring Script,另外还有发送邮件的工具Spring Mail、日程及任务处理工具Spring scheduling等。 可以这么说,大多数企业级应用开发中经常涉及到的一些通用的问题,都可以通过Spring提供的一些实用工具包轻松解决 依赖注入的三种方式:(1)接口注入(2)Construct注入(3)Setter注入 控制反转(IoC)与依赖注入(DI)是同一个概念,引入IOC的目的:(1)脱开、降低类之间的耦合;(2)倡导面向接口编程、实施依赖倒换原则; (3)提高系统可插入、可测试、可修改等特性。 具体做法:(1)将bean之间的依赖关系尽可能地抓换为关联关系; (2)将对具体类的关联尽可能地转换为对Java interface的关联,而不是与具体的服务对象相关联; (3)Bean实例具体关联相关Java interface的哪个实现类的实例,在配置信息的元数据中描述; (4)由IoC组件(或称容器)根据配置信息,实例化具体bean类

Spring MVC + Spring + MyBatis 框架整合

有些话、适合烂在心里 提交于 2020-02-08 00:38:48
本文介绍使用SSM框架开发web项目Demo. 一、创建一个web-Poject项目   1.导入相关jar文件至lib下。 “相关jar文件” --提取密码 oraw   2.修改web.xml文件 <?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <display-name></display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <!-- 加载spring容器 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> <

mybatis spring 框架整合

允我心安 提交于 2020-02-08 00:19:52
driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/test user=LF password=LF <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www