Spring 源码分析(六)——Bug?getBean取出的Bean居然未经初始化

Spring 是线程安全的,支持多线程并发调用。但在某种特殊情况下,使用 BeanFactory 的 getBean 方法,我成功拿到了未经初始化的 Bean(是BUG,亦或是出于某种原因考虑的特性?)。

Spring 源码分析(五)——Spring三级缓存的作用分别是什么?

Spring 的三级缓存是经典面试题,也会看到一些文章讲三级缓存与循环依赖之的关系。那么,三级缓存分别存储的什么呢?他们的作用又分别是什么?

Spring 源码分析(四)——Spring 如何解决循环依赖

Spring 如何解决循环依赖这是一个非常经典的面试问题,那么 Spring 是如何解决循环依赖问题的呢?又是否能够让其解决循环依赖的方法失效呢?

Spring 源码分析(三)——Bean 的全生命周期流程

在 Spring 框架中,容器可以对 Singleton 作用域下的 bean 进行生命周期管理,对 bean 的创建、初始化和销毁进行控制。本文讲述 bean 的生命周期全过程,详细描述了生命周期过程中 spring 开放的自定义切入接口。

Spring 创建 Bean 的三种方式

在使用 Spring 框架后,对象以 Bean 的形式统一交给 IOC 容器去创建和管理。现阶段主流的方式是基于 SpringBoot 框架,基于注解的方式实现 Bean 的创建,但在原生 Spring 框架中其实存在三种创建 Bean 的方式。

Spring 源码分析(二)——GenericBeanDefinition 分析

BeanDefinition 中存储着 Bean 的定义信息,它具有属性值、构造函数参数值以及具体实现 Bean 提供的进一步信息,在学习 Spring 的 Bean 初始化流程之前,还是非常有必要先了解一下 BeanDefinition。

全文检索工具 Lucene 入门

最近在了解 Halo 博客后端源码,而全文检索是 Halo 做的比较差的一块内容,仅通过数据库的模糊查询来实现文章检索。对于搜索引擎之前了解的也不多,所以开始入门 Lucene 检索引擎,如果可以的话准备将该引擎应用于 Halo 之上。

SpringBoot 通过代理创建接口的实现类 Bean

需要实现的功能是使用指定的 SDK 开发包来访问其他服务的资源,这种场景其实和Mapper、Feign 类似。所以,希望也通过接口上配置注解的方式实现。 所以在本文使用了三个注解: @RkproblemMapperScan :自定义的注解,用于指定要扫描的包名; @RkproblemMapper :自定义的注解,用于标记当前接口需要被代理; @RequestMapping :SpringMvc 的注解,用于标记当前方法需要被代理,以及代理的 url。

Shiro系列(二)——Shiro 多 Realm 实现

本文基于上一篇文章《 Shiro + Springboot + JWT 的整合》延续,示例项目也是在上篇文章的基础上扩展而来的。 一个系统一般都具有多种用户类型,如管理员、普通用户和运营者账号等,这些用户都存储在不同的表中。当然,通过对 Token 的内容进行条件判断,一个 Realm 是可以直接实现多个账号登录的,但是这样将导致不同用户的登录完全耦合在一起,这不是我们想看到的,所以有了多 Realm 的需求,并且 Shiro 是支持多 Realm 的。 但是如果有多个 Realm,Shiro 将对每个都进认证,而我们希望的是管理员。用户等都只调用自己的 Realm,所以对这些地方的逻辑要稍微做些改动。

Shiro系列(一)——Shiro + Springboot + JWT 整合

本文的出现表示不再进行 Spring Security Oauth 实现的研究了,原因是原开源项目已经被废弃了不再更新了,而且 Oauth 实现的内容有些奇怪,新的项目 spring-authorization-server 目前才发布到 0.1.0,默认只提供了基于内存的实现,个人认为还不是很完善,不适合用到项目中。而且 Spring Security 的 Oauth 流程都实现了,要修改还得从新研究 spring-authorization-server 的实现逻辑,然后进行修改定制,太耗费精力了,不如使用 Shiro 自己实现 Oauth 的逻辑。 本文作为 Shiro 入门文章,主要描述 Shiro 如何整合 JWT 实现登录校验问题,还有 Shiro 的认证+授权模式对 JWT 并不是很友好。

Spring Security系列(五)——Oauth2使用JWT生成Token无法指定授权范围的解决方法

写在前面Spring Oauth 提供了对 jwt 的支持,要实现 jwt 功能很简单,但是在指定授权范围时将会遇到无法指定授权范围的问题,本文主体描述的是如何解决这个问题。本文依赖环境:<!-- spring-security-oauth2 2.3.4.RELEASE --><d

Spring Security系列(四)——Spring Oauth2实现登录同时授权、自定义授权界面

本文环境: org.springframework.cloud:spring-cloud-starter-oauth2:2.2.4.RELEASE本文场景: 希望实现类似 QQ 的登陆并授权功能,但是将 /oauth/authorize 路径加入 permitAll 没有生效,加入 web.igno

Spring Security系列(三)——WebFlux配置方式以及多登陆入口实现

本文场景: 使用Spring Security做权限控制,系统包含普通用户和系统管理员两种类型,希望有不同的登录入口;并且在Spring Gateway上配置,Gateway使用的是WebFlux,无法兼容MVC,所以使用WebFlux配置Security。纯记录,目前项目还是小demo,贴的示例代

Spring Security系列(二)——过滤器链分析以及创建多个登陆入口

写在前面本文场景: 希望在网关上实现security统一进行权限认证,后续的服务间交互不再进行权限认证。但是系统有两个类型的账号,一个是普通用户,一个是系统后台管理员,完全是两个类型,希望创建给两个不同的登陆入口分别给两个类型的账号登录使用。想到的解决方法有两个:网关上的security想办法创建多

Spring Security系列(一)——登录认证基本配置

1. 开启Security@EnableWebSecurity@Configurationpublic class UserWebSecurityConfiguration extends WebSecurityConfigurerAdapter { @Resource private

SpringBoot使用Java修改端口、项目打包

本文环境1.SpringBoot 2.2.62.jdk 1.8.0_241一、使用java修改端口通过实现WebServerFactoryCustomizer<ConfigurableWebServerFactory>接口实现,springboot2.X之前的版本会有所不同。@Sprin

Springboot关闭默认的日志输出

本文环境springboot 2.2.6jdk 1.8.0_241一、配置application.yml在resources目录下新建application.yml文件(或:application.properties),添加如下内容:logging.level.[包名]: OFF# 例如,OFF可

Apache ignite笔记(二)——持久化

本文环境:Apache ignite 2.8.0jdk 1.8.0_241一、开启持久化java方式:// Ignite persistence configuration.DataStorageConfiguration storageCfg = new DataStorageConfigurat

Apache ignite笔记(一)——集群:集群发现、配置监听端口、对等类

本文环境Apache ignite 2.8.0jdk 1.8.0_241一、集群发现1.1 基于静态ip集群可采用xml或java两种方式配置。xml配置方式:<beans xmlns="http://www.springframework.org/schema/beans"

mybatis连接工厂java类实现

写在前面很久以前在有道云笔记上写的笔记,打算放弃它了,将笔记迁移到这里来。文章可能还有很多不足,请大家谅解,欢迎大佬提意见。本文使用到的东西mybatisjava1.正文package com.etc.util;import java.io.InputStream;import java.sql.C

MyBatis通过注解实现Mapper映射器

写在前面很久以前在有道云笔记上写的笔记,打算放弃它了,将笔记迁移到这里来。文章可能还有很多不足,请大家谅解,欢迎大佬提意见。本文使用到的东西MyBatisjava 1.注解与xml映射器的比较注解相比于xml配置的优点:a 灵活,代码提示好b 分工合作。将实现类和对应的配置是同一文件,由同样的开发人

MyBatis一级缓存和二级缓存

写在前面很久以前在有道云笔记上写的笔记,打算放弃它了,将笔记迁移到这里来。文章可能还有很多不足,请大家谅解,欢迎大佬提意见。本文使用到的东西MyBatisjava1.一级缓存默认是开启的,--不同SqlSession缓存不能共享​ MyBatis 默认开启了一级缓存,一级缓存是在SqlSession

MyBastis映射器的高级应用

写在前面很久以前在有道云笔记上写的笔记,打算放弃它了,将笔记迁移到这里来。文章可能还有很多不足,请大家谅解,欢迎大佬提意见。本文使用到的东西MyBastisjavaSQL server 20121.正文resultMap标签中的collection-属性映射到其他映射器的查询语句示例项目文件:链接:

MyBatis映射器中select等标签中sql的高级应用

写在前面很久以前在有道云笔记上写的笔记,打算放弃它了,将笔记迁移到这里来。文章可能还有很多不足,请大家谅解,欢迎大佬提意见。本文使用到的东西MyBatisjava1.正文在映射其中,有select、update等标签,可以在这些标签中写sql查询语句sql模糊查询实现在映射器中不能直接连接字符串实现

MyBatis基础,映射器.xml文件详解

写在前面很久以前在有道云笔记上写的笔记,打算放弃它了,将笔记迁移到这里来。文章可能还有很多不足,请大家谅解,欢迎大佬提意见。本文使用到的东西MyBatisjava1.映射器基础头文件<?xml version="1.0" encoding="UTF-8"