spring
文章平均质量分 75
tinysakurac
蹒跚学步的猿
展开
-
@ConfigurationProperties注解使用
转载自博客在编写项目代码时,我们要求更灵活的配置,更好的模块化整合。在 Spring Boot 项目中,为满足以上要求,我们将大量的参数配置在 application.properties 或 application.yml 文件中,通过 @ConfigurationProperties 注解,我们可以方便的获取这些参数值使用 @ConfigurationProperties 配置模块假设我们正在搭建一个发送邮件的模块。在本地测试,我们不想该模块真的发送邮件,所以我们需要一个参数来「开关」 disab转载 2020-05-14 20:04:58 · 493 阅读 · 0 评论 -
springboot启动原理解析
转载自每天进步一点的博客[https://www.cnblogs.com/zheting/p/6707035.html]转载 2018-12-06 19:37:08 · 184 阅读 · 0 评论 -
@Autowired和@Resource的区别
用途:做bean的注入时使用历史:@Autowired 属于Spring的注解 org.springframework.beans.factory.annotation.Autowired@Resource 不属于Spring的注解,JDK1.6支持的注解 javax.annotation.Resource共同点:装配bean. 写...转载 2018-11-06 14:30:42 · 88 阅读 · 0 评论 -
Spring源码分析——Aop实现
1、Aop概念回顾Aop是Aspect-Oriented Programming(面向切面编程)的简称,维基百科对于它的解释如下:Aspect是一种新的模块化机制,用来描述分布的对象,类或函数中的横切关注点,从关注点分离出横切关注点是面向切面的程序设计的核心概念。分离关注点使解决特定领域问题的代码从业务逻辑中独立出来,业务逻辑的代码中不再包含对特定领域问题代码的调用,业务逻辑中特定领域问题的...原创 2018-10-21 21:51:08 · 241 阅读 · 0 评论 -
Spring源码分析——SpringMVC实现
Spring MVC概述Spring MVC是Spring的一个重要模块,在Web应用中MVC的设计模式已经广为人知,MVC的设计概念如下图所示MVC模式在UI设计中使用的非常普遍,在Gof的设计模式的经典著作中,开篇就是这个模式。这个模式的额主要特点是分离了模型,视图与控制器三种角色,将业务处理从UI设计中独立出来,封装到模型与控制器设计中去。使得它们相互解耦可以独立扩展。使用Sprin...原创 2018-10-22 22:12:21 · 295 阅读 · 0 评论 -
Spring——使用cglib更新长生命周期中引用的短生命周期bean
在长生命周期的bean引用短生命周期bean时,会有一个问题。 比如singleton 类依赖了prototype类,容器会在singleton 类初始化时,就根据依赖关系将prototype类注入。以后的每一次调用singleton bean都是同一个对象,里面的prototype bean也是最初注入的那个,容器再也不会为singleton bean产生新的prototype bean。我们...转载 2018-10-18 16:39:59 · 465 阅读 · 0 评论 -
Spring Aop——基于注解与xml配置实现
理解AOP我们知道Spring以IoC(Inverse of Control 反转控制)和AOP(Aspect Oriented Programming 面向切面编程)为内核。AOP(Aspect Oriented Programming),即面向切面编程,是OOP(Object Oriented Programming,面向对象编程)的补充和完善。举个栗子(用的伪代码),假设我们要在系统的...转载 2018-10-18 16:40:06 · 145 阅读 · 0 评论 -
Spring——Aware相关接口
Aware,是感应和感知的意思。当bean实现了对应的Aware接口时,BeanFactory会在生产bean时根据它所实现的Aware接口,给bean注入对应的属性,从而让bean获取外界的信息。Spring提供了一堆Aware接口:下面列出几个主要Aware接口作用:org.springframework.context.ApplicationContextAware接口:实现类的实...转载 2018-10-17 16:53:41 · 2217 阅读 · 0 评论 -
Spring容器级生命周期回调——LifeCycle
之前我们谈了bean的生命周期中利用容器扩展点回调,来实现后置处理器以及bean的初始和销毁回调。但这些事件都是建立在容器已经成功启动的基础上,如果我们想在容器本身的生命周期(比如容器启动、停止)事件上做一些工作怎么办呢?Spring提供了以下接口:Lifecycle接口任何Spring管理的对象都可以实现此接口。当ApplicationContext接口启动和关闭时,它会调用本容器内所有的L...转载 2018-10-17 16:18:49 · 5348 阅读 · 2 评论 -
Spring Bean生命周期回调——初始化回调(init-method)与销毁回调(destroy-method)
实现Bean初始化回调和销毁回调各有三种方法,一是实现接口方法,二是在XML配置,三是使用注解初始化回调(init-method)1、使用接口org.springframework.beans.factory.InitializingBean接口类的作用是:在容器设置bean必须的属性之后执行初始化工作。InitializingBean接口中只有一个方法:void afterPropert...转载 2018-10-17 15:54:02 · 1720 阅读 · 2 评论 -
Spring——定义Bean init Method与destroy Method的三种方式
转载自涂宗勋的博客在spring的实际开发过程中,我们可能常常需要使用到init method和destroy method,比如初始化一个对象(bean)后立即初始化(加载)一些数据,在销毁一个对象之前进行垃圾回收等等。根据特意的去了解后,发现实际上可以有三种方式来实现init method和destroy method。要用这两个方法,自然先要知道这两个方法究竟是干嘛用的。而从字面意思就...转载 2018-10-17 15:34:58 · 10289 阅读 · 1 评论 -
SpringBoot使用MockMvc对Controller进行测试
spring-mvc springboot 使用MockMvc对controller进行测试网上基本都是参考官方的使用方式,使用了import static,个人感觉这种方式特别不好,代码提示性不友好。所以在此进行说明,也方便自己以后使用。1.引入spring-test相关jar包,springboot只需引入spring-boot-starter-test即可<dependency&...转载 2018-11-06 17:00:26 · 1431 阅读 · 0 评论 -
使用Aop拦截自定义注解进行注解处理
Aop可以通过切入点表达式语言指定需要切入的方法,实际上切入点表达式还有与注解相关的写法,当连接点发现方法被特定的注解标注时即可切入方法执行切面逻辑。利用这个特性我们可以自由的定义我们的自定义注解。格式首先我们看看指定被特定注解标注的方法为切入点的AspectJ表达式写法:@PointCut(value="@annotation(注解的全类名)")public void pointCut1...原创 2018-11-06 17:59:24 · 5619 阅读 · 0 评论 -
@SpringBootApplication的组件扫描范围
转载自乌龟壳的博客@SpringBootApplication=@Configuration+@EnableAutoConfiguration+@ComponentScan,其中扫描包的范围为启动类所在包和子包,不包括第三方的jar包。如果我们需要扫描通过maven依赖添加的jar,我们就要单独使用@ComponentScan注解扫描第三方包。但是,如果@SpringBootApplicati...转载 2019-07-30 19:55:55 · 2035 阅读 · 0 评论 -
Spring Mvc对自定义controller入参预处理
转载自xdoyf的博客在初学springmvc框架时,我就一直有一个疑问,为什么controller方法上竟然可以放这么多的参数,而且都能得到想要的对象,比如HttpServletRequest或HttpServletResponse,各种注解@RequestParam、@RequestHeader、@RequestBody、@PathVariable、@ModelAttribute等。相信很多...转载 2019-07-29 15:43:55 · 1526 阅读 · 0 评论 -
个人开源项目smart_search_box
recommendsmart_search_box是java领域的一站式搜索引擎解决方案,用户只需要进行简单的配置就可以在项目中引入完整的全文搜索能力,包括数据入库自动索引,搜索词联想,热词提示,高亮等功能。同时提供给用户高度的自定义能力,用户可以替换框架的部分实现,包括替换elastic search客户端,替换分词器,替换redis客户端等,只需要实现对应的接口替换默认注入的相应组件即可。默...原创 2019-05-18 14:39:21 · 355 阅读 · 0 评论 -
java 带有泛型声明的对象的比较问题
起因在于使用了一个向ioc容器中注入的带有泛型声明的bean,然后在注入时使用了不同的泛型作为qualifier @Autowired private AggregationUtilBean&lt;Integer, Integer&gt; aggregationUtilBean; @Autowired private AggregationUtilBean&lt;...原创 2019-02-27 12:24:47 · 780 阅读 · 0 评论 -
Spring4支持基于泛型的依赖注入
转载自编走编想的博客Spring 4 支持基于泛型的依赖注入在 4.0 版本之前,Spring 的依赖注入已经部分支持了泛型。例如,在 Spring 3.2 中@Autowiredprivate List<MyType> beans;// 所有扩展 MyType 的 bean 都将注入但是在 4.0 以前,泛型并没有被当做 Spring 的一种 Qualifier。所以,如...转载 2019-02-25 16:36:59 · 1508 阅读 · 0 评论 -
spring怎么在controller层使用自定义的注解
前言我们在controller层经常使用@RequestMapping注解控制器方法,那么我们在实际开发中是否可以使用自定义的注解简化开发流程呢?要解决这个问题首先需要了解spring mvc的实现原理,具体可以参考博主的这篇博客Spring源码分析——SpringMVC实现简单的说,一个Http请求会被mvc框架包装成一个HandlerExecutionChain对象,而这个对象中包含了一系...原创 2019-02-27 15:12:42 · 3308 阅读 · 1 评论 -
SpringBoot集成WebSocket实时通信
转载自飞污熊的博客WebSocketWebSocket是 HTML5 开始提供的一种浏览器与服务器间进行全双工通讯的网络技术。 WebSocket 通信协议于2011年被IETF定为标准RFC 6455,WebSocketAPI 被W3C定为标准。 在WebSocket API 中,浏览器和服务器只需要要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相...转载 2019-01-02 17:06:30 · 4365 阅读 · 0 评论 -
Spring动态 注入/删除 Bean
我们通过getBean来获得对象,但这些对象都是事先定义好的,我们有时候要在程序中动态的加入对象.因为如果采用配置文件或者注解,我们要加入对象的话,还要重启服务,如果我们想要避免这一情况就得采用动态处理bean,包括:动态注入,动态删除。1 动态注入bean思路;在具体进行代码实现的时候,我们要知道,Spring管理bean的对象是BeanFactory,具体的是DefaultListable...转载 2018-12-07 15:57:35 · 10707 阅读 · 1 评论 -
Spring Bean——理解Bean的生命周期
生命周期图在bean准备就绪给我们使用之前,容器默默的执行了很多启动步骤。Spring提供了BeanFactory作为Spring容器,平常开发中我们常用其派生类ApplicationContext。尽管BeanFactory和ApplicationContext容器的注册方式不大一样(使用BeanFactory要显示的调用其addBeanPostProcessor()方法进行注册)以及加载b...转载 2018-10-17 15:26:49 · 312 阅读 · 0 评论 -
SpringBean作用域——基本作用域与web作用域
Spring的 bean有5种作用域分别是:singleton、prototype、request、session和globalSession(不常用)。其中后三种request、session、global session专用于Web应用程序。1、singleton 单例在Spring里,通过容器创建的对象默认是singleton单例(这里要注意的是singleton作用域和GOF设计模式...转载 2018-10-17 14:56:03 · 1694 阅读 · 2 评论 -
Spring Ioc 扩展——BeanPostProcessor
综述先回顾bean生命周期的这张图,看看BeanPostProcessor调用位置通过上图看到BeanPostProcessor(Bean后置处理器)两个方法在bean生命周期的位置,即:在Spring容器完成Bean实例化和属性设置后,并且在bean调用初始化方法之前或之后。因此BeanPostProcessor(Bean后置处理器)常用在:对bean内部的值进行修改;实现Bean的动态代...转载 2018-10-15 15:48:24 · 119 阅读 · 0 评论 -
Spring Aop——AspectJ的切入点表达式语言
Spring AOP 用户可能会经常使用 execution pointcut designator。执行表达式的格式如下:execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern) throws-pattern?)除了返回类型模式(上面代码片断中的ret-...转载 2018-10-18 16:39:46 · 565 阅读 · 0 评论 -
Spring事务——事务传播属性的七种行为
事务传播行为什么叫事务传播行为?听起来挺高端的,其实很简单。即然是传播,那么至少有两个东西,才可以发生传播。单体不存在传播这个行为。事务传播行为(propagation behavior)指的就是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行。例如:methodA事务方法调用methodB事务方法时,methodB是继续在调用者methodA的事务中运行呢,还是为自己开启一...转载 2018-10-18 15:45:54 · 193 阅读 · 0 评论 -
Spring事务——事务的隔离级别
数据库一致性问题数据库是要被广大客户所共享访问的,那么在数据库操作过程中很可能出现以下几种不确定情况。更新丢失(Lost update)两个事务都同时更新一行数据,一个事务对数据的更新把另一个事务对数据的更新覆盖了。比如CMS系统中,两个同时打开一篇文章进行修改,一个人先保存,另一个人后保存,后保存的就覆盖了先保存的那个人的内容,这就造成更新丢失。这是因为系统没有执行任何的锁操作,因此并发...转载 2018-10-18 15:18:54 · 346 阅读 · 0 评论 -
Spring 事务——事务的几个基本属性
事务属性上文的例子中,在声明事务时,用到了@Transactional(readOnly = false, propagation = Propagation.REQUIRED)。中间的参数readOnly,propagation我们称为事务属性。它就是对事务的基本配置。事务属性有五个方面:传播行为,隔离级别,事务超时时间,回滚规则,是否只读。由属性接口TransactionDefinit...转载 2018-10-18 15:10:24 · 397 阅读 · 0 评论 -
Spring 事务——事务管理器
事务管理器Spring只是个容器,因此它并不做任何事务的具体实现。他只是提供了事务管理的接口PlatformTransactionManager,具体内容由就由各个事务管理器来实现。Spring提供了许多内置事务管理器实现:DataSourceTransactionManager:位于org.springframework.jdbc.datasource包中,数据源事务管理器,提供对单个j...转载 2018-10-18 15:00:39 · 5908 阅读 · 0 评论 -
Spring 事务——事务介绍以及事务在Spring框架中的基本实现
事务介绍事务一般发生在和持久层打交道的地方,比如数据库。假设一个工作由两件事共同组成,那么这两件事要么全部完成,这个工作才算完成。要么全部回退到初始状态。不存在只完成一件,还有一件事没完成的。这项工作可称为一个事务。常用的场景就是银行转账。A向B转账100元这项工作由两件事组成:A帐户减100元,B账户加100元。这两件事要么同时完成,要么同时都回退到初始状态。如果只完成其中一件,另一件没完成...转载 2018-10-18 14:45:28 · 189 阅读 · 0 评论 -
Spring Ioc扩展——FactoryBean
转载自唐大麦的博客FactoryBean接口是Spring IoC容器实例化逻辑的扩展点。什么叫扩展点?还记得前面说的bean生命周期(点击回顾)吗,Spring处理Bean生命周期的回调的事件就是扩展点。往下看例子就会明白。一、区别FactoryBean和BeanFactory首先不要混淆FactoryBean和BeanFactory。BeanFactory直译是生产Bean的工厂,在S...转载 2018-10-15 11:33:34 · 89 阅读 · 0 评论 -
spring三大组件——bean core 与context
转载自BiliZhang的博客下面将详细介绍每个组件内部类的层次关系,以及它们在运行时的时序顺序。我们在使用 Spring 是应该注意的地方。Bean 组件前面已经说明了 Bean 组件对 Spring 的重要性,下面看看 Bean 这个组件式怎么设计的。Bean 组件在 Spring 的 org.springframework.beans 包下。这个包下的所有类主要解决了三件事:Bean ...转载 2018-10-15 10:27:43 · 1644 阅读 · 0 评论 -
Spring事务——声明式事务
Spring声明式事务实现过程中,在配置文件中关于事务配置总是由三个组成部分,分别是DataSource、TransactionManager和代理机制这三部分,无论哪种配置方式,一般变化的只是代理机制这部分。DataSource、TransactionManager这两部分只是会根据数据访问方式有所变化。比如使用Hibernate进行数据访问时,DataSource实际为SessionFact...转载 2018-10-18 16:49:23 · 102 阅读 · 0 评论 -
Spring Ioc扩展——BeanPostFactoryProcessor
上篇说到的BeanPostProcessor(Bean后置处理器)常用在对bean内部的值进行修改;实现Bean的动态代理等。BeanFactoryPostProcessor和BeanPostProcessor都是spring初始化bean时对外暴露的扩展点。但它们有什么区别呢?由《理解Bean生命周期》的图可知:BeanFactoryPostProcessor是生命周期中最早被调用的,远远早...转载 2018-10-15 16:45:11 · 264 阅读 · 0 评论 -
Spring实例化上下文对象
一、实例化上下文对象从前面的例子可以看到,在代码中实例化上下文对象非常简单,如下面的例子:ApplicationContext ctx = new ClassPathXmlApplicationContext( "spring-beans.xml"); FooService foo = (FooService) ctx.getBean("FooService");几个常用的类:Clas...转载 2018-10-15 17:02:40 · 1254 阅读 · 0 评论 -
Spring自动检测Bean——Componet-Scan
一、自动检测自动检测(autodiscovery) 让Spring能够自动识别哪些类需要被装配成SpringBean 从而减少在xml配置文件对 元素的使用。注:自动检测和是否使用注解无关,它并不局限应用于注解方式的编程(包括注解自动装配bean以及注解注册bean)第一步、标识用于装配的bean要想把类标识成可用于@Autowired自动装配的bean的类,采用以下注解可实现:@C...转载 2018-10-17 14:27:54 · 881 阅读 · 0 评论 -
Spring自动装配Bean——xml方式与注解方式
自动装配的概念在Spring使用中,我们在xml配置文件通过元素或元素的ref属性向bean注入另外的依赖bean。如果使用自动装配(autowiring) ,就可以减少甚至消除配置元素和元素。设置元素的autowire属性就可以设定bean的自动装配模式。自动装配有5种模式。注意:自动装配功能和手动装配要是同时使用,那么自动装配就不起作用。在xml中使用自动装配首先假设User类...转载 2018-10-17 14:13:57 · 6104 阅读 · 1 评论 -
Spring延迟初始化——lazy-init与depends-on
一、lazy-initlazy-init是延迟初始化的意思。spring中容器都是尽早的创建和配置所有的单例bean,因此当容器在启动时,就会去配置和创建单例bean。这样做的好处是在程序刚运行时就可以将配置的错误或者环境问题立刻暴露出来。当然,坏处就是启动时,因为要初始化所有的单例bean,系统开销会很大,启动过程比较慢。如果不想单例bean提前实例化,可以设置lazy-initiali...转载 2018-10-17 13:42:40 · 501 阅读 · 0 评论 -
Spring表达式语言——SPEL
Spring表达式语言(Spring Expression Language 简写SpEL)是类似于OGNL和JSF EL的表达式语言, 能够在运行时构建复杂表达式, 存取对象属性、调用方法等。所有的SpEL都支持XML和Annotation两种方式, 使用的格式为:#{SpEL expression}。用在xml上的例子:通常情况,在字段要引用外部的bean时,我们都使用ref属性指明外部b...转载 2018-10-17 13:14:26 · 410 阅读 · 0 评论 -
Spring源码分析——IOC容器
1、IOC容器的概念理解IOC容器的概念之前首先需要了解依赖翻转(又称依赖倒置)的概念许多复杂的应用都是通过多个类之间的彼此合作实现业务逻辑的,这使得每个对象都需要管理自己与其合作对象的依赖,而如果这个过程如果交给对象自身实现将会导致代码的耦合度过高。因此出现了依赖反转的概念依赖反转将对象间的依赖关系交由框架或者ioc容器实现与维护,从而在降低代码耦合度的同时提高代码的可测试性。这就叫做...原创 2018-10-19 20:01:26 · 407 阅读 · 0 评论