spring原理

2019年java架构师视频

假如想象 提交于 2019-11-28 02:45:24
01.并发专题(一) 2018-09-11(1)-Java内存模型 2018-09-13(2)-synchronized原理 2018-09-16(3)-volatile实现机制 2018-09-18(4)-DCL-单例模式 2018-09-21(5)-并发基础-AQS、CAS 2018-09-25(6)-并发集合 2018-09-27(7)-原子操作-基本类型 2018-09-30(8)-线程池 02.互联网工程专题(二) 2018-10-09(9)-Linux简介、安装 2018-10-11(10)-yum工具、shell编程 2018-10-14(11)-maven介绍,maven入门程序 2018-10-16(12)-maven仓库、依赖管理 2018-10-18(13)-Git简介、Git常用操作命令 2018-10-21(14)-初识分支、分支详解 2019-03-28(15)-tomcat网络模型源码分析 03.框架应用和源码专题(三) 2018-10-23(15)-模拟spring IOC、源码分析 2018-10-25(16)-Spring aop 和aspectj的关系以及应用 2018-10-28(17)-AOP各种表达式,aspectj的关系 2018-10-30(18)-springAOP jdk动态代理 2018-11-01(19)-动态代理源码分析

Spring Boot 自动配置之@Conditional的使用

ぃ、小莉子 提交于 2019-11-27 21:58:38
Spring Boot自动配置的"魔法"是如何实现的? 转自- https://sylvanassun.github.io/2018/01/08/2018-01-08-spring_boot_auto_configure/ Spring Boot是Spring旗下众多的子项目之一,其理念是约定优于配置,它通过实现了自动配置(大多数用户平时习惯设置的配置作为默认配置)的功能来为用户快速构建出标准化的应用。Spring Boot的特点可以概述为如下几点: 内置了嵌入式的Tomcat、Jetty等Servlet容器,应用可以不用打包成War格式,而是可以直接以Jar格式运行。 提供了多个可选择的”starter”以简化Maven的依赖管理(也支持Gradle),让您可以按需加载需要的功能模块。 尽可能地进行自动配置,减少了用户需要动手写的各种冗余配置项,Spring Boot提倡无XML配置文件的理念,使用Spring Boot生成的应用完全不会生成任何配置代码与XML配置文件。 提供了一整套的对应用状态的监控与管理的功能模块(通过引入spring-boot-starter-actuator),包括应用的线程信息、内存信息、应用是否处于健康状态等,为了满足更多的资源监控需求,Spring Cloud中的很多模块还对其进行了扩展。 有关Spring Boot的使用方法就不做多介绍了

Spring Bean生命周期

China☆狼群 提交于 2019-11-27 20:48:20
/** bean的生命周期: bean创建---初始化----销毁的过程 容器管理bean的生命周期; 我们可以自定义初始化和销毁方法;容器在bean进行到当前生命周期的时候来调用我们自定义的初始化和销毁方法 构造(对象创建) 单实例:在容器启动的时候创建对象 多实例:在每次获取的时候创建对象\ BeanPostProcessor.postProcessBeforeInitialization 初始化: 对象创建完成,并赋值好,调用初始化方法。。。 BeanPostProcessor.postProcessAfterInitialization 销毁: 单实例:容器关闭的时候 多实例:容器不会管理这个bean;容器不会调用销毁方法; 遍历得到容器中所有的BeanPostProcessor;挨个执行beforeInitialization, 一但返回null,跳出for循环,不会执行后面的BeanPostProcessor.postProcessorsBeforeInitialization BeanPostProcessor原理 populateBean(beanName, mbd, instanceWrapper);给bean进行属性赋值 initializeBean { applyBeanPostProcessorsBeforeInitialization

国际化的原理是什么?

时光怂恿深爱的人放手 提交于 2019-11-27 18:43:32
分为三大步 (1)本地化信息获取 (2)数据获取 (3)格式化 1)本地化信息获取 Spring MVC的DispatcherServlet类会在initLocaleResolver方法中查找一个locale resolver,如果没有找到就会用默认的AcceptHeaderLocaleResolver类。locale resolver会去根据请求Request设置当前的locale信息。除了resolver类,还可以定义拦截器去设置locale信息。 2)数据获取 得到本地化信息后,就可以从相应的properties文件中获取Spring MVC的数据处理定义了一个接口MessageSource,该接口定义了数据获取的方法 3)格式化 第(2)步已经获取到了数据,有些时候数据获取到之后可以直接展示,但是如果涉及到时间、数字、金额、动态文本等数据时,又需要额外做下处理了,因为本身这些数据就是本地化敏感的,这时就需要对相应的数据进行格式化操作。 来源: https://www.cnblogs.com/q2546/p/11372719.html

Spring事件驱动模型和观察者模式

∥☆過路亽.° 提交于 2019-11-27 17:37:27
一、前言 spring cloud大行其道的当下,如果不了解基本原理那么是很纠结的(看见的都是 约定大于配置 ,但是原理呢?为什么要这么做?如何串联起来的?)。spring cloud是基于spring boot快速搭建的,今天咱们就看看spring boot容器启动流程(全文基于1.5.9版本)。(本文不讲解如何快速启动spring boot,那些直接官方看即可, 官网文档飞机票 ) 二、容器启动 spring boot一般是 指定容器启动main方法,然后以命令行方式启动Jar包 ,如下图: 1 @SpringBootApplication 2 public class Application { 3 public static void main(String[] args) { 4 SpringApplication.run(Application.class, args); 5 } 6 } 这里核心关注2个东西: 1.@SpringBootApplication注解 2. SpringApplication.run()静态方法 下面我们就分别探究这两块内容。 2.1 @SpringBootApplication注解 源码如下: 1 @Target(ElementType.TYPE) 2 @Retention(RetentionPolicy.RUNTIME) 3

Spring boot 注解原理分析(@EnableAutoConfiguration深入理解) 下

喜欢而已 提交于 2019-11-27 16:22:16
一、项目结构: 二、@EnableAutoConfiguration原理分析: @EnableAutoConfiguration到底是怎么启用一些特性的? (1)、首先要知道这个接口是干嘛的,ImportSelector ImportSelector接口有一个抽象方法,String[] selectImports(AnnotationMetadata var1); 这个方法会返回一个字符串数组,这个字符串数组里面是一些类的路径加名称,返回之后,这些类会装配到Spring容器里面。 (2)、我们点进去@EnableAutoConfiguration注解,看看到底有些什么东西,如下图: 可以看到 这个注解实际上是一个借口,导入了AutoConfigurationImportSelector.class, 这个类是关键所在,还有Class<?>[] exclude() default {};和String[] excludeName() default {}; 这两个属性是用来排除装配的bean的(设置这两个属性,按class或者名称),装配bean的时候会排除掉这两个属性里面设置的bean。 (3)、再点进去AutoConfigurationImportSelector.class,这个class是自动装配bean的最关键的class,看看到底有些什么东西,如下图:

Spring Quartz的原理

邮差的信 提交于 2019-11-27 16:12:38
Quartz是一个大名鼎鼎的Java版开源定时调度器,功能强悍,使用方便。 一、核心概念 Quartz的原理不是很复杂,只要搞明白几个概念,然后知道如何去启动和关闭一个调度程序即可。 1、Job 表示一个工作,要执行的具体内容。此接口中只有一个方法 void execute(JobExecutionContext context) 2、JobDetail JobDetail表示一个具体的可执行的调度程序,Job是这个可执行程调度程序所要执行的内容,另外JobDetail还包含了这个任务调度的方案和策略。 3、Trigger代表一个调度参数的配置,什么时候去调。 4、Scheduler代表一个调度容器,一个调度容器中可以注册多个JobDetail和Trigger。当Trigger与JobDetail组合,就可以被Scheduler容器调度了。 二、一个最简单入门实例 import org.quartz.*; import org.quartz.impl.StdSchedulerFactory; import java.util.Date; /** * quartz定时器测试 * * @author leizhimin 2009-7-23 8:49:01 */ public class MyJob implements Job { public void execute

Spring相关

穿精又带淫゛_ 提交于 2019-11-27 11:14:49
https://blog.csdn.net/a745233700/article/details/80959716 BeanFactory和ApplicationContext有什么区别? BeanFactory和ApplicationContext是Spring的两大核心接口,都可以当做Spring的容器。其中ApplicationContext是BeanFactory的子接口。 (1)BeanFactory:是Spring里面最底层的接口,包含了各种Bean的定义,读取bean配置文档,管理bean的加载、实例化,控制bean的生命周期,维护bean之间的依赖关系。ApplicationContext接口作为BeanFactory的派生,除了提供BeanFactory所具有的功能外,还提供了更完整的框架功能: ①继承MessageSource,因此支持国际化。 ②统一的资源文件访问方式。 ③提供在监听器中注册bean的事件。 ④同时加载多个配置文件。 ⑤载入多个(有继承关系)上下文 ,使得每一个上下文都专注于一个特定的层次,比如应用的web层。 (2)①BeanFactroy采用的是 延迟加载形式来注入Bean 的,即只有在使用到某个Bean时(调用getBean()),才对该Bean进行加载实例化。这样,我们就不能发现一些存在的Spring的配置问题

【深入浅出MyBatis系列十】与Spring集成

萝らか妹 提交于 2019-11-27 08:33:21
#0 系列目录# 深入浅出MyBatis系列 【深入浅出MyBatis系列一】MyBatis入门 【深入浅出MyBatis系列二】配置简介(MyBatis源码篇) 【深入浅出MyBatis系列三】Mapper映射文件配置 【深入浅出MyBatis系列四】强大的动态SQL 【深入浅出MyBatis系列五】SQL执行流程分析(源码篇) 【深入浅出MyBatis系列六】插件原理 【深入浅出MyBatis系列七】分页插件 【深入浅出MyBatis系列八】SQL自动生成插件 【深入浅出MyBatis系列九】改造Cache插件 【深入浅出MyBatis系列十】与Spring集成 【深入浅出MyBatis系列十一】缓存源码分析 【深入浅出MyBatis系列十二】终结篇:MyBatis原理深入解析 单独使用mybatis是有很多限制的( 比如无法实现跨越多个session的事务 ),而且很多业务系统本来就是使用spring来管理的事务,因此mybatis最好与spring集成起来使用。 #1 Spring集成配置# <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="datasource"></property>

Redis实现消息队列

a 夏天 提交于 2019-11-27 08:12:59
基于Redis消息队列-实现短信服务化 1.Redis实现消息队列原理 常用的消息队列有RabbitMQ,ActiveMQ,个人觉得这种消息队列太大太重,本文介绍下基于Redis的轻量级消息队列服务。 一般来说,消息队列有两种模式,一种是发布者订阅模式,另外一种是生产者和消费者模式。Redis的消息队列,也是基于这2种原理的实现。 发布者和订阅者模式:发布者发送消息到队列,每个订阅者都能收到一样的消息。 生产者和消费者模式:生产者将消息放入队列,多个消费者共同监听,谁先抢到资源,谁就从队列中取走消息去处理。注意,每个消息只能最多被一个消费者接收。 2.Redis消息队列使用场景 在我们的项目中,使用消息队列来实现短信的服务化,任何需要发送短信的模块,都可以直接调用短信服务来完成短信的发送。比如用户系统登录注册短信,订单系统的下单成功的短信等。 3.SpringMVC中实现Redis消息队列 因为我们短信只需要发送一次,所以我们使用的是消息队列的生产者和消费者模式。 3.1引入Maven依赖 引入Redis相应的maven依赖,这里需要spring-data-redis和jedis //pom.xml <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis<