spring原理

quartz多任务调度+spring 实现

白昼怎懂夜的黑 提交于 2020-02-25 10:36:21
一.Quartz的学习简述   客官,不要急,请看完下面的内容...   代码可以直接拷贝使用,本文是编写2个定时方法来实现的,如果想要执行1个,删除另1个即可。但是想要知道执行原理请看最后的原理分析 <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.2.2</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>4.2.2.RELEASE</version> </dependency> 二.执行任务类 1 package com.quartz; 2 3 import java.util.Date; 4 5 /** 6 *className : QuartzTest 7 *description : 定时任务test 8 *@date : 2017年12月5日 9 */ 10 public class QuartzTest { 11 //要执行的方法1 12 public void run1(){ 13 System.out

Spring Boot自动化配置原理

时间秒杀一切 提交于 2020-02-24 12:40:28
Spring Boot自动化配置原理依赖于 @Conditional 注解来实现: @Conditional是Spring4提供的一个新特性用于根据条件来控制Bean的创建行为。 我们从大家熟知的Spring Boot 的启动类开始 @SpringBootApplication public class DemoApplication { public static void main ( String [ ] args ) { SpringApplication . run ( DemoApplication . class , args ) ; } } @SpringBootApplication 注释,我们可以先从它开始分析,查看源码后可以发现它是一个包含许多注解的组合注解。 @Target ( { ElementType . TYPE } ) @Retention ( RetentionPolicy . RUNTIME ) @Documented @Inherited @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan ( excludeFilters = { @Filter ( type = FilterType . CUSTOM , classes = { TypeExcludeFilter

Spring的ApplicationEvent

為{幸葍}努か 提交于 2020-02-20 14:18:12
最近项目用到了observer观察者模式: event,listener是observer模式一种体现,这里我们介绍ApplicationEvent的使用。 一.PropertyAddedEvent继承ApplicationEvent 二.监听类PropertyEventHandler BookingEventsListener 需要实现ApplicationListener 并重写onApplicationEvent方法 ***。ApplicationListener带泛型,如果泛型参数为BookingCreatedEvent,则表示只监听BookingCreatedEvent类型的事件,如果泛型参数为ApplicationEvent ,则表示监听所有类型的事件。***另外可以用@Component来注册组件,这样就不需要在spring的配置文件中指定了。 触发要实现ApplicationContextAware,用于引入ApplicationContext,由于bookingService也 是spring组件,所以在系统启动的时候,ApplicationContext已经注入。也可以用如下方式直接注入 ApplicationContext。 三.触发event 原理: 首先说说spring的IOC容器初始化过程,首先Spring会定位BeanDefinition资源文件

[享学Netflix] 三、Apache Commons Configuration2.x全新的事件-监听机制

拟墨画扇 提交于 2020-02-18 19:16:38
写好代码是个人素养,不是老板要求,更不是为了秀给同事看 –> 返回专栏总目录 <– 代码下载地址: https://github.com/f641385712/netflix-learning 目录 前言 正文 Event ConfigurationEvent ConfigurationErrorEvent ReloadingEvent ConfigurationBuilderEvent ConfigurationBuilderResultCreatedEvent EventType EventListener AutoSaveListener ReloadingBuilderSupportListener EventListenerRegistrationData EventListenerList 使用示例 使用场景 总结 声明 前言 前面文章重点介绍了 Apache Commons Configuration1.x 的使用以及原理,作为2013就已经停更的技术,本确实没有太大必要再去学它,但就因为Netflix一直还依赖它,所以这就变成了有必要。 然而作为当下的主流的2.x版本,自然也不能忽略。它几乎完全重写了1.x的代码,所以自然是不向下兼容的,并且因为包名都不一样,所以 2.x和1.x是可以共存的 。 由于在实际使用中,那是 100% 推荐使用2.x版本

Spring Boot 热部署 devtools模块

强颜欢笑 提交于 2020-02-15 13:00:14
devtools模块详解 devtools模块,是为开发者服务的一个模块。主要的功能就是代码修改后一般在5秒之内就会自动重新加载至服务器,相当于restart成功。 简单原理 在发现代码有更改之后,自动重新启动应用,但是其速度比手动停止后再启动还要快些,更快这里指的不是节省出来的手工操作的时间。 底层原理:双类加载器机制 一个Base ClassLoader加载器,用于加载不会改变的第三方依赖的jar; 另一个Restart ClassLoader加载器,用于加载自己编写的类; 执行流程:当应用重启后,原先的Restart ClassLoader被丢掉、重新new一个Restart ClassLoader来加载这些修改过的东西,而Base ClassLoader却没有变化。这就是devtools重启速度快的原因。 注意事项 pom.xml里面plugin不配置fork=true实测也是可以的 application.properties需要配置:添加那个目录的文件需要restart spring.devtools.restart.additional-paths=src/main/java 项目图片 pom.xml < project xmlns = "http://maven.apache.org/POM/4.0.0" xmlns : xsi = "http://www.w3

Spring IOC原理学习笔记

烈酒焚心 提交于 2020-02-15 10:02:25
Spring容器高层视图 Spring 启动时读取应用程序提供的Bean配置信息,并在Spring容器中生成一份相应的Bean配置注册表,然后根据这张注册表实例化Bean,装配好Bean之间的依赖关系,为上层应用提供准备就绪的运行环境。 IOC容器介绍 pring 通过一个配置文件描述 Bean 及 Bean 之间的依赖关系,利用 Java 语言的反射功能实例化 Bean 并建立 Bean 之间的依赖关系。 Spring 的 IoC 容器在完成这些底层工作的基础上,还提供了 Bean 实例缓存、生命周期管理、 Bean 实例代理、事件发布、资源装载等高级服务。 BeanFactory 是 Spring 框架的基础设施,面向 Spring 本身; ApplicationContext 面向使用 Spring 框架的开发者,几乎所有的应用场合我们都直接使用 ApplicationContext 而非底层的 BeanFactory。 BeanFactory BeanFactory体系架构: BeanDefinitionRegistry: Spring 配置文件中每一个节点元素在 Spring 容器里都通过一个 BeanDefinition 对象表示,它描述了 Bean 的配置信息。而 BeanDefinitionRegistry 接口提供了向容器手工注册 BeanDefinition

spring 插件定义热插拔及原理

旧街凉风 提交于 2020-02-15 09:44:40
前言 简单实现一个spring 插件,可通过页面配置,动态的修改是否生效或失效 一个简单的日志插件:在方法前面打印日志插件,通知页面来设置这个插件是否开启 初始设想:如果了解spring aop,那么很容易是就想到可以用动态代理来实现,那么如果在ioc初始完成后,再去修改代理对象的拦截链呢? 1、需要在Ioc启动完成后,用类加载器将所对插件加载进来,然后实例化成advice对象,添加到代理对象的拦截链中 2、梳理一下需要搞清的问题如下: 类加载器是什么? 需要将插件类加载到工程中才能使用这个插件中的类 插件jar包 包含哪些内容? 实际上就是实现一个功能的类 如何创建拦截链对象? 通过反射创建拦截链对象(Advice对象) 一、插件定义 实际上就是在一个插件工程中单独定义一个类,这个类实现MethodBeforeAdvice 接口,定义增强方法 public class CountTimesPlugin implements MethodBeforeAdvice { private int count ; protected 来源: CSDN 作者: ccddsdsdfsdf 链接: https://blog.csdn.net/lh87270202/article/details/104161921

深入理解Spring事务的那点事

亡梦爱人 提交于 2020-02-14 11:35:40
Spring事务的基本原理 Spring事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,spring是无法提供事务功能的。对于纯JDBC操作数据库,想要用到事务,可以按照以下步骤进行: 获取连接 Connection con = DriverManager.getConnection() 开启事务con.setAutoCommit(true/false); 执行CRUD 提交事务/回滚事务 con.commit() / con.rollback(); 关闭连接 conn.close(); 使用Spring的事务管理功能后,我们可以不再写步骤 2 和 4 的代码,而是由Spirng 自动完成。那么Spring是如何在我们书写的 CRUD 之前和之后开启事务和关闭事务的呢?解决这个问题,也就可以从整体上理解Spring的事务管理实现原理了。下面简单地介绍下,注解方式为例子 配置文件开启注解驱动,在相关的类和方法上通过注解@Transactional标识。 spring 在启动的时候会去解析生成相关的bean,这时候会查看拥有相关注解的类和方法,并且为这些类和方法生成代理,并根据@Transaction的相关参数进行相关配置注入,这样就在代理中为我们把相关的事务处理掉了(开启正常提交事务,异常回滚事务)。 真正的数据库层的事务提交和回滚是通过binlog或者redo

第三章 最小化SpringXml 配置

左心房为你撑大大i 提交于 2020-02-13 07:37:37
自动装配(autowiring):有助于减少甚至消除<property>元素和<constructor-arg>元素,让spring自动识别如何装配Bean的依赖关系。 自动检测(autodiscovery):比自动装配更进一步,让spring能够自动识别哪些类需要被装配成sping Bean ,从而减少对<bean>元素的使用。 3.1 自动装配Bean属性 3.1.1 4种类型的自动装配   byName——把与Bean的属性具有相同的名字(或者ID)的其他Bean自动装配到Bean对应的属性中。如果没有跟属性的名字像匹配的Bean,则该属性不进行装配。   byType——把与Bean的属性具有相同类型的其他Bean自动装配到Bean的对应属性中,若果没有跟属性的类型相匹配的bean,则该属性不被装配。   constructor——把与Bean的构造器入参具有相同类型的其他Bean自动装配到Bean构造器的对应参数中。   autodetect——首先尝试使用constructor进行自动装配,如果失败,再尝试使用byType进行自动装配。   byName自动装配: 1 <!-- byName自动装配 2 缺点:若是有多个音乐家需要装配instrument属性,则他们就会公用一个Saxopbone(即多个bean的属性被同一个bean赋值) 3 --> 4 <!--

Spring实践第五天(基于注解实现bean的自动装配)

吃可爱长大的小学妹 提交于 2020-02-12 19:50:54
说明 如图,项目目录: 注解的方式: 1.目标 : 用注解的方式来代替bean标签的配置(autowired = ''default'') 2.方式 : 先在主配置文件,告知要开启注解模式: < context:annotation-config /> 在相关的类的方法上加注解 一、在xml文件中加入<context:annotation-config/>标签 1.如果要使用注解,首先要在xml文件中配置注解模式(使项目允许使用注解):  在applicationContext加入 < context:annotation-config /> 标签 <?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:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans