Spring
文章平均质量分 62
xlj3
静以修身,俭以养德
展开
-
SpringSecurity权限记录
WebSecurityConfigurerAdapter1、访问过滤器code模式访问:http://localhost:8000/oauth/authorize?response_type=code&client_id=test_client&scope=read&state=test&redirect_uri=http://baidu.comAnonymousAuthenticationFilter拦截进入登陆页面if (SecurityContextHolder原创 2022-01-24 17:11:47 · 872 阅读 · 0 评论 -
spring注入实验
public interface TestInterface<T> { void test();}@Scope("prototype")@Component("top")public class TestSub1 implements TestInterface<TestSub1>{ @Override public void test() { System.out.println("test1"); }}@Componen原创 2021-12-31 17:08:47 · 471 阅读 · 0 评论 -
@Transactional导致 dynamic-datasource-spring-boot-starter失效原因分析
1、dynamic-datasource@DB切面是可以将数据源信息push到DynamicDataSourceContextHolder类的ThreadLocal<Deque> LOOKUP_KEY_HOLDER中2、如果controller调用service,且controller -->Aservice–>Bservice–>Bdao(A表示A数据源,B表示B数据源),当且仅当Aservice使用@Transactional进行事物管理时,当controller --&原创 2021-11-03 17:40:36 · 2854 阅读 · 1 评论 -
PropertySources
备忘记录查找类PropertySources PropertyResolver存储MapPropertySource过程原创 2021-06-04 17:14:16 · 147 阅读 · 0 评论 -
spring常用代码
import java.util.Map;/** * RPC Server * <p> * 1:如果bean实现了 BeanNameAware接口,则调用BeanNameAware.setBeanName() * 2:如果bean实现了BeanFactoryAware接口,则调用BeanFactoryAware.setBeanFactory() * 3:如果bean实现了ApplicationContextAware接口,则调用ApplicationContextAware.se.原创 2021-06-04 17:11:23 · 325 阅读 · 0 评论 -
循环依赖-Autowired方式
@Autowired方式例子@Componentpublic class TestA { @Autowired private TestB testB;}@Componentpublic class TestB { @Autowired private TestA testA;}TestA开始,AbstractBeanFactory.doGetBean方法开始分析,getSingleton一级缓存获取beanName,结果nullprotected原创 2021-06-04 17:03:32 · 718 阅读 · 0 评论 -
循环依赖构造器方式
文章目录@构造器方式例子@构造器方式例子@Componentpublic class TestA { private TestB testB; public TestA(TestB testB) { this.testB = testB; }}@Componentpublic class TestB { private TestA testA; public TestB(TestA testA) { this.te原创 2021-06-04 17:02:46 · 417 阅读 · 1 评论 -
特殊情况下会导致循环依赖失效
文章目录来源@Async方式例子来源spring 默认使用三级缓存解决循环依赖问题。特殊情况下会导致循环依赖失效。 比如 1.互相循环依赖使用构造器注入。 2. 通过类似 @Async 注解在对象初始化时期被生成代理对象替换原对象原因@Async方式例子@Componentpublic class TestA { @Autowired private TestB testB; @Async public String test() { retur原创 2021-06-04 17:01:39 · 757 阅读 · 0 评论 -
springboot类加载关系以及资源加载bug分析
加载器关系当使用 tomcat 容器时,运行时上下文类加载器是 TomcatEmbeddedWebappClassLoader,其父类加载器是 LaunchedURLClassLoader。在IDEA中运行时,上下文类加载器是 AppClassLoader,即应用程序类加载器。TomcatServletWebServerFactory设置TomcatEmbeddedWebappClassLoader类加载的时候,会设置parentclassloader即LaunchedURLClassLoader,因为原创 2021-05-25 20:20:50 · 855 阅读 · 0 评论 -
Springboot IDEA启动分析
文章目录链路分析核心加载类PathMatchingResourcePatternResolverIDEA启动分析idea启动后对包进行格式化处理获取路径下的File[]文件然后进行antPathMatcher匹配class文件返回Set集合包装成FileSystemResource循环Resource包装成MetadataReaderjar -jar命令启动Java资源管理URL如何解析各种协议`org.springframework.core.io.Resource`启动类JarLauncher不同环境获原创 2021-05-24 19:09:54 · 467 阅读 · 5 评论 -
ServiceLoader SPI的简单认知
写了这么长时间的代码,竟然没有用过jdk SPI的ServiceLoader,深表遗憾!为什么写这个,因为在看Sentinel配置代码的时候,看到了这个,挺好用的。用法:在jar包中,resources 中建立 META-INF/services文件夹,文件名作为接口的全限定名 public static <S> ServiceLoader<S> getServiceLoader(Class<S> clazz) { if原创 2020-07-16 20:48:42 · 343 阅读 · 0 评论 -
Nacos 配置变更http异步通知集群其他服务,并不是长链接
配置变更接口:/nacos/v1/cs/configs获取注册中心服务信息:private static final Executor EXECUTOR = Executors.newScheduledThreadPool(100, new NotifyThreadFactory());Queue<NotifySingleTask> queue = new LinkedList<NotifySingleTask>(); for (int i =原创 2020-07-07 14:21:35 · 952 阅读 · 0 评论 -
Nacos server事件分发EventDispatcher代码小结
EventDispatcher类,作为事件分发器。AbstractEventListener静态内部抽象类,继承该类后实例化的子类,将在该类中的构造方法被注册到EventDispatcher中,这一点以前我没有想到,挺好的写法,设计模式是监听器模式,通过事件调用具体事件的监听类。对于Spring监听器的实现也是类似,只不过spring监听器将事件作为参数与监听器绑定,通过监听器轮询反射获取参数类型进行比对,而nacos事件分发监听是直接通过监听器与事件类进行成员变量的绑定,注册监听事件的过程有点绕,过程原创 2020-07-07 14:06:44 · 679 阅读 · 0 评论 -
发现stream里边一个好用的retry组件
说明:代码设计的挺好的,以后可以参考,在此记录下翻译说明使用重试语义简化操作执行的模板类。Retryable操作封装在RetryCallback接口的实现中,并使用提供的execute方法之一执行。默认情况下,如果抛出任何异常或异常的子类,则重试操作。可以使用setRetryPolicy(RetryPolicy)方法更改此行为。另外,在默认情况下,每个操作最多重试三次,其间没有后退。可以使用setRetryPolicy(RetryPolicy)和setBackOffPolicy(Back原创 2020-07-06 16:56:09 · 463 阅读 · 0 评论 -
ThreadPoolTaskScheduler 简单的记录
initializeBean方法:protected Object initializeBean(final String beanName, final Object bean, @Nullable RootBeanDefinition mbd) { // 省略。。。。 // 对于实现BeanNameAware接口的类,将执行setBeanName方法, // 我觉的setBeanName的作用更倾向于日志方面的记录,比如Spring async线程池原创 2020-07-03 18:31:17 · 850 阅读 · 0 评论 -
sentinel责任链
关于插槽Slot类图分析,其中使用的建造者模式、责任链模式。原创 2020-07-06 11:54:44 · 441 阅读 · 0 评论 -
springgateway限流-令牌桶算法
限流配置参见:https://blog.csdn.net/forezp/article/details/85081162https://cloud.spring.io/spring-cloud-gateway/2.2.x/reference/html/#the-requestratelimiter-gatewayfilter-factoryhttp://www.ityouknow.com/springcloud/2019/01/26/spring-cloud-gateway-limit.ht原创 2020-06-26 21:19:07 · 1320 阅读 · 0 评论 -
SpringGateway转发过程
为什么写?就想看看springgateway的限流咋做的?但是看着看着就想知道转发过程,然后就写了,总之:转发是通过重组请求头header、uri等信息建立netty客户端连接的访问过程。Lettuce相较于Jedis有哪些优缺点?Lettuce 和 Jedis 的定位都是Redis的client,所以他们当然可以直接连接redis server。Jedis在实现上是直接连接的redis server,如果在多线程环境下是非线程安全的,这个时候只有使用连接池,为每个Jedis实例增加物理连接原创 2020-06-26 19:24:41 · 3680 阅读 · 0 评论 -
一个SpringBoot里边函数式编程的例子
为什么写因为看到了SpringBoot一个关于函数式编程的完美例子,以前很少用到,但是写的真是太美了,就像美女一样,真养眼。先看下lambda常用的函数接口接下来看看她长什么样子public final class PropertyMapper { private static final Predicate<?> ALWAYS = (t) -> true; private static final PropertyMapper INSTANCE = new原创 2020-06-26 12:41:50 · 1195 阅读 · 0 评论 -
Druid的数据库连接获取过程以及是否可热切换域名
为什么写?我就想看看,到底和普通建立当有啥区别,另外是否可以热切换域名普通的Mysql创建连接的过程:public class Conn { Connection con; public Connection getConnection() { try { Class.forName("com.mysql.jdbc.Driver"); System.out.println("数据库驱动加载成功");原创 2020-06-25 19:29:13 · 1133 阅读 · 0 评论 -
关于@EnableFeignClients的认识
今天起了大早,偶尔发现,项目忘记加入注解@EnableFeignClients,导致启动失败,于是想知道它做了啥呢?为什么项目没有加载相关bean?原来@EnableFeignClients是通过@Import把FeignClientsRegistrar注入到IOC容器中,当项目启动执行invokeBeanFactoryPostProcessors--》invokeBeanDefinitionRegistryPostProcessors—》ConfigurationClassPostProc原创 2020-06-24 10:37:37 · 5439 阅读 · 0 评论 -
回顾篇-SpringBoot-Tomcat
为什么写?今天看了Spring实战第五版,里边有句话如下:传统的基于Servlet的Web框架,如Spring MVC,在本质上都是阻塞和多线程的,每个连接都会使用一个线程。在请求处理的时候,会在线程池中拉取一个工作者(worker)线程来对请求进行处理。(读到这里没啥疑问,但是接下来说的我有点疑惑)同时,请求线程是阻塞的,直到工作者线程提示它已经完成为止。我就在想SpringBoot默认内置的Tomcat应该是Nio,请求线程不应该是阻塞的,应该是同步非阻塞的,于是变回顾下请求过程。To原创 2020-06-23 11:37:22 · 335 阅读 · 0 评论 -
使用常见的反应式操作
import lombok.Data;import org.junit.Test;import reactor.core.publisher.Flux;import reactor.core.publisher.Mono;import reactor.core.scheduler.Schedulers;import reactor.test.StepVerifier;import reactor.util.function.Tuple2;import java.time.Duratio...原创 2020-06-22 18:15:20 · 1140 阅读 · 0 评论 -
关于Springboot Transactional cglib代理生成过程
一:候选代理器candidateAdvisors的准备当创建bean实例准备实例化initializeBean的时候,会进行后置处理器的调用,其中AbstractAdvisorAutoProxyCreator是特定bean构建AOP代理的通用自动代理创建器。而代理处理器是通过DefaultListableBeanFactory调用doGetBeanNamesForType方法主要判断了Advisor.class.isAssignableFrom(Target.class)获取的。二:candidat原创 2020-06-17 18:15:27 · 1211 阅读 · 0 评论 -
探究Spring Cloud Ribbon默认负载均衡策略实现的过程
1: 简介Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现。那么哪些路由配置会走负载均衡器呢?答案是配置具有lb://服务名,这样的配置会走,因为LoadBalancerClientFilter会进行判断url的前缀是否含有lbif (url == null|| (!"lb".equals(url.getScheme()) && !"lb".equals(schemePrefix))) { return原创 2020-06-11 21:34:39 · 2027 阅读 · 0 评论 -
Spring监听器的处理过程
监听容器是如何初始化的?当程序执行到AbstractAutowireCapableBeanFactory(BeanPostProcessor的实现类,保证后续bean可能被包装)initializeBean()方法时,轮询执行postProcessAfterInitialization ,该BeanPostProcessor是在容器执行registerBeanPostProcessors时候内置加载到bean工厂的beanFactory.addBeanPostProcessor(new Appli原创 2020-06-10 21:18:42 · 485 阅读 · 0 评论 -
Spring Boot自动配置
原理是什么?原理就是通过loadFactoryNames读取实现配置好的spring.factories,实例化其中的类,对于不同的实现有不同的处理逻辑,比如SpringBoot启动是需要的ApplicationContextInitializer的初始化处理,是调用相关类的initialize方法。又比如Nacos的spring.factories文件的内容仅仅是实例化过程。文件配置以及是如何读取的?启动过程读取spring.factories文件,改文件存储格式如下:# Initia.原创 2020-06-10 17:26:12 · 416 阅读 · 0 评论 -
利用Nacos服务获取配置逻辑的特点,实现动态配置kafak认证
我要做什么?实现Nacos动态配置kafka认证信息,使每个微服务读取同一个kafka配置,并生成文件注入到环境变量中。为什么要这么做?首先我们看下Kafka-java接入demo,如图:1.prod_client_jaas.conf文件KafkaClient{ org.apache.kafka.common.security.plain.PlainLoginModule required username="kafka_1" password="密码"; };原创 2020-06-10 14:09:20 · 3379 阅读 · 0 评论 -
反应式编程reactor简单的概念
关于Reactor的介绍Reactor是Spring中的一个子项目是一个基于java的响应式编程框架关于反应式编程的思想反应式编程框架主要采用了观察者模式,为了方便下面理解Mono和Flux,也可以理解为Publisher(发布者也可以理解为被观察者)主动推送数据给Subscriber(订阅者也可以叫观察者),如果Publisher发布消息太快,超过了Subscriber的处理速度,如何处理。这时就出现了Backpressure(背压-----指在异步场景中,被观察者发送事件速度远快于观察者的处原创 2020-06-10 10:23:27 · 529 阅读 · 0 评论 -
通过springboot autoconfig分析bean实例化过程的案例
分析案例前提所参考的例子,Spring Boot中的自定义start pom,SpringBoot学习笔记(3) Spring Boot 运行原理,自动配置,然后我又看了下nacos的源码,发现原来也都是这做的截图如下:当然最终的目的我是想知道@Bean helloService实例化过程/** * @desc 自定义自动配置加载类: * 1、编写属性配置类,读取application.properties文件初始化属性 * 2、编写service类。 * 3、编写自定义自动加.原创 2020-06-07 19:28:19 · 675 阅读 · 1 评论 -
org.springframework.context.ApplicationContextAware使用理解
一、这个接口有什么用?当一个类实现了这个接口(ApplicationContextAware)之后,这个类就可以方便获得ApplicationContext中的所有bean。换句话说,就是这个类可以直接获取spring配置文件中,所有有引用到的bean对象。二、怎么用?举个例子吧:例如我有一个方法类AppUtil,这个方法类中需要使用到的ApplicationContext中的某个转载 2016-11-09 20:28:03 · 286 阅读 · 0 评论 -
Spring中ApplicationContext加载机制和配置初始化
Spring中ApplicationContext加载机制。 加载器目前有两种选择:ContextLoaderListener和ContextLoaderServlet。 这两者在功能上完全等同,只是一个是基于Servlet2.3版本中新引入的Listener接口实现,而另一个基于Servlet接口实现。开发中可根据目标Web容器的实际情况进行选择。转载 2016-11-09 20:20:54 · 3512 阅读 · 0 评论 -
spring官网下载教程新
原创 2016-11-09 11:49:12 · 417 阅读 · 0 评论 -
Introspector内存溢出的原理解析
JavaBeans Introspector是一个类,位置在Java.bean.Introspector,这个类的用途是发现java类是否符合javaBean规范,也就是这个类是不是javabean。具体用法可以参照jdk文档;上面的意思就是,如果有的框架或者程序用到了JavaBeans Introspector了,那么就启用了一个系统级别的缓存,这个缓存会存放一些曾加载并分析过的javabe原创 2016-08-09 17:55:45 · 2394 阅读 · 0 评论 -
DI/IOC
控制反转/依赖注入,主要说的是通过java的反射机制将xml文件解析,主动解释依赖关系,并实例化相关beanpackage com.bjsxt.spring;import java.lang.reflect.Method;import java.util.HashMap;import java.util.List;import java.util.Map;原创 2016-08-04 10:29:03 · 419 阅读 · 0 评论 -
web容器初始化最后阶段执行refresh()
web容器初始化最后阶段执行refresh()方法,单提出来分析下:refresh()方法主要为IoC容器Bean的生命周期管理提供条件,Spring IoC容器载入Bean定义资源文件从其子类容器的refreshBeanFactory()方法启动,所以整个refresh()中“ConfigurableListableBeanFactory beanFactory =obtainFre原创 2016-08-17 21:19:43 · 1093 阅读 · 0 评论 -
Spring的ContextLoderListener分析研究
1:web.xml配置 spring监听器 org.springframework.web.context.ContextLoaderListener org.springframework.web.util.IntrospectorCleanupListener contextConfigLocation classpath原创 2016-08-17 15:13:31 · 620 阅读 · 0 评论 -
Spring Security学习一
首先我们为Spring Security专门建立一个Spring的配置文件,该文件就专门用来作为Spring Security的配置。使用Spring Security我们需要引入Spring Security的NameSpace。beans xmlns="http://www.springframework.org/schema/beans" xmlns:security="http:转载 2016-08-04 16:22:20 · 360 阅读 · 0 评论 -
spring默认就能行,没有就新建,有了就一起用一个事务(service调用service),一方错都回滚
@Transactional 注解是用来指定接口、类或方法必须拥有事务语义的元数据。 如:“当一个方法开始调用时就开启一个新的只读事务,并停止掉任何现存的事务”。 默认的 @Transactional 设置如下:事务传播设置是 PROPAGATION_REQUIRED事务隔离级别是 ISOLATION_DEFAULT事务是 读/写事务超时默认是依赖于事务系统转载 2016-11-15 23:14:09 · 3605 阅读 · 0 评论 -
运用@Transactional,自己抛出异常时不会回滚的原因
近日测试用例,发现这样一个现象:在业务代码中,有如下两种情况,比如:throw new RuntimeException("xxxxxxxxxxxx"); 事务回滚throw new Exception("xxxxxxxxxxxx"); 事务没有回滚 自以为很了解事务,或许时间久远的缘故,没分析出来何故,遂查阅了下资料,写下了如下的内容,供参考:转载 2016-11-15 20:23:35 · 8145 阅读 · 1 评论