
spring
文章平均质量分 81
自驱
ALOHA HEJA HE
展开
-
【Spring】JSR-250 对Bean的生命周期影响@PostConstruct 、@PreDestroy
1 面试细节源码(生命周期:初始化如何完成的?)由上图初始化部分,跟进得到继续跟进初始化 invokeInitMethods 方法2 初始化小结1 初始化顺序一定是:@PostConstruct--->InitializingBean#afterPropertiesSet() -->自定义init-method 2 关于@PostConstruct 、@PreDestroy 来自 JSR-250 特征 3 参考UML图3 面试细节源码(生命周期:销毁方法如何注册原创 2021-02-19 11:31:12 · 188 阅读 · 0 评论 -
【Spring】之@PostConstruct , InitializingBean, initMethod,@PreDestroy,DisposableBean,destroyMethod初始化销毁
1 实验环境 spring-beans 5.3.1 + 代码package com.learn.webtemplate;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.DisposableBean;import org.springframework.beans.factory.InitializingBean;import org.springf原创 2020-12-12 16:46:26 · 364 阅读 · 1 评论 -
【Spring】IOC 过程中 @Autowired 如何从多个实现中确定要注入的实例bean?@Primary的作用
1 实验code @Autowired private AbClient myAbClient;2 结果:org.springframework.beans.factory.support.DefaultListableBeanFactory#determinePrimaryCandidate主要依据Bean定义是否是org.springframework.beans.factory.support.DefaultListableBeanFactory#isPrimary ...原创 2020-12-02 18:47:52 · 867 阅读 · 0 评论 -
【Spring】Spring事务代理bean的创建源码分析--IOC注入
1 先了解下 先来了解一个SPIorg.springframework.beans.factory.config.BeanPostProcessororg.springframework.beans.factory.config.InstantiationAwareBeanPostProcessor都是对spring bean 初始化前后的处理。 注意区分实例化,设置和初始化。三个顺序依次进行。2 Spring事务代理AnnotationAwareAspectJAutoProxyCreato原创 2020-11-28 12:34:24 · 468 阅读 · 3 评论 -
掉进了Spring @Configuration 坑里,导致阿里云 RocketMq 消费者状态(同一个进程出了两client)异常
掉进了Spring @Configuration 坑里,导致阿里云 RocketMq 消费者状态(同一个进程出了两client)异常1 案发现场复现代码@Configurationpublic class BeanConflict { @Bean("MyAtomic1") public MyAtomic getMyAtomic(@Value("${OONN}") String oonn){ System.out.println(oonn);原创 2020-11-27 20:41:01 · 891 阅读 · 1 评论 -
【Spring】扩展点之 BeanPostProcessor bean初始化时给你的小宇宙
1 从哪里来?Spring 5.1.6在获取 BeanFactory 的 obtainFactory() 方法结束后的 prepareBeanFactory(factory),大家仔细看会发现,Spring 往容器中添加了这两个 BeanPostProcessor:ApplicationContextAwareProcessor、ApplicationListenerDetector。源码入口org.springframework.context.support.AbstractApplicat原创 2020-11-26 09:59:42 · 210 阅读 · 0 评论 -
【Spring】前后端参数转换Converter OR ConversionService
最有用的场景就是,它用来将前端传过来的参数和后端的 controller 方法上的参数进行绑定的时候用。像前端传过来的字符串、整数要转换为后端的 String、Integer 很容易,但是如果 controller 方法需要的是一个枚举值,或者是 Date 这些非基础类型(含基础类型包装类)值的时候,我们就可以考虑采用 ConversionService 来进行转换。<bean id="conversionService" class="org.springframework.conte原创 2020-11-26 08:55:45 · 401 阅读 · 0 评论 -
【Spring】Spring bean 4种初始化回调和4种销毁回调方案
参考:https://beijingngcc.blog.youkuaiyun.com/article/details/110160238https://javadoop.com/post/spring-ioc原创 2020-11-26 08:48:40 · 174 阅读 · 0 评论 -
【不懂就画一千零一夜】Spring bean的生命周期,一图搞定
原创 2020-11-26 08:45:35 · 151 阅读 · 0 评论 -
Spring AOP TX(Transactional) 事务处理源码阅读
0 实验环境:jdk 1.8 mysql 5.7 spring-tx-5.1.6调试代码:// spring boot 注解启动@EnableTransactionManagement// controller @RequestMapping(value = "/add/ad", method = RequestMethod.GET) @ResponseBody public String addAd() { transactionTest.doTx(); return "a原创 2020-11-25 17:57:23 · 644 阅读 · 0 评论 -
Spring IOC 初始化过程(笔记)
1 从ClassPathXmlApplicationContext 的构造方法说起---->refresh方法 ---->同步锁内依次进行:beanName-> beanDefinition 的 map 定义解析即(ConfigurableListableBeanFactory beanFactory) --->设置类加载器同时添加几个BeanPostProcessor----->postProcessBeanFactory(beanFactory); BeanFact原创 2020-11-25 09:35:36 · 574 阅读 · 0 评论 -
【DRDS分布式事务】分布式事务
1 分布式事务2 使用// 1import org.springframework.jdbc.datasource.DataSourceTransactionManager;import org.springframework.transaction.TransactionDefinition;import javax.sql.DataSource;import java.sql.Connection;import java.sql.SQLException;import java.原创 2020-05-24 15:51:41 · 792 阅读 · 0 评论 -
com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "desc"
1 直接给出两个解决方案import java.io.IOException;public class SerializeTest { @Data static class User{ private String name; private String desc; } @Data @JsonIgnorePro...原创 2020-04-13 16:21:23 · 350 阅读 · 0 评论 -
【Spring】Bean的创建和对象关系建立
1 Bean的创建时序图2 Bean对象关系创建3 UML 图4 入口点org.springframework.context.support.AbstractApplicationContext#refreshorg.springframework.context.support.AbstractApplicationContext#finishBeanFact...原创 2019-12-15 10:58:22 · 259 阅读 · 0 评论 -
【Spring 设计模式】AOP中涉及到的策略模式
JdkDynamicAopProxy 和 Advised 接口有关系,体现在Advised的子类AdvisedSupport!原创 2019-12-15 10:21:47 · 358 阅读 · 0 评论 -
【@InitBinder】spring 自定义属性编辑器
1 使用步骤 A 扩展点 Controller中增加 @InitBinder @Override public void initBinder(WebDataBinder binder) { super.initBinder(binder); // http post 请求中属性变量的自定义编辑器 binder.r...原创 2019-10-31 08:45:45 · 385 阅读 · 0 评论 -
【构建整个 Ioc 容器】Ioc 容器如何工作 ?如何创建 BeanFactory 工厂?如何创建 Bean 实例并构建 Bean 的关系网?
1 如何创建 BeanFactory 工厂Ioc 容器实际上就是 Context 组件结合Core和Beans两个组件共同构建了一个 Bean 关系网,如何构建这个关系网?构建的入口就在 AbstractApplicationContext 类的 refresh(公共模版)方法中。这个方法的代码如下:public void refresh() throws BeansException...原创 2019-10-18 00:24:23 · 243 阅读 · 0 评论 -
【Ioc 容器的扩展点】有哪些扩展点呢?Spring 如何调用到这些扩展点的?让 Bean 对象有一定的扩展性!
对 Spring 的 Ioc 容器来说,主要有:BeanFactoryPostProcessor, BeanPostProcessor。他们分别是在构建 BeanFactory 和构建 Bean 对象时调用。还有就是 InitializingBean 和 DisposableBean, 他们分别是在 Bean 实例创建和销毁时被调用。用户可以实现这些接口中定义的方法,Spring 就会在适当的时候...原创 2019-10-17 23:39:22 · 373 阅读 · 0 评论 -
【 Spring 框架的核心竞争力】建立 Bean 对象实例之间的关系
何时、如何建立他们之间的关系请看下面的时序图原创 2019-10-17 23:28:52 · 229 阅读 · 0 评论 -
【知识库】--spring ApplicationContext 获取BeanFactory obtainFreshBeanFactory()(241)
ApplicationContext 经过obtainFreshBeanFactory后就拥有了BeanFactory全部的功能protected ConfigurableListableBeanFactory obtainFreshBeanFactory(){ refreshBeanFactory();//XML读取解析,并将得到的BeanFactory记录原创 2017-06-25 18:20:46 · 450 阅读 · 0 评论 -
【知识库】--spring aop 动态代理--inner private protected 方法失效(212)
私有方法或者保护的方法无效!AspectJ pointcut for annotated PRIVATE methodsDue to the proxy-based nature of Spring's AOP framework, protected methods are by definition not intercepted,neither for JDK proxi原创 2017-05-27 21:12:59 · 6358 阅读 · 0 评论 -
【技能】spring项目如何实现在线机器上下线呢? ServletContextListener知多少?
如何实现在线机器上下线呢?方案1:javax.servlet.ServletContextListener 扩展接口监听 Servlet 初始化事件和销毁事件public class HealthCheckWatcher implements ServletContextListener, Runnable { private final Logger logger =...原创 2019-05-07 00:00:04 · 192 阅读 · 0 评论 -
spring--工厂方法与FactoryBean(2更)
spring 引入第三方类时常用方法1 静态工厂public class Foo{ private BarInterface barInterface; public Foo(){ }}<bean id = "foo" class="...Foo"> <property name = "barInterface"> <ref be...原创 2018-03-25 10:56:31 · 309 阅读 · 0 评论 -
设计模式--原型模式--Spring框架中使用原型模式创建新的bean实例
1 bean的scope:有一种prototype,容器在接受到该类型对象请求的时候,都会重新生成一个新的对象实例给请求方,该标志内部实现就是实用来了原型模式,完成对象的生成。源码:/** * Actually create the specified bean. Pre-creation processing has already happened * at this point, e...原创 2018-03-24 23:59:34 · 2115 阅读 · 0 评论 -
【知识库】--spring --bean的加载简介(226)
加载Beanpublic Object getBean(String name) throws BeanExceptionprotected T doGetBean(final String name, final Class requiredType, final Object[] args, boolean typeCheckOnly) throws BeansE原创 2017-06-10 10:10:51 · 376 阅读 · 0 评论 -
spring容器的基本实现-- 读书笔记(219)
spring容器是怎么实现的,它是什么?用什么实现?为什么这样实现?好处是什么?通过配置文件,定义bean可配置2.1 容器基本用法1 定义一个bean 2 通过配置文件生成一个纯粹的POJO2.2 功能分析读取配置文件,反射生成POJO,beanFactory串联。寥寥数行代码,spring执行的逻辑却很多很多,半本书的文字也只能介绍大致原理。2.3原创 2017-06-03 15:19:35 · 319 阅读 · 0 评论 -
【知识库】--spring ApplicationContext 扩展起始点-prepareBeanFactory-registerResolvableDependency(241)
1 扩展点开始的地方 有registerResolvableDependency方法问题:做什么用?在哪里用? // BeanFactory interface not registered as resolvable type in a plain factory. // MessageSource registered (and found for autowiring) a原创 2017-06-28 10:16:32 · 1770 阅读 · 0 评论 -
【技能库】--Spring (Spring boot)MVC 移动端+PC端 上传图片(182)
@Controller@RequestMapping("pic")public class ImageUploadController { private static final Logger logger = LoggerFactory.getLogger(ImageUploadController.class); private static Pattern pattern原创 2017-04-25 22:21:27 · 1325 阅读 · 0 评论 -
【未来库】--Spring boot Start(176)
http://www.mkyong.com/spring-boot/spring-boot-hello-world-example-thymeleaf/原创 2017-04-19 18:45:59 · 778 阅读 · 0 评论 -
【技能库】--Spring JDBC framework with JdbcTemplate class(176)
理解Spring JDBC 和 JdbcTemplate 完整实例:学生DAO–实现1 创建数据库CREATE TABLE Student( ID INT NOT NULL AUTO_INCREMENT, NAME VARCHAR(20) NOT NULL, AGE INT NOT NULL, PRIMARY KEY (ID));2 Following is the原创 2017-04-19 08:06:23 · 344 阅读 · 0 评论 -
【技能库】@Cacheable @CachePut Spring 缓存示例(142)
配置 <!-- 启动缓存注解功能 --> <cache:annotation-driven/> <!--generic cache manager --> <bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager"> <property name="原创 2017-03-15 22:53:54 · 1563 阅读 · 0 评论 -
【异常】--spring context:property-placeholder location= 找不到环境配置文件 maven(257)
maven 管理项目 必须注意 每个环境的profile 配置路径!!关键点: src/main/profiles/beta完整配置如下: beta beta原创 2017-07-11 21:38:29 · 1987 阅读 · 0 评论 -
【知识库】--spring 之循环依赖(240)
实例化bean是一个非常复杂的过程。其中是如何解决循环依赖的?第一个问题: 什么是循环依赖 两个或者多个bean相互持有对方第二个问题:spring 如何解决循环依赖 spring 容器循环依赖包括:constructor 循环依赖 , setter循环依赖(singleton范围) 和 pr原创 2017-06-24 11:28:56 · 329 阅读 · 0 评论 -
【spring】--IoC 之理解
控制反转: 本来有应用程序管理的对象之间的依赖关系,交给了容器管理,这就叫控制反转。Spring的Ioc容器主要使用DI方式实现的。容器会主动查找,定位和创建。好处: 1 大量减少了factory 和 singleton 的数量,是代码层次更加清晰。没有上面的代价(查找定位创建)。 2 Spring 的Ioc是一个轻量级容器,没有侵入性,不需要依赖容器的a原创 2017-11-25 18:28:57 · 212 阅读 · 0 评论 -
【spring】-- 启动过程
1 从一个main 方法进入 引用:org.springframework.context.support.ClassPathXmlApplicationContext#ClassPathXmlApplicationContext(java.lang.String)public ClassPathXmlApplicationContext(String configLocat原创 2017-12-02 18:07:24 · 313 阅读 · 0 评论 -
【知识库】--spring AbstractAutowireCapableBeanFactory 创建bean(240)
写在前:前面bean加载部分中,经过resolveBeforeInstantiation方法后,如果创建了代理(即重写了InstantiationAwareBeanPostProcessor的postProcessBeforeInstantiation方法并且在方法中改变了bean)直接返回即可,否则进行常规bean的创建。原创 2017-06-24 11:49:09 · 1168 阅读 · 0 评论 -
【知识库】--spring ApplicationContext 功能的扩展起始点-prepareBeanFactory(241)
ApplicationContext扩展开始ing/** * Configure the factory's standard context characteristics, * such as the context's ClassLoader and post-processors. * @param beanFactory the BeanFactory t原创 2017-06-25 21:25:14 · 941 阅读 · 0 评论 -
【知识库】--spring ApplicationContext 加载配置文件 refresh()(241)
ApplicationContext 扩展了 BeanFactory,大部分的企业应用使用ApplicationContext。加载配置文件:BeanFactory加载XML:BeanFactory bf = new XmlBeanFactory(new ClassPathResource("beanFactory.xml"));ApplicationContext bf =原创 2017-06-25 13:29:20 · 573 阅读 · 0 评论 -
【知识库】--spring ApplicationContext 环境准备 prepareRefresh()(241)
1 该函数的作用:系统属性以及环境变量的初始化和验证2 代码:protected void prepareRefresh(){ this.startupDate = System.currentTimeMillis(); synchronized(this.activeMonitor){ this.active =原创 2017-06-25 17:47:53 · 562 阅读 · 0 评论 -
【知识库】--spring 记录创建bean(单例)的ObjectFactory(240)
ObjectFactory作用:单例提前曝光--singleton循环依赖doCreateBean中代码片段boolean earlySingletonExposure = (mbd.isSingleton() && this.allowCircularReferences && isSingletonCurrentlyInCreation(beanName));//在创建原创 2017-06-25 11:58:40 · 486 阅读 · 0 评论