文章 40
评论 38
浏览 109299
从 SpringMVC 转为使用 SpringBoot —— 手把手带你使用 Intellij IDEA 最快速地搭建 SpringBoot+MyBatis(无 XML)+Thymeleaf

从 SpringMVC 转为使用 SpringBoot —— 手把手带你使用 Intellij IDEA 最快速地搭建 SpringBoot+MyBatis(无 XML)+Thymeleaf

序 最近打算从SpringMVC的学习过渡到SpringBoot的学习,一直听说SpringBoot十分方便,便想探个究竟。 提示 篇幅可能较长,但这可能是最全最简单的一篇教程了,请抱着不厌其烦的态度去学习。无论你有没有SpringMVC的搭建基础,你都可以跟着本教程将SpringBoot正常驱动起来。 逐步重启测试能保证某段配置过程不出问题,请不要忽略掉文中多次要求重启的要求。 新建项目 File -> New - >Project... 选择Spring Initlalizr Spring Initializr -> 在右侧Project SDK选择你配置的SDK(推荐JDK1.8) -> Next 如果你的IDEA中没有"Spring Initializr",说明你的IDEA是社区版(Community Editon)的,请更换版本为ULTIMATE。 配置项目属性 修改: Group:团队名,通常填写为com.xxx Artifact:包名,通常填写该项目的名称 Name:项目名称 Description:项目描述 其它选项会自动....

一个最简单的实例理解Semaphore在Java中的作用

一个最简单的实例理解Semaphore在Java中的作用

前言 阅读本篇文章,你需要先理解以下知识: * Java基础知识 * Thread多线程(点我跳转) * 击鼓传花的玩法 你有没有和小伙伴们玩过击鼓传花这个游戏?多个人同时只有“一朵花”的情况下,只有一个人最后会“中奖”。Semaphore就像击鼓手一样控制着这朵“花”究竟“花落谁家”。 当然了,Semaphore不只支持调度一朵花。 它在Java中常被用于线程的调度,当有多个线程访问同一个资源时,我们可以让线程尝试从Semaphore获取一个许可证,如果该线程尝试访问的对象正在被其它线程占用,该线程将无法获取许可证,即循环等待重新获取。 Semaphore并不难理解,请不要被下面一大串代码所劝退,认真试验下去。 拷贝 等等! 在拷贝之前你要知道,下面的代码有3中测试模式,将test的值改为1/2/3会开启不同的代码段,它们的难度是不一样的。 好的。现在打开你的IDE,新建一个项目或类,将类命名为SemaphoreTest,并将下面的代码替换到你的项目中: import java.util.concurrent.Semaphore; import java.util.concurren....

一个实例理解Java Runnable多线程用处与用法

一个实例理解Java Runnable多线程用处与用法

前言 阅读本篇文章,你需要先理解以下知识: * Thread多线程(点我跳转) * 接口(interface)是什么 (点我跳转) 回顾 在阅读上一篇“Java Thread多线程”后,相信你学会了使用extends来调用,但它是有缺陷的。 extends的缺点 Java的每个类只能使用extends继承一个类,如果在继承了Thread类后又想继承其它类,这是不可能的。 所以,有没有办法让Thread不继承而拥有线程属性呢?有的。 使用implements 在Java中,implements用于继承接口。每个类可以implements的接口是没有数量限制的,所以使用implements可以让该类避免继承被占用。 拷贝 使用你的IDE新建一个项目或类并命名为RunnableDemo,然后将下面的代码替换进去: public class RunnableDemo { public static void main(String[] args) { runnableThread1 runnableThread1 = new runnableThread1(); Thread thread =....

实例带你获取多线程Thread的返回值之 (贰) - Callable配合线程池返回数据

实例带你获取多线程Thread的返回值之 (贰) - Callable配合线程池返回数据

前言 阅读本篇文章,你需要先理解以下知识: * 第一章:Callable的使用(点我跳转) * 多线程Thread的基本使用 (点我跳转) * 线程池基本知识 (点我跳转) * extends和implements * 重写Override * try catch错误处理 * Java基础知识 回顾 在上一章(点我跳转)我们了解了Callable的基本使用,本次我们将把Callable运用到线程池(点我跳转)中。 拷贝 用你的IDE新建一个项目或类,并将类命名为TestThreadPool,然后将下面的代码替换到类中: import java.util.ArrayList; import java.util.List; import java.util.concurrent.*; public class TestThreadPool { ExecutorService executorService = Executors.newFixedThreadPool(2); public static void main(String[] args) { //实例化类 TestThread....

实例带你学会简单的Java Thread多线程

实例带你学会简单的Java Thread多线程

前言 在学习本教程之前,你对以下知识有所了解: * Java的类、方法、变量 * extend的用法和用处 * Java实例化 本篇教程难度:★☆☆☆☆ 多线程是计算机的灵魂,目的是为了同时做很多事情。 你可能不知道,早期的操作系统一次只能运行一个程序,如果要切换程序,必须关闭当前程序,早期的iPhone便是如此。 拷贝 废话少说,在你的IDE中新建一个Java项目或类用于存放本次多线程的代码。 我建议将类命名为:ThreadDemo,这样在拷贝代码后不需要修改类名。 复制下方代码到你的类中: import java.text.SimpleDateFormat; import java.util.Date; public class ThreadDemo { public static void main(String[] args) { //实例化当前类 ThreadDemo threadDemo = new ThreadDemo(); //调用动态类 threadDemo.run(); } public void run() { ThreadTest1 threadTest1 = ....

实例带你获取多线程Thread的返回值之 (壹) - Callable的运行

实例带你获取多线程Thread的返回值之 (壹) - Callable的运行

前言 阅读本篇文章,你需要先理解以下知识: * 多线程Thread的基本使用 (点我跳转) * extends和implements * 重写Override * try catch错误处理 * Java基础知识 回顾 回顾一下我们学过的Thread多线程,是继承了一个Thread类,然后调用run()方法来执行定义的类。 那么问题来了,有时候我们需要多线程传回一个计算的值给我们,Callable就很好地解决了我们的需求。 拷贝 在你的IDE中新建一个项目或一个类,并将类命名为CallableDemo,然后拷贝下面这些代码: import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask; public class CallableDemo { public static void main(String[] args) { //实例化当前类 CallableDemo callableDemo = ne....

实例带你搞懂Java多线程&&线程池之(贰):简单的线程池应用

实例带你搞懂Java多线程&&线程池之(贰):简单的线程池应用

前言 这篇文章的代码非常简单,代码后的实验要求一定不要忽略,你一定能理解线程池的算法。 如没看过第一章,请先点我跳转 套用代码 打开你的IDE,并新建一个类,将下方代码拷贝: import java.lang.reflect.Executable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class TestThreadPool { ExecutorService executorService = Executors.newFixedThreadPool(2); public static void main(String[] args) { //实例化类 TestThreadPool testThreadPool = new TestThreadPool(); //调用动态方法 testThreadPool.threadPool(); } public void threadPool() { Thread1 thread1 = new Thr....

实例带你搞懂Java多线程&&线程池之(壹):线程池与多线程的关系和区别

实例带你搞懂Java多线程&&线程池之(壹):线程池与多线程的关系和区别

前言 在此之前,你需要先对以下知识有所了解: * Thread多线程 (点我跳转) * Runnable多线程 (点我跳转) * 接口基础知识 (点我跳转) 相信大家对多线程的概念不是很陌生,当我们需要让JVM虚拟机在后台运行一个方法时,我们常常会用到多线程。 线程池就相当于一个Thread调度系统,能让向线程池中提交的线程进行限制、阻塞和排队处理,让所有线程在你的指引下进行“最大化”的工作。 创建一个线程实例并运行测试 这里使用Runnable多线程接口进行演示。 打开你的IDE,并新建一个项目或类,将它命名为TestThreadPool,并将下面的代码替换进去: public class TestThreadPool { public static void main(String[] args) { //实例化类 TestThreadPool testThreadPool = new TestThreadPool(); //调用动态方法 testThreadPool.threadPool(); } public void threadPool() { Thread1 thre....

WebFilter-SpringBoot过滤器注解实例讲解

WebFilter-SpringBoot过滤器注解实例讲解

简介 Filter也称之为过滤器,它是Servlet技术中最让人激动的技术,Web开发人员通过Filter技术,对Web服务器管理的所有Web资源:例如JSP,Servlet,静态图片文件或静态HTML文件等进行拦截,从而实现一些特殊的功能,例如实现URL级别的权限访问控制,过滤敏感词汇,压缩响应信息等一些高级功能。 可以在web.xml中配置过滤器的生效URL地址,它会过滤指定的URL地址经过的数据”/*”代表过滤所有的URL地址请求数据。 这样做的好处有什么呢,可以直接配置过滤所有的请求编码都设置为UTF-8,在response的时候也可以将响应编码也设置为UTF-8,这样就省去了写相同代码的步骤,优化代码。 Filter链 在一个Web应用中,可以开发编写多个Filter,这些Filter组合起来称之为一个Filter链。 Web服务器根据Filter在web.xml文件中的注册顺序,决定先调用哪个Filter,当第一个Filter的dofilter方法被调用时,web服务器会创建一个代表filter链的FilterChain对象传递给该方法,在doFilter()方法中,开发人....

一个实例带你理解JavaBean

一个实例带你理解JavaBean

在我理解看来,JavaBean与上文讲的接口有着相似的地方: * 用于包装并传递一些特定的数据(如字符串、整数、类等等) * 用于实现方法的传递 * ······ 在我们获取用户上传的的数据时,如果只是用一个个变量去接收的话,就会造成重复代码的书写,并且代码多且繁杂,如果想要在其他地方使用这个变量就会很不好调用;假设需要用户上传的数据较多,每一次调用时都需要进行大量重复代码的书写,极大地影响了我们开发的效率,如果我们有一个可以去接收这些数据的类或者容器就可以实现代码的“高内聚、低耦合”。 这个容器就被称为JavaBean,JavaBean里的属性全都使用private修饰可以保证只能通过JavaBean里的getter方法和setter方法去设置或者获得类里的属性,当然setter和getter方法都是由public修饰,确保其他地方能正常使用这些属性 JavaBean的设计规则: JavaBean是一个公共类 JavaBean类具有一个公共无参的构造方法 JavaBean所有的属性定义为私有 JavaBean中,需要对每个属性都提供两个公共方法,set方法和get方法 定义JavaB....

一个实例理解Java的接口(interface)用处与用法

一个实例理解Java的接口(interface)用处与用法

最近突然想到一个问题:Runnable是如何允许我自定义执行内容而进行多线程处理的? 首先看使用Runnable创建多线程的方法: Runnable runnable = new Runnable() { @Override public void run() { System.out.println("hello~"); } }; Thread thread = new Thread(runnable); thread.run(); 我们可以看到首先创建了一个Runnable接口实例,Runnable接口源代码如下: package java.lang; /* * @author Arthur van Hoff * @see java.lang.Thread * @see java.util.concurrent.Callable * @since JDK1.0 */ public interface Runnable { public abstract void run(); } 可以看到的是在Runnable接口中只有一个run方法待用户定义。 当我们重写Runnable的....

死钻技术 | 绝不抄袭