![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
springboot
文章平均质量分 92
Roc Lau
这个作者很懒,什么都没留下…
展开
-
Springboot扩展点_Bean生命周期
相信大多数的java项目都会使用Spring、Springboot,可以这样回答:Springboot实际上按约定大于配置的开发原则,对Spring原来XML配置的方式进行简化、包装,可以达到开箱即用,简化开发,提高开发效率,但是其核心依然是Spring。(话锋一转,开始往Spring生命周期上引),而Spring的最重要的核心是IOC,IOC管理的对象就是Spring bean,Spring bean生命周期内的又提供了各种优秀扩展接口和内部实现,也可以根据业务需要自定义实现,非常灵活和方案。原创 2023-10-30 15:14:52 · 253 阅读 · 0 评论 -
Springboot扩展点系列_DisposableBean
从单元测试的执行结果来看,Spring容器关闭后,会触发执行DisposableBean#destroy()扩展方法的执行,所以如果我们的业务开发中,如果某些Bean在容器关闭后,需要做一些释放业务资源之类的操作,就能用到这个扩展点了。其实是这样的,你仔细观察会发现,触发Dog.destroy()方法执行并不是主线程,而是叫做SpringContextShutdownHook的线程,这里用到了多线程技术,单元测试执行完了,才触发Dog.destroy()方法执行是多线程异步执行的原因。原创 2023-10-30 15:11:29 · 273 阅读 · 0 评论 -
Springboot扩展点系列_CommandLineRunner和ApplicationRunner
2、CommandLineRunner和ApplicationRunner的扩展点方法的调用逻辑,其实也是简单易懂,先把所有CommandLineRunner和ApplicationRunner的实现类汇总到一个集合,然后循环遍历这个集合,在集合里判断,如果ApplicationRunner的实现类,则先执行;4、CommandLineRunner和ApplicationRunner触发执行时机是在Spring容器、Tomcat容器正式启动完成后,可以正式处理业务请求前,即项目启动的最后一步;原创 2023-10-27 09:22:09 · 148 阅读 · 0 评论 -
Springboot扩展点系列_FactoryBean
FactoryBean是一个工厂Bean,在需要创建比较复杂的bean的时候可以用到,BeanFactory是Spring bean容器的根接口,也就是说实现BeanFactory,可以得到一个最基础的Spring容器,Spring中的所有高级容器都继承了这个根接口。而实现了FactoryBean接口,getBean(“computeFactoryBean”)的结果的是getObject()方法中返回的结果,即computer,这就是FactoryBean如此神奇的地方。如果不是,则继续向下执行;原创 2023-10-27 09:18:56 · 190 阅读 · 0 评论 -
Springboot扩展点系列_SmartInitializingSingleton
1、定义Dog类,以setter注入方式进行属性注入,同时Dog类实现SmartInitializingSingleton接口,重写afterSingletonsInstantiated(),并在方法内部打印日志,如果在实际业务开发过程中用到了这个扩展点,相关的扩展操作逻辑就是在这个方法内实现;关于Spring bean有七种作用域:默认singleton(单例)、prototype、request、session、globalSession、application、websocket;原创 2023-10-26 15:20:09 · 43 阅读 · 0 评论 -
Springboot扩展点系列_BeanDefinitionRegistryPostProcessor
在PostProcessorRegistrationDelegate#invokeBeanFactoryPostProcessors()方法中执行完MyBeanDefinitionRegistryPostProcessor#postProcessBeanDefinitionRegistry方法后,紧接着就开始执行MyBeanDefinitionRegistryPostProcessor#postProcessBeanFactory方法了;别着急,这里拐个弯简单的解释一下,对整篇文章的理解会更顺畅。原创 2023-10-23 16:36:31 · 194 阅读 · 0 评论 -
Springboot扩展点系列_BeanPostProcessor
在程序中我们可以自定义注解并标到相应的类上,当个类注册到Spring容器中,并实例化完成后,希望触发自定义注解对应的一些其他操作的时候,就可以通过BeanPostProcessor来实现。原创 2023-10-23 16:42:48 · 419 阅读 · 0 评论 -
Springboot扩展点系列_InstantiationAwareBeanPostProcessor
最后一步内容很长,不过很简单,即按第二步分成的三类,依次注册,具体的顺序是:1:实现PriorityOrdered接口BeanPostProcessor接口的实现类、2:实现实现Ordered接口BeanPostProcessor接口的实现类、3:其他的BeanPostProcessor接口的实现类,其中MyInstantiationAwareBeanPostProcessor属于第三类;(lambda表达式的应用在Spirng的源码中应用很广泛,所以对这块不太熟悉的小伙伴可以着重研究一下)原创 2023-10-24 08:53:27 · 374 阅读 · 0 评论 -
Springboot扩展点系列_SmartInstantiationAwareBeanPostProcessor
如果预测一个错误的Class,那么程序就会报错了(举个例子:如果形参beanClass是Student.class,返回时改成了Teacher.class,报错是毫无疑问的;这一点我没有太明白,有知道的小伙伴告诉我一下哈);(感觉这个扩展点意义不大,实际上构造器分为两类:无参构造方法,有参数构造方法,无非有参数的构造方法参数至少一个以上,用哪种构造器来构造Bean我感觉区别不大,打个比方:用普通碗吃饭与用金碗吃饭,对一些人来说可能是有区别的,对我来说,吃饱就好了,什么碗我不在乎,哈哈,小伙们你觉得呢?原创 2023-10-24 08:57:13 · 163 阅读 · 0 评论 -
Springboot扩展点系列_ApplicationContextAwareProcessor
ApplicationContextAwareProcessor的注册时机,即准备BeanFactory的时候,注册的入口在AbstractApplicationContext#refresh----->AbstractApplicationContext#prepareBeanFactory方法中。1、ApplicationContextAwareProcessor实现BeanPostProcessor接口,是Spring扩展点之BeanPostProcessor的内部经典实现。原创 2023-10-25 09:18:22 · 48 阅读 · 0 评论 -
Springboot扩展点系列_PostConstruct
从以上几步的分析来看,被@PostConstruct标记的方法是怎么被执行的,这个问题回答清楚了。你就可以这么回答他:在Bean实例化、属性注入后,被@PostConstruct标记的方法是在BeanPostProcessor的扩展方法postProcessBeforeInitialization()触发执行的,具体实现类是InitDestroyAnnotationBeanPostProcessor,具体的逻辑是:先查询被@PostConstruct标记的方法,然后使用java反射去执行这个方法。原创 2023-10-25 09:20:47 · 186 阅读 · 0 评论 -
Springboot扩展点系列_InitializingBean
到这里InitializingBean#afterPropertiesSet方法和init-method是什么时候开始调用,是用什么方式来调用的呢,已经分析清楚了,同时还了解到InitializingBean#afterPropertiesSet方法和init-method有类似的效果,执行时机也比较接近,但是是两个完全不同的东西,且InitializingBean#afterPropertiesSet方法的执行时机要稍早于init-method。是用什么方式来调用的呢?原创 2023-10-26 15:13:57 · 366 阅读 · 0 评论 -
Springboot扩展点系列_BeanFactoryPostProcessor
但是把加密后的密码信息注入的数据源中,去连接mysql数据库肯定会连接异常,因为mysql并不知道你的加密方式和加密方法。从上面的AnnotationConfigApplicationContext的构造方法中,可以看到又调用了refresh(),这里实际最终被调用的是org.springframework.context.support.AbstractApplicationContext#refresh(),这个方法也是Spring容器启动的关键方法,在分析Spring相关的源码时会经常碰到。原创 2023-10-20 16:24:50 · 45 阅读 · 0 评论 -
Springboot扩展点系列_ApplicationContextInitializer
通过这篇文章,可以了解到:第一,在Spring容器被刷新前,可以通过实现ApplicationContextInitializer接口对Spring上下文环境作一些配置或操作;第二,ApplicationContextInitializer接口的实现方式有三种,可以根据项目需要选择合适的;原创 2023-10-20 16:24:21 · 294 阅读 · 0 评论 -
logback-spring.xml配置详解
1、SpringBoot日志框架市面上的日志框架;JUL、JCL、Jboss-logging、logback、log4j、log4j2、slf4j…日志门面 (日志的抽象层)日志实现JCL(Jakarta Commons Logging) SLF4j(Simple Logging Facade for Java) jboss-loggingLog4j JUL(java.util.logging) Log4j2 LogbackSpringBoot选用 SLF4j(日志抽象层)原创 2023-06-07 01:13:06 · 4733 阅读 · 1 评论 -
SpringBoot参数校验Validation
当我们想提供可靠的 API 接口,对参数的校验,以保证最终数据入库的正确性,是 必不可少 的活。比如下图就是 我们一个项目里 新增一个菜单校验 参数的函数,写了一大堆的 if else 进行校验,非常的不优雅,比起枯燥的CRUD来说,参数校验更是枯燥。这只是一个创建菜单的校验,只需要判断菜单,菜单url 以及菜单的父类id是否为空,上级菜单是否挂载正确,这样已经消耗掉了30,40行代码了,更不要说,管理后台创建商品这种参数贼多的接口。而在有嵌套校验的场景,我们使用 @Valid 注解添加到成员属性上。原创 2023-05-07 21:47:28 · 1767 阅读 · 0 评论 -
SpringBoot配置LocalDateTime格式化
在进行参数绑定的时候,会使用WebDataBinder对象。关于参数绑定的过程,有兴趣的可以跟踪DataBinder.doBind方法,在这个过程中会对前台传输的值进行类型转换为目标参数需要的类型。在WebDataBinder进行参数绑定的时候就会使用不同的格式化器即不同的convert进行参数类型转换。当返回json格式的时候,Jackson就会根据配置文件中日期格式化的配置对结果进行处理。很显然是在参数绑定的时候没有找到合适的转换器把String转换为对应的格式。原创 2023-04-06 21:54:06 · 3473 阅读 · 0 评论 -
Spring AOP常用代表类理解
Spring AOP常用代表类理解原创 2023-02-16 01:38:33 · 268 阅读 · 0 评论 -
Spring AOP之Advisor、PointcutAdvisor、IntroductionAdvisor、IntroductionInterceptor
Spring AOP之Advisor、PointcutAdvisor、IntroductionAdvisor、IntroductionInterceptor原创 2023-02-16 01:38:48 · 1401 阅读 · 0 评论 -
Spring AOP的底层代理JdkDynamicAopProxy和ObjenesisCglibAopProxy
JdkDynamicAopProxy和ObjenesisCglibAopProxy原创 2023-01-16 10:11:52 · 273 阅读 · 0 评论 -
Spring AOP中Joinpoint、MethodInvocation、Interceptor、MethodInterceptor理解
Spring AOP的Joinpoint、MethodInvocation、Interceptor、MethodInterceptor原创 2022-12-07 14:09:25 · 2046 阅读 · 0 评论 -
@Transactional和普通自定义切面执行顺序的思考
@Transactional和普通自定义切面执行顺序的思考原创 2022-08-28 13:06:45 · 614 阅读 · 0 评论 -
@Transactional事务不生效的情况小结
@Transactional事务不生效的情况小结原创 2022-08-28 13:06:19 · 3711 阅读 · 0 评论 -
springboot中过滤器异常无法被全局异常捕获
springboot中过滤器异常无法被全局异常捕获原创 2022-08-28 13:04:43 · 2387 阅读 · 0 评论