SpringBoot有多快?
1、第一步:启动一个新的Spring Boot项目 利用启动.spring.io创建一个“网络”项目。在“依赖项”对话框中搜索并添加“web”依赖项,如屏幕截图所示。点击“生成”按钮,下载zip,然后将其解压缩到计算机上的文件夹中。
2、执行速度快。学习springboot还要学redis的原因是redis速度非常快,每秒可执行110000次的SET操作。Redis是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型的数据库,是提供多种语言的API。
3、Spring和SpringBoot中应用程序引导的基本区别在于servlet。Spring使用 Web.xml 或 SpringServletContainerInitiators 作为它的引导入口点。Spring支持 Web.xml 引导方式以及最新的Servlet 3+方法。
4、二者主要区别是:SpringBoot提供极其快速和简化的操作,让Spring开发者快速上手。SpringBoot提供了Spring运行的默认配置。
5、Spring Boot 可以轻松创建可以“直接运行”的独立的、生产级的基于 Spring 的应用程序。我们对 Spring 平台和第三方保持固执己见的看法,因此您可以轻松上手。大多数 Spring Boot 应用程序需要最少的时间 Spring 配置。
6、spring boot的自动配置 。自动配置是spring boot的一个特色,但是也是它启动慢的一个弊病。没办法,通常好用功能全的东西,总会在一些地方上有缺陷。上面说到无用的配置多,这里要说的就是spring boot它自己装配的东西太多。
Spring源码系列(一):refresh()方法
1、XmlWebApplicationContext : 从Web应用中的XML配置文件中加载Spring Web应用上下文。本文采用的 ClassPathXmlApplicationContext 来作为Spring容器的入口。我们调试进入ClassPathXmlApplicationContext类中,找到重要的方法refresh()。
2、注册的逻辑实现在refresh()中的registerListeners()方法里面。第一步,先获取当前ApplicationContext中已经添加的 applicationListeners(SpringMVC源码中有用到),遍历添加到多播器中。
3、最终调用ContextRefresher的refresh方法。refreshEnvironment,刷新Environment里面的属性值,然后发布EnvironmentChangeEvent事件,里面包括了变动的key。我们可以通过监听这个事情,获得变动的配置key。
Spring事件监听机制源码解析
1、Spring事件监听体系包括三个组件:事件、事件监听器,事件广播器。事件:定义事件类型和事件源,需要继承ApplicationEvent。
2、在这里是还没有启动所有的监听程序。RabbitListenerEndpointRegistry对象Bean实现了SmartLifecycle接口,所以容器上下文执行完(刷新完)以后会调用实现了该接口的会滴方法start,启动消息监听。
3、Runtime.getRuntime().addShutdownHook() 可以添加自定义的shutdown hook。关于jvm关闭详细的原理分析过程请参考 java进程关闭事件监听 spring在启动过程中也是通过 Runtime.getRuntime().addShutdownHook() 来注册hook回调。
SpringSecurity登录原理(源码级讲解)
Spring Security:是一个提供身份验证,授权和保护以防止常见攻击的框架。 凭借对命令式和反应式应用程序的一流支持,它为Spring应用程序的安全提供实际标准。
servlet.Filter的任意实现。这可以是 Spring Security的任何一个过滤器,或者它可以是自己创建的一个过滤器。但是正如本书已经提到的那样,Spring Security要求至少配置四个而且可能一打或者更多的过滤器。
package org.springframework.security.web.authentication 从类图上看 AbstractAuthenticationProcessingFilter 这个类继承了 GenericFilterBean ,以及实现了 MessageSourceAware 和 ApplicationEventPublisherAware 俩个接口。
单点登录顾名思义就是在多个应用系统中,只需要登录一次,就可以访问其他相互信任的应用系统,免除多次登录的烦恼。
我们需要了解的概念,SpringSecurity中可以存在多个过滤器链,而每个过滤器链又可以包含多个过滤器 SpringSecurity中的主要过滤器 先前我们讲到,会构造出一个虚拟链路执行对应的filter。
我这里为了讲解方便设置为ROLE_ADMIN,这里不展开讲了)。如果认证失败,只需要抛出一个异常(AuthenticationException的子类),这样spring security会自动找到失败页面进行返回,对应我们上面定义的 AjaxAuthFailHandler 这个类。