spring原理

Spring Boot自动配置原理

為{幸葍}努か 提交于 2019-12-04 02:34:11
声明 源码基于Spring Boot 2.0.4 前文 这两篇文章对理解这篇文章的知识会很有帮助。 Spring 注解配置原理 神奇的条件注解-Spring Boot自动配置的基石 自动配置介绍 在Spring Boot中开启自动配置只需要在配置类上加上 @EnableAutoConfiguration 注解即可。Spring Boot程序都会在启动类添加 @SpringBootApplication 注解, @SpringBootApplication 注解其实是是一个组合注解,相当于 @Configuration 、 @EnableAutoConfiguration 、 @ComponentScan 这几个注解一起使用。因此Spring Boot程序默认开启自动配置。 @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @AutoConfigurationPackage @Import(AutoConfigurationImportSelector.class) public @interface EnableAutoConfiguration { /** * 自动配置的开关,当我们程序使用了@EnableAutoConfiguration *

鲁班 Java架构师VIP课程一期共89G视频教程 luban it教程

送分小仙女□ 提交于 2019-12-03 23:17:09
Java视频教程详情描述: A0505《 Java架构师VIP课程一期共89G视频教程》Java架构师VIP课程一期共89G视频教程 鲁班学院 课件资料全 Java视频教程目录 ├─撸搬架构 ├─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、CAS2 │ 2018-09-25(6)-并发集合 │ 2018-09-27(7)-原子操作-基本类型 │ 2018-09-30(8)-线程池 │ 下载链接: http://www.137zw.com/thread-600-1-1.html ├─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网络模型源码分析 │ ├

Spring之IOC原理及代码详解

前提是你 提交于 2019-12-03 22:00:24
一、什么是IOC   引用 Spring 官方原文:This chapter covers the Spring Framework implementation of the Inversion of Control (IoC) [1] principle. IoC is also known as dependency injection (DI). It is a process whereby objects define their dependencies, that is, the other objects they work with, only through constructor arguments, arguments to a factory method, or properties that are set on the object instance after it is constructed or returned from a factory method. The container then injects those dependencies when it creates the bean. This process is fundamentally the inverse, hence the name Inversion of

普通Java类获取spring 容器的bean的5种方法

拜拜、爱过 提交于 2019-12-03 12:21:31
普通Java类获取spring 容器的bean的5种方法 方法一:在初始化时保存ApplicationContext对象 方法二:通过Spring提供的工具类获取ApplicationContext对象 方法三:继承自抽象类ApplicationObjectSupport 方法四:继承自抽象类WebApplicationObjectSupport 方法五:实现接口ApplicationContextAware 常用的5种获取spring 中bean的方式总结: 方法一:在初始化时保存ApplicationContext对象 ApplicationContext ac = new FileSystemXmlApplicationContext("applicationContext.xml"); ac.getBean("beanId"); 说明:这种方式适用于采用Spring框架的独立应用程序,需要程序通过配置文件手工初始化Spring的情况。 方法二:通过Spring提供的工具类获取ApplicationContext对象 import org.springframework.web.context.support.WebApplicationContextUtils; ApplicationContext ac1 = WebApplicationContextUtils

Mybatis源码解析(一) —— mybatis与Spring时如何整合的?

旧巷老猫 提交于 2019-12-03 11:22:38
Mybatis源码解析(一) —— mybatis与Spring时如何整合的?   从大学开始接触mybatis到现在差不多快3年了吧,最近寻思着使用3年了,我却还不清楚其内部实现细节,比如: 它是如何加载各种mybatis相关的xml? 它是如何仅仅通过一个Mapper接口 + Mappe.xml实现数据库操作的(尽管很多人可能都清楚是通过代理实现,但面试时一旦深入询问:比如Mapper的代理类名是什么?是通过JDK还是cglib实现?)? 在同一个方法中,Mybatis多次请求数据库,是否要创建多个SqlSession会话? 它与Spring是如何适配(整合)的? 在Spring中是如何保障SqlSession的生命周期的? 等等一系列的问题。。。   如果以上问题你自认为无法回答,或者说了解一些,那么就从现在开始,我们来一一揭开这层面纱。 一、Mybatis:最简单测试Demo   相信只要用过Mybatis的同学看到下面的代码一定不会陌生,如果不清楚的可以看下 官网文档 String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new

Spring IOC容器和Spring MVC IOC容器的区别

随声附和 提交于 2019-12-03 10:37:25
父容器和子容器的访问权限 <context-param> <param-name>contextConfigLocation</param-name>    <!-- 指定加载application配置文件 --> <param-value>classpath:spring/application.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 配置SpringMVC --> <servlet>   <servlet-name>usermanage</servlet-name>   <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>   <init-param>     <!-- 指定加载外部的spring-mvc配置文件 -->     <param-name>contextConfigLocation</param-name>     <param-value>classpath:spring/springmvc.xml<

八、Spring之深入理解声明式事务

时光总嘲笑我的痴心妄想 提交于 2019-12-03 10:08:27
Spring之深入理解声明式事务 何为事务? 事务就是把一系列的动作当成一个独立的工作单元,这些动作要么全部完成,要么全部不起作用。 事务的四个属性 : 1、原子性(atomicity) 事务是原子性操作,由一系列动作组成,事务的原子性确保动作要么全部完成,要么完全不起作用 2、一致性(consistency) 一旦所有事务动作完成,事务就要被提交。数据和资源处于一种满足业务规则的一致性状态中 3、隔离性(isolation) 可能多个事务会同时处理相同的数据,因此每个事务都应该与其他事务隔离开来,防止数据损坏 4、持久性(durability) 事务一旦完成,无论系统发生什么错误,结果都不会受到影响。通常情况下,事务的结果被写到持久化存储器中 Spring中的事务管理 Spring在不同的事务管理API之上定义了一个抽象层,使得开发人员不必了解底层的事务管理API就可以使用Spring的事务管理机制。Spring支持编程式事务管理和声明式的事务管理。 编程式事务管理 将事务管理代码嵌到业务方法中来控制事务的提交和回滚 缺点:必须在每个事务操作业务逻辑中包含额外的事务管理代码 声明式事务管理 将事务管理代码从业务方法中分离出来,以声明的方式来实现事务管理。将事务管理作为横切关注点,通过AOP方法模块化。Spring中通过Spring AOP框架支持声明式事务管理。 传播行为

Spring_Bean配置_入门

橙三吉。 提交于 2019-12-03 08:31:14
 Spring 的入门案例:(IOC)    IOC 的底层实现原理(结构图2.01)                              图:2.01       IOC :Inversion of Control 控制反转,指的是对象的创建权反转(交给)给Spring,       作用是实现了程序的解耦合   步骤一: 下载 Spring 的开发包:      官网:http://spring.io/     下载地址:  http://repo.springsource.org/libs-release-local/org/springframework/spring    创建 web 项目, 引入 Spring 的开发包:          导入基本的jar包(4+2)                    图:2.02     引入相关配置文件:       log4j.properties  //日志文件       applicationContext.xml     引入约束:       spring-framework-4.2.4.RELEASE\docs\spring-framework-reference\html\xsd-configur ation.html              <beans xmlns= "http://www

spring源码学习(一)

[亡魂溺海] 提交于 2019-12-03 07:25:45
最近在学习spring源码,把自己的学习笔记记录一下,分享出来,如果有理解错的,也希望各位能提出来,大家一起学习 首先spring源码的入口方法: 1 public AnnotationConfigApplicationContext(Class<?>... annotatedClasses) { 2 //在this()中调用父类的方法 创建了 DefaultListableBeanFactory(这就是平常说的springbean工厂) 3 this(); 4 //把annotatedClasses(AppConfig.java)放到spring容器中,最底层调用的是DefautListableBeanFactory.registerBeanDefinition()方法,将配置类put到beanDefinitionMap中 5 register(annotatedClasses); 6 refresh(); 7 } 8 9 //这个方法是this()调用的 10 public AnnotationConfigApplicationContext() { 11 /** 12 * 创建一个读取注解的bean定义读取器 13 * bean定义其实就是beanDefinition 14 * 在这个方法里面 声明了六个比较重要的bean

spring源码学习(一)

旧时模样 提交于 2019-12-03 07:00:43
最近在学习spring源码,把自己的学习笔记记录一下,分享出来,如果有理解错的,也希望各位能提出来,大家一起学习 首先spring源码的入口方法: 1 public AnnotationConfigApplicationContext(Class<?>... annotatedClasses) { 2 //在this()中调用父类的方法 创建了 DefaultListableBeanFactory(这就是平常说的springbean工厂) 3 this(); 4 //把annotatedClasses(AppConfig.java)放到spring容器中,最底层调用的是DefautListableBeanFactory.registerBeanDefinition()方法,将配置类put到beanDefinitionMap中 5 register(annotatedClasses); 6 refresh(); 7 } 8 9 //这个方法是this()调用的 10 public AnnotationConfigApplicationContext() { 11 /** 12 * 创建一个读取注解的bean定义读取器 13 * bean定义其实就是beanDefinition 14 * 在这个方法里面 声明了六个比较重要的bean