Spring
蛇皮皮蛋
求大佬笔下留情……
展开
-
spirng实战(一:大纲)
Spring的两个核心特性是依赖注入(dependency injection,DI)和面向切面(aspect-oriented programming,AOP)。其中Spring为了减低java的开发复杂性采用了以下4种关键策略:1.基于POJO的轻量级和最小侵入性编程;2.通过依赖注入和面向接口实现松耦合;3.基于切面和惯例进行声明式编程;4.通过切面和模板减少样板式代码;1.1Spring装...原创 2018-06-07 20:17:53 · 4001 阅读 · 0 评论 -
Spring源码分析(二)(IoC容器的实现)(3)
BeanDefinition的载入和解析 这个载入过程,相当于把定义的BeanDefinition在IoC容器中转化成一个Spring内部表示的数据结构的过程。IoC容器对Bean的管理和依赖注入功能的实现,是通过对其持有的BeanDefinition进行各种相关操作来完成的。这些BeanDefinition数据在IoC容器中通过一个HashMap来保持和维护。如果需要提高IoC容器的性...原创 2018-11-24 01:17:01 · 4130 阅读 · 1 评论 -
Spring源码分析(二)(IoC容器的实现)(2)
IoC容器的初始化过程 简单来说IoC容器的初始化是由refresh()方法启动的,这个方法标志着IoC容器的正式启动。这个启动包括BeanDefinition的Resouce定位、载入和注册三个基本过程。 第一个过程是Resource定位过程。这个Resource定位指的是BeanDefinition的资源定位,它由ResourceLoader通过统一的Resource 接口...原创 2018-11-23 00:12:23 · 4004 阅读 · 0 评论 -
Spring源码分析(一)
(Spring 4.3.21)一:Core Container(核心容器) spring-core和spring-beans模块提供框架的基础部分,包括IOC和依赖注入特征。这 BeanFactory是工厂模式的复杂实现。它消除了对程序化单例的需求,并允许你从实际程序逻辑中分离依赖项的配置和规范。它由以下部分组成:spring-core(Core模块主要包含Spr...原创 2018-11-21 09:07:47 · 4085 阅读 · 0 评论 -
Spring源码分析(二)(IoC容器的实现)(1)
Ioc(Inversion of Control)——“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。理解好Ioc的关键是要明确“谁控制谁,控制什么,为何是反转(有反转就应该有正转了),哪些方面反转了”,那我们来深入分析一下:●谁控制谁,控制什么:传统Java SE程序设计,我们直接在对象内部...原创 2018-11-20 23:11:44 · 4009 阅读 · 0 评论 -
Spring Aop使用demo(Spring Boot)
pom.xml: <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>原创 2018-11-19 18:05:53 · 4007 阅读 · 0 评论 -
Spring源码分析(三)(IoC容器的依赖注入)(1)
依赖注入的过程是用户第一次向IoC容器索要Bean时才触发的,它也可以在BeanDefinition信息中通过控制lazy-init属性来让容器完成对Bean的预实例化。这个预实例化实际上也是一个完成依赖注入的过程,但它是在初始化的过程中完成的。当用户向IoC容器索要Bean时。基本的loC容器接口BeanFactory中,有一个getBean的接口定义,这个接口的实现就是触发依赖注入发生...原创 2018-11-29 18:53:39 · 4115 阅读 · 0 评论 -
Spring源码分析(三)(IoC容器的依赖注入)(2)
protected void populateBean(String beanName, RootBeanDefinition mbd, BeanWrapper bw) { //这里取得在BeanDefinition中设置的property值,这些property来自对BeanDefinition的解析 //具体的解析过程可以参看载入和解析BeanDefinitoin的分析 Pro...原创 2018-11-30 00:03:48 · 3961 阅读 · 0 评论 -
编程式事务
在基本的 MyBatis 中,session 工厂可以使用 SqlSessionFactoryBuilder 来创建。而在 MyBatis-Spring 中,则使用 SqlSessionFactoryBean 来替代。 MyBatis 的 SqlSession 提供指定的方法来处理编程式的事务。 但是当使用 MyBatis-Spring 时, bean 将会使用 Spring 管...原创 2019-02-20 11:12:42 · 6980 阅读 · 0 评论 -
Spring源码分析(三)(@Autowired实现)
依赖注入的实现:https://blog.csdn.net/qq_37598011/article/details/84451591 在自动装配中,不需要对Bean属性做显示的依赖注入声明只需要配置autowiring属性,它具体的实现也在依赖注入中的populateBean方法中,Ioc容器会根据这个属性的配置使用反射自动查找属性的类型或者名称,然后根据属性的类型或者名称自动匹配Io...原创 2019-05-02 13:20:34 · 5026 阅读 · 1 评论 -
Spring源码分析(四)(AOP实现)(1)
在Spring AOP实现中,使用的核心技术是动态代理。通过动态代理特性可以为任意Java对象创建代理对象。在Spring中可以具体分为JDK代理和CGLIB代理。 在Spring AOP中有一个核心类这个类就是ProxyFactoryBean,这个类是在Spring Ioc环境中创建AOP应用的底层方法,Spring通过这个类完成了对AOP使用的封装。建立AopProxy代...原创 2019-05-08 23:16:11 · 3949 阅读 · 0 评论 -
Spring源码分析(四)(AOP实现)(2)
Spring AOP拦截器调用的实现 在Spring AOP通过JDK的Proxy方式或CGLIB方式生成代理对象时,相关拦截器已经配置到代理对象中,拦截器在代理对象中起作用是通过对这些方法的回调来完成的。JdkDynamicAopProxy的invoke拦截 首先来看看JdkDynamicAopProxy生成的Proxy对象:@Override public Ob...原创 2019-05-12 15:56:41 · 3991 阅读 · 0 评论 -
Spring源码分析(三)(解决循环依赖)
spring解决循环依赖主要通过三级缓存去完成。 /** Cache of singleton objects: bean name --> bean instance */ private final Map<String, Object> singletonObjects = new ConcurrentHashMap<String, Object>...原创 2019-05-25 20:01:50 · 4320 阅读 · 0 评论 -
Spring缓存数据
1.启用缓存Spring对缓存的支持有两种方式: 1.注解驱动的缓存 2.XML声明的缓存使用Spring的缓存抽象时,最为通用的方式就是在方法上添加@Cacheable和@CacheEvict注解。在本例中,声明了ConcurrentMapCacheManager,这个简单的缓存管理器使用java.util.concurrent.ConcurrentHashMap作为其缓存存储。如果...原创 2018-07-07 21:39:07 · 7477 阅读 · 1 评论 -
Spring消息(JMS)
1.异步消息简介1.首先看一下同步模式和异步模式的区别: 客户端调用远程方法时,客户端必须等到远程方法完成后,才能继续执行。即使远程方法不向客户端返回任何信息,客户端也要被阻塞直到服务完成。客户端不需要等待服务处理消息,甚至不需要等待消息投递完成。客户端发送消息,然后继续执行,这是因为客户端假定服务最终可以收到并处理这条消息。1.发送消息 在异步消息中有两个...原创 2018-07-18 00:42:26 · 10200 阅读 · 0 评论 -
Spring和JDBC
为了避免持久化的逻辑分散到应用的各个组件中,最好将数据访问的功能放到一个或多个专注于此项任务的组件中。这样的组件通常称为数据访问对象(data access object,DAO)或Repository。 为了避免应用与特定的数据访问策略耦合在一起,编写良好的Repository应该以接口的方式暴露功能。服务对象本身并不会处理数据访问,而是将数据访问委托给Repository。Rep...原创 2018-06-29 00:47:15 · 7937 阅读 · 0 评论 -
SpringBoot启动热部署(亲测)
1.在pom.xml中添加依赖 <!-- 热部署 --> <!-- devtools可以实现页面热部署(即页面修改后会立即生效, 这个可以直接在application.properties文件中配置spring.thymeleaf.cache=false来实现) --> <!-- 实现类文件热部署(类文件修...原创 2018-06-22 21:51:28 · 30160 阅读 · 3 评论 -
Spring实战(六:渲染Web视图)(未改)
1.理解视图解析 将控制器中请求处理的逻辑和视图中的渲染实现解耦是Spring MVC的一个重要特性。如果控制器中的方法直接负责产生HTML的话,就很难在不影响请求处理逻辑的前提下,维护和更新视图。控制器方法和视图的实现会在模型内容上达成一致,这是两者的最大关联,除此之外,两者应该保持足够的距离。 Spring MVC定义了一个名为ViewResolver的接口,它大致如下所示: ...原创 2018-06-24 00:26:38 · 4806 阅读 · 0 评论 -
spirng实战(二:装配Bean)
配置Bean容器主要有三种配置机制:1.在XML中进行显示配置。2.在java中进行显示配置3.隐式的bean发现机制和自动装配。首先我们来看下Spring的自动化装配Bean的方式。Spring从两个角度实现自动化装配:1.组件扫描(component scanning):Spring会自动发现应用上下文中所创建的Bean。2.自动装配(autowiring):Spring自动满足bean之间的...原创 2018-06-09 10:42:26 · 4274 阅读 · 0 评论 -
spirng实战(四:面向切面的 Spring)
依赖注入(DI)管理和配置我们的应用对象。DI有助于应用对象之间的解耦,而AOP可以实现横切关注点与它们所影响的对象之间的解耦。 切面提供了取代继承和委托的另一种可选方案,而且在很多场景下更清晰简洁。在使用面向切面编程时,我们仍然在一个地方定义通用功能,但是可以通过声明的方式定义这个功能要以何种方式在何处应用,而无需修改受影响的类。横切关注点可以被模块化为特殊的类,这些类被称为切...原创 2018-06-17 12:59:55 · 4748 阅读 · 0 评论 -
spirng实战(三:高级装配)
1.配置profile bean 在java配置中使用@profile注解指定某个bean属于哪一个profile。例如,在配置类中,嵌入式数据库的DataSource可能会配置成如下所示:在这里@Profile注解应用在类级别上,它会告诉Spring这个配置类中的bean只有在dev profile激活时才会创建。否则带有@Bean注解的方法都会被忽略。在Spring3.1以前@Profi...原创 2018-06-10 14:06:34 · 4144 阅读 · 0 评论 -
Spirng集成ActiveMQ
使用Spirng集成ActiveMQ:1.ConnectionFactory:用于管理连接的连接工厂2.JmsTemplate:用于发送和接受消息的模板类3.MessageListerner:消息监听器ConnectionFactory:1.一个Spring提供的连接池2.JmsTemplate每次发消息都会重新创建连接,会话和productor3.Spring中提供了SingleConnecti...原创 2018-06-18 15:49:48 · 3974 阅读 · 0 评论 -
SpringMVC处理异常
Spring提供了多种方式将异常转换为响应: 1.特定的Spring异常将会自动映射为指定的HTTP状态码; 2.异常上可以添加@ResponseStatus注解,从而将其映射为某一个HTTP状态码; 3.在方法上可以添加@ExceptionHandler注解,使其用来处理异常。1.将异常映射为HTTP状态码 表中的异常一般会由Spring自身抛出,作为Dispatcher...原创 2018-06-26 07:48:27 · 4022 阅读 · 0 评论 -
SpringMVC 处理multipart形式的数据
multipart格式的数据会将一个表单拆分为多个部分(part),每个部分对应一个输入域。在一般的表单输入域中,它所对应的部分中会放置文本型数据,但是如果上传文件的话,它所对应的部分可以是二进制,下面展现了multipart的请求体:...原创 2018-06-25 22:59:32 · 5566 阅读 · 0 评论 -
Spring与JPA
这里我主要用Spring Data实现自动化的JPA Repository。package com.zzf.finals.repository;import com.zzf.finals.entity.demo;import org.springframework.data.jpa.repository.JpaRepository;import org.springframewor...原创 2018-07-01 23:00:18 · 8226 阅读 · 0 评论 -
SpringMVC跨重定向请求传递数据
当控制器方法返回的String值以“redirect:”开头的话,那么这个String不是用来查找视图的,而是用来指导浏览器进行重定向的路径。如: 当一个处理器方法完成之后,该方法所指定的模型数据将会复制到请求中,并作为请求中的属性,请求会转发(forward)到视图上进行渲染。因为控制器方法和视图所处理的是同一个请求,所以在转发的过程中,请求属性能够得以保存。而当控制器的结果是重定...原创 2018-06-26 23:34:24 · 4311 阅读 · 0 评论 -
Spring实战(五:构建Spring Web应用程序)
SpringMVC基于模型-视图-控制器(Model-View-Controller,MVC)模式实现,它能够构建像Spring框架那样灵活和松耦合的Web应用程序。1.Spring MVC基础 请求旅程的第一步是Spring的DispatcherServlet。与大多数基于Java的Web框架一样,Spring MVC所有的请求都会通过一个前端控制器(front controlle...原创 2018-06-20 13:08:51 · 4707 阅读 · 0 评论 -
Spring与Redis(推荐使用Jedis)
连接到RedisRedis连接工厂会生成到Redis数据库服务器的连接。Spring Data Redis为四种Redis客户端实现提供了连接工厂: JedisConnectionFactory JredisConnectionFactory LettuceConnectionFactory SrpConnectionFactory 如果使用其他连接工厂可以简单的替...原创 2018-07-03 20:52:53 · 17367 阅读 · 0 评论 -
Spring Boot启动原理解析(注解篇)
SpringBoot内置的自动配置使开发变得很方便,所以这次就来看看它的启动源码和它的自动化配置的实现原理。 启动类:@SpringBootApplicationpublic class DemoApplication { public static void main(String[] args) { SpringApplication.run...原创 2019-06-05 23:10:57 · 4839 阅读 · 0 评论