spring
文章平均质量分 73
qq_duhai
好记性不如烂笔头...
展开
-
DeferredResult
当一个请求到达API接口,如果该API接口的return返回值是DeferredResult,在没有超时或者DeferredResult对象设置setResult时,接口不会返回,但是Servlet容器线程会结束,DeferredResult另起线程来进行结果处理(即这种操作提升了),并setResult,如此以来这个请求不会占用服务连接池太久,如果超时或设置setResult,接口会立即返回。给人一种异步处理业务,但是却同步返回的感觉。转载 2023-07-10 15:43:30 · 178 阅读 · 0 评论 -
ThreadPoolTaskScheduler轻量级多线程定时任务框架
ThreadPoolTaskScheduler 内部方法非常丰富,本文实现的是一种corn表达式,周期执行schedule(Runnable task, Trigger trigger) corn表达式,周期执行schedule(Runnable task, Date startTime) 定时执行定时周期间隔时间执行。间隔时间单位 TimeUnit.MILLISECONDSscheduleAtFixedRate(Runnable task, long period) 间隔时间执行。单位毫秒。转载 2023-07-05 15:39:22 · 846 阅读 · 0 评论 -
ApplicationListener和@EventListener
/事件和发布还是使用上边的@ComponentSystem.out.println("注解监听器1:" + event.getMsg());事件触发:com.njit.personal.unannotation.MyTestEvent注解监听器1:我来了!非注解监听器:我来了!转载 2023-07-05 10:33:10 · 203 阅读 · 0 评论 -
将Bean放入Spring容器中的五种方式
将bean放入Spring容器中有哪些方式?我们知道平时在开发中使用Spring的时候,都是将对象交由Spring去管理,那么将一个对象加入到Spring容器中,有哪些方式呢,下面我就来总结一下。转载 2022-12-30 09:14:24 · 272 阅读 · 0 评论 -
Spring Framework中基于注解的Bean装配原理
注解的使用大大简化了配置的过程,也更能表现代码与配置之间的直接关系,但同时也失去了部分配置统一管理的能力,对代码也有一定的侵入性这似乎并不影响开发者对注解使用的高涨热情,使用注解还是XML进行配置开发并没有统一的定论,以何种方式进行开发还是需要看具体的项目适合什么Spring Framework提供了众多配置类注解,但不知道各位在使用过程中是否有类似于如下的疑问 @Service、@Repository等注解本身还被@Component修饰,为什么要这样?有什么作用? // Servic转载 2021-09-09 15:41:56 · 408 阅读 · 0 评论 -
SpringBoot深入理解 -- @AliasFor注解的作用
本文解析SpringBoot中重要注解@AliasFor注解的作用,对于理解SpringBoot和后面阅读SpringBoot源码都很有帮助。我们都知道@SpringBootApplication注解,等于@EnableAutoConfiguration,@ComponentScan,@SpringBootConfiguration三个注解的组合。Spring是怎样将三个注解的整合到一个注解的呢?这就要说到@AliasFor了AliasFor可以定义一个注解中的两个属性互为别名。如pub转载 2021-09-09 15:16:59 · 969 阅读 · 0 评论 -
ClassPathScanningCandidateComponentProvider
ClassPathScanningCandidateComponentProvider是Spring提供的工具,可以按自定义的类型,查找classpath下符合要求的class文件。// 需要扫描的路径 private static final String scanPackage = "com.dh.node"; /** * 启动就开始扫描到map */ @PostConstruct public void init() { discoverComponents(); }.转载 2021-09-09 14:43:22 · 3162 阅读 · 0 评论 -
理解 Spring ApplicationListener
ApplicationContext事件机制是观察者设计模式的实现,通过ApplicationEvent类和ApplicationListener接口,可以实现ApplicationContext事件处理。如果容器中有一个ApplicationListener Bean,每当ApplicationContext发布ApplicationEvent时,ApplicationListener Bean将自动被触发。这种事件机制都必须需要程序显示的触发。其中spring有一些内置的事件,当完成某种操作..转载 2021-08-24 09:58:17 · 1613 阅读 · 0 评论 -
如何正确控制springboot中bean的加载顺序总结
1.为什么需要控制加载顺序springboot遵从约定大于配置的原则,极大程度的解决了配置繁琐的问题。在此基础上,又提供了spi机制,用spring.factories可以完成一个小组件的自动装配功能。在一般业务场景,可能你不大关心一个bean是如何被注册进spring容器的。只需要把需要注册进容器的bean声明为@Component即可,spring会自动扫描到这个Bean完成初始化并加载到spring上下文容器。而当你在项目启动时需要提前做一个业务的初始化工作时,或者你正在开发某个中间件需要转载 2021-08-23 16:54:14 · 1988 阅读 · 0 评论 -
@PostConstruct 注解不生效的问题
1、从Java EE5规范开始,Servlet中增加了两个影响Servlet生命周期的注解,@PostConstruct和@PreDestroy,这两个注解被用来修饰一个非静态的void()方法。写法有如下两种方式:@PostConstructpublic void someMethod(){}或者public @PostConstruct void someMethod(){}被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次原创 2021-08-23 12:02:14 · 17531 阅读 · 0 评论 -
彻头彻尾理解单例模式与多线程
摘要: 本文首先概述了单例模式产生动机,揭示了单例模式的本质和应用场景。紧接着,我们给出了单例模式在单线程环境下的两种经典实现:饿汉式和懒汉式,但是饿汉式是线程安全的,而懒汉式是非线程安全的。在多线程环境下,我们特别介绍了五种方式来在多线程环境下创建线程安全的单例,使用synchronized方法、synchronized块、静态内部类、双重检查模式和ThreadLocal实现懒汉式单例,并总结出实现效率高且线程安全的单例所需要注意的事项。...转载 2021-06-08 14:15:31 · 522 阅读 · 0 评论 -
单例和多线程
单例模式是常见的两种实现方式是懒汉模式(类加载时不初始化;在类加载时,不创建实例,因此类加载速度快,但运行时获取对象的速度慢)和饿汉模式(在类加载时就完成了初始化;所以类加载较慢,但获取对象的速度快)。1、懒汉模式这种方式是最基本的实现方式,这种实现最大的问题就是不支持多线程。因为没有加锁 synchronized,线程不安全,在多线程不能正常工作。优化:加锁2、饿汉模式描述:这种方式比较常用,但容易产生垃圾对象。优点:没有加锁,执行效率会提高。缺点:类加载时就初始化,.转载 2021-06-08 11:13:49 · 156 阅读 · 0 评论 -
事务与并发问题处理
今天在开发过程中遇到了一个问题: @Override public void updateDetail(final DetailDTO dto) { if (logger.isInfoEnabled()) { logger.info("##### updateDetail开始 ##### "); } // TODO 先删除后新增 logger.info("##### 删除节点列表和连线列表开始 ##### "); // 删除节点列表 nodeDao.del原创 2021-05-25 15:17:26 · 856 阅读 · 1 评论 -
JPA的事务注解@Transactional使用总结
项目中使用了Spring的@Transactional注解,有时候会出现一些奇怪的问题,例如:1)明明抛了异常却不回滚?2)嵌套事务执行报错?很多的问题都是没有全面了解@Transactional的正确使用而导致的,下面一段代码就可以让你完全明白@Transactional到底该怎么用。直接上代码,请细细品味@Servicepublic class SysConfigService { @Autowired private SysConfigRepository s原创 2021-05-25 11:47:48 · 2955 阅读 · 0 评论 -
@Autowired注解的几种方式 --依赖注入
@Autowired注入成员变量,利用field反射注入,要等类加载完了才注入bean;@Autowired注入构造方法中,利用构造器注入,有先后依赖关系;setter属性注入,setter代码冗长,不能将属性设置为final。private A a; @Autowired public c(A a) { this.a= a; }和@Autowiredprivate A a;1、@autowired写在变量上的注入要等到类完全加载完,才转载 2021-05-20 14:46:36 · 2891 阅读 · 0 评论 -
SpringBoot @Autowired的两种注入方式
Autowired有两种注入方式 by type by name默认使用的是byType的方式向Bean里面注入相应的Bean。例如:@Autowiredprivate UserService userService;这段代码会在初始化的时候,在spring容器中寻找一个类型为UserService的bean实体注入,关联到userService的引入上。但是如果UserService这个接口存在多个实现类的时候,就会在spring注入的时候报错,例如:publi...转载 2021-05-20 14:40:41 · 3557 阅读 · 0 评论 -
ClassPathScanningCandidateComponentProvider
ClassPathScanningCandidateComponentProvider是Spring提供的工具,可以按自定义的类型,查找classpath下符合要求的class文件。例子1:public static void main(String[] args) throws ClassNotFoundException { // true:默认TypeFilter生效,这种模式会查询出许多不符合你要求的class名 // false:关闭默认TypeFilter C原创 2021-05-11 09:59:32 · 413 阅读 · 0 评论 -
在spring中通过Autowired注解巧妙实现策略模式
1.策略接口package org.apel.bowen.controller; import java.math.BigDecimal;/** * 计算价格的接口 * @author Bowin * */public interface Strategy { /** * 计算价格 * @return */ public BigDecimal calculatePrice();}2.实现接口package org.apel.bowen转载 2021-05-11 09:53:33 · 628 阅读 · 0 评论 -
Spring的事件机制详解
事件传播ApplicationContext基于Observer模式(java.util包中有对应实现),提供了针对Bean的事件传播功能。通过Application. publishEvent方法,我们可以将事件通知系统内所有的ApplicationListener。事件传播的一个典型应用是,当Bean中的操作发生异常(如数据库连接失败),则通过事件传播机制通知异常监听器进行处理。在笔者的一个项目中,就曾经借助事件机制,较好的实现了当系统异常时在监视终端上报警,同时发送报警SMS至管理员手机的功能。.转载 2021-04-09 14:51:12 · 626 阅读 · 0 评论 -
spring容器启动完成执行之SmartLifecycle
前言有时候我们业务需要在spring容器bean全部加载完成后执行,如分布式服务注册eureka、nacos等框架在服务启动后希望通知注册中心当前服务已启动,在服务停止时停止下线,这个时候就可以使用spring提供的SmartLifecycle使用直接上代码@Componentpublic class StartSmartLifecycle implements SmartLifecycle { private boolean running = false; @Ove转载 2021-04-09 14:47:21 · 368 阅读 · 0 评论 -
spring生命周期回调(加载之后和注销之前做一些操作)
有关Spring的生命周期回调在官网https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-factory-lifecycle有详细讲解。spring的生命周期回调分为Bean的生命周期回调和容器的生命周期回调。1 Bean的生命周期回调1.1 Bean的生命周期初始化回调1.1.1 @PostConstruct注解@Component@Scope(Co转载 2021-04-09 11:44:14 · 374 阅读 · 0 评论 -
spring注解之@PreDestroy的实现原理(spring优雅的退出)
一、引言在开发中我们如果要在关闭spring容器后释放一些资源,通常的做法有如下几种:1.在方法上加上@PreDestroy注解2.实现DisposableBean接口,实现其destroy方法比较常用的是第一种实现,因为其足够简便。下面就来分析一下它的实现原理,看它是在哪一个环节被触发的。二、开始分析我们先移步到CommonAnnotationBeanPostProcessor这个类中,看如下一段代码: public CommonAnnotationBeanPostProcess转载 2021-04-08 17:24:32 · 3102 阅读 · 0 评论 -
kafka:broker、client、spring-kafka版本间的关系
broker、client:(Kafka双向兼容)在Kafka 0.10.2.0之前,Kafka服务器端和客户端版本之间的兼容性是“单向”的,即高版本的broker可以处理低版本client的请求。反过来,低版本的broker不能处理高版本client的请求。由于升级client要远比升级broker简单得多,因此这个限制给很多用户带来了麻烦,甚至有很多人都不愿意去升级broker版本——毕竟无downtime的情况下正确升级Kafka服务器是个不小的挑战。自0.10.2.0版本开始,社区...原创 2020-09-24 17:20:21 · 9084 阅读 · 1 评论 -
Spring AOP——Spring 中面向切面编程
一、AOP——另一种编程思想1.1 什么是 AOPAOP (Aspect Orient Programming),直译过来就是 面向切面编程。AOP 是一种编程思想,是面向对象编程(OOP)的一种补充。面向对象编程将程序抽象成各个层次的对象,而面向切面编程是将程序抽象成各个切面。从《Spring实战(第4版)》图书中扒了一张图:从该图可以很形象地看出,所谓切面,相当于应用对象间的横切点,我们可以将其单独抽象为单独的模块。1.2 为什么需要 AOP想象下面的场景,开发中在多个模块间有某段转载 2020-09-14 16:03:30 · 210 阅读 · 0 评论 -
Spring @Conditional注解 详细讲解及示例
前言:@Conditional是Spring4新提供的注解,它的作用是按照一定的条件进行判断,满足条件给容器注册bean。@Conditional的定义: //此注解可以标注在类和方法上 @Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface Conditional { .转载 2020-09-14 09:32:08 · 991 阅读 · 0 评论 -
FactoryBean(创建复杂的Bean)
在Spring中有两种类型的bean,一种是普通Bean,一种是工厂Bean,即FactoryBean。FactoryBean跟普通bean不同,其返回的对象不是指定类的一个实例,而是该FactoryBean的getObject方法所返回的对象。创建出的对象是否属于单例由isSingleton中的返回决定。1. 为什么使用FactoryBean一般情况下,Spring通过反射机制,利用...转载 2019-12-10 10:43:02 · 506 阅读 · 0 评论 -
Quartz与Spring集成 Job如何自动注入Spring容器托管的对象
测试环境 Spring3 M2 quartz-2.1.7 http://www.cnblogs.com/daxin/p/3608320.html我们要达到这样的效果public class CancelUnpaidOrderTask implements Job { @Autowired private AppOrderService orderService;转载 2017-10-09 10:48:29 · 392 阅读 · 0 评论 -
RequestBodyAdvice和ResponseBodyAdvice
RequestBodyAdvice和ResponseBodyAdvice这是spring 4.2新加的两个接口,这两个接口有些什么作用呢?先看看这两个接口RequestBodyAdvicepublic interface RequestBodyAdvice { boolean supports(MethodParameter methodParameter, Type ta...转载 2017-06-14 14:30:52 · 19734 阅读 · 12 评论 -
Spring4.1新特性——Spring MVC增强
Spring4.1新特性——综述Spring4.1新特性——Spring核心部分及其他Spring4.1新特性——Spring缓存框架增强Spring4.1新特性——异步调用和事件机制的异常处理Spring4.1新特性——数据库集成测试脚本初始化Spring4.1新特性——Spring MVC增强Spring4.1新特性——页面自动化测试框架Spring MVC Test转载 2017-06-14 14:28:20 · 344 阅读 · 0 评论 -
Spring4.1新特性——Spring缓存框架增强
Spring4.1新特性——综述Spring4.1新特性——Spring核心部分及其他Spring4.1新特性——Spring缓存框架增强Spring4.1新特性——异步调用和事件机制的异常处理Spring4.1新特性——数据库集成测试脚本初始化Spring4.1新特性——Spring MVC增强Spring4.1新特性——页面自动化测试框架Spring MVC Test转载 2017-06-14 14:14:22 · 269 阅读 · 0 评论 -
Spring4.1新特性——Spring核心部分及其他
Spring 4.1对核心部分没有很亮点的增强,主要还是一些改进和增强;本文将一一道来。 1、DirectFieldAccessorSpring内部大量使用BeanWrapper进行属性取值赋值(setter/getter),不过到目前为止没有简单的办法去获取对象字段值;之前都是通过ReflectionUtils获取Field然后进行操作;Spring 4.1提供了DirectFiel转载 2017-06-14 14:11:33 · 436 阅读 · 0 评论 -
Spring AOP
一、AOP 概念 Joinpoint:它定义在哪里加入你的逻辑功能,对于Spring AOP,Jointpoint指的就是Method。 Advice:特定的Jointpoint处运行的代码,对于Spring AOP 来讲,有Before advice、AfterreturningAdvice、ThrowAdvice、AroundAdvice(MethodInteceptor)等。转载 2016-09-13 09:30:21 · 185 阅读 · 0 评论 -
RestTemplate发送HTTP请求
https://blog.csdn.net/shanjuzhe/article/details/78909614Spring 中的 RestTemplate 可以很方便的发送HTTP请求,来看看如何使用RestTemplate 发送 GET 请求RestAPI - 通过@RequestParam接收参数的GET接口@RequestMapping(value = "accounts/f...转载 2019-03-12 09:45:43 · 227 阅读 · 0 评论 -
Spring中的各种Utils(一):PropertiesLoaderUtils
这个工具类主要是针对Properties文件的加载操作,在Spring对.properties文件和.factories文件的操作都有使用到。先来简单看看这个类提供的有用方法:Properties loadProperties(Resource resource) throws IOException:从一个资源文件加载Properties; Properties loadPropert...转载 2019-03-13 10:53:36 · 1491 阅读 · 1 评论 -
RestTemplate接口请求总结
最近做自动化测试,使用RestTemplate调用接口,碰到了各种场景下,什么都不带的,带cookie的,带header的,带参数的,需要获取返回状态码的,先在这稍微总结下,不定期更新一、获取接口返回状态码使用getForEntity调用接口,返回结果调用getStatusCode()方法取得HttpStatus对象,然后就可以调用里面的各种方法来满足你的需求了//判断接口返回是...转载 2019-03-13 15:00:25 · 1867 阅读 · 0 评论 -
RestTemplate提交表单数据的三种方法
https://blog.csdn.net/yiifaa/article/details/77939282在REST接口的设计中,利用RestTemplate进行接口测试是种常见的方法,但在使用过程中,由于其方法参数众多,很多同学又混淆了表单提交与Payload提交方式的差别,而且接口设计与传统的浏览器使用的提交方式又有差异,经常出现各种各样的错误,如405错误,或者根本就得不到提交的数据,错...转载 2019-03-13 15:28:51 · 611 阅读 · 0 评论 -
SpringIOC实现原理(自动注入Bean)使用反射
利用Java代码实现Spring内部IOC实现原理 就三步第一步:解析XML第二步:获取每个Bean的Class第三步:利用反射对Bean的私有属性赋值public class ClassPathXmlApplicationContext { private String xmlPath; public ClassPathXmlApplication...转载 2019-07-03 14:00:20 · 1188 阅读 · 0 评论 -
使用Shade-Plugin正确地最小化Uber Jar
我使用Maven-Shade-Plugin创建一个可运行的Uber-jar,可以通过使用以下方式最小化jar的大小:<configuration> <minimizeJar>true</minimizeJar></configuration>但是这个功能没有考虑log4j.properties文件中声明的类。因此,例如 org...转载 2019-07-03 17:24:15 · 1350 阅读 · 0 评论 -
maven-shade-plugin介绍及使用
基本功能maven-shade-plugin提供了两大基本功能: 将依赖的jar包打包到当前jar包(常规打包是不会将所依赖jar包打进来的); 对依赖的jar包进行重命名(用于类的隔离);Goalsmaven-shade-plugin 只存在一个goal shade:shade,需要将其绑定到 phase package 上,使用框架如下:<projec...转载 2019-07-04 10:43:12 · 3554 阅读 · 0 评论 -
Spring 4.1新特性-综述
Spring 4.1目前已经发布RC1版本,而GA版本预计在14年9月中旬发布;其中有部分内容直接借鉴自Spring Boot,而Spring Boot从目前趋势来看已经是Spring的顶级项目;另外也提供了页面自动化测试框架Spring MVC Test HtmlUnit,和Spring MVC Test一样先是独立项目,如果发展态势很好,会最终合并到Spring Framework中。转载 2017-06-14 14:03:07 · 460 阅读 · 0 评论