collective_lz
技术人员的目标不是拥有多么厉害的技术,而是用技术去促成一个产品的成功
展开
-
SpringBoot源码解析(二十)apoll读取app.id源码解析
apollo是一个很受欢迎的配置中心,我们在配置apollo的时候,都需要在META-INF的app.properties中配置appid=serverName,那么我们后面就根据源码看看,apollo是怎么读取app.id的配置的。一、入口apollo读取配置的入口是在PropertySourcesProcessor类中,这个类的类结构图我们来看下:它实现了BeanFactoryPostProc...原创 2018-07-08 17:45:22 · 6519 阅读 · 0 评论 -
SpringBoot源码解析(十九)Spring事务tx源码分析(二)
最近想提升,苦逼程序猿,想了想还是拿最熟悉,之前也一直想看但没看的spring源码来看吧,正好最近在弄事务这部分的东西,就看了下,同时写下随笔记录下,以备后查。spring tx源码分析这里只分析简单事务也就是DataSourceTransactionManager首先肯定找入口了,看过spring源码的同学一定都会找spring tx的入口就是在TxAdviceBeanDefinit原创 2018-01-08 10:53:40 · 1004 阅读 · 0 评论 -
SpringBoot源码解析(十八)Spring事务tx源码分析(一)
在spring的tx源码中我们知道了,最后会通过AbstractAutoProxyCreator(其有一个父类是beanPostProcessor)的postProcessAfterInitialization(Object bean, String beanName)方法中的wrapIfNecessary方法去createProxy。其中生成jdk动态代理的类是JdkDynamicAopProx原创 2018-01-06 20:53:01 · 3238 阅读 · 0 评论 -
SpringBoot源码解析(十七)ApringAOP的两种方式JdkDynamicAopProxy和Cglib2AopProxy源码解析
在springAOP中,创建动态代理有两种方式,jdk的动态代理与cglib。jdk的动态代理在springAOP中使用的是JdkDynamicAopProxy而cglib在springAOP中使用的类是Cglib2AopProxy,而且创建代理使用的类加载器基本都是ContextClassLoader类加载器。在springAOP中创建动态代理都是通过ProxyFactory的getPr原创 2017-12-17 21:21:57 · 4017 阅读 · 0 评论 -
SpringBoot源码解析(十六)事务的SpringAOP源码详解
SpringAOP是spring的动态代理模块。我们在spring的事务等多个方面都用到了springAOP方面的知识。我们就以事务的动态代理原理解析来分析下springAOP的源码。SpringAOP有几个核心概念: (1).切面Aspect: Aspect 声明类似于 Java 中的类声明,在 Aspect 中会包含着一些切入点Pointcut 以及对切入点进行相应的操作的通知Advic...原创 2018-02-26 23:04:59 · 675 阅读 · 0 评论 -
SpringBoot源码解析(十五)MockBean之Mapper的加载
在做单元测试的时候,有时我们需要用MockBean去Mock一些spring中的bean,在MockBean中会调用spring-boot-test中的一个类,MockitoPostProcessor,这个类中会对你用@MockBean注解的bean做替换为Mock自己生成的bean,从而达到Mock的效果。因为MockitoPostProcessor属于BeanFactoryPostProce...原创 2019-03-31 23:27:42 · 2292 阅读 · 0 评论 -
SpringBoot源码解析(十四)一个Bean实现多个接口,注入时源码是怎样的?
在用Spring框架写Service层服务的时候,我们一般都习惯定义一个service接口,再定义一个service实现类,在引用的时候我们就通过一个@Resource注解或者@Autowired注解,此时Spring会根据名称优先或类型优先注入Spring的Bean。如果一个service实现类,实现了两个Service接口,Spring是怎么处理注入的呢?一、代码示例我们就通过如下代码示例,看看一个Service实现类实现两个接口源码是怎么加载的:public class Achievement原创 2022-01-04 20:06:06 · 877 阅读 · 0 评论 -
springboot源码解析(十三)之apollo配置源码解析
入口是在invokeBeanFactoryPostProcessors方法中。apollo中有一个类,PropertySourcesProcessor,类结构图如下:这个类继承了BeanFactoryPostProcessor,会执行其postProcessBeanFactory方法 @Override public void postProcessBeanFactory(Configura...原创 2018-07-13 11:58:54 · 1922 阅读 · 0 评论 -
springboot源码解析(十二)@ConditionalOnClass
在springboot中,有@ConditionalOnClass,@ConditionalOnBean,@ConditionalOnMissingClass,@ConditionalOnMissingBean等注解,这些注解的含义是有某个类或者没有某个bean才会加载,那么源码是在什么地方处理的呢,下面我们一起看下。一、举例我们以类EncryptionBootstrapConfigura...原创 2018-07-24 00:02:23 · 13969 阅读 · 4 评论 -
SpringBoot源码解析(十一)@Primary
在SpringBoot中有许多类使用到了@Primary注解,关于用法,请看这篇博客:在spring中常被忽视的注解 @Primary。这次我们不说用法,从源码层面来看下:一、入口在创建bean的时候,我们会获取bean的依赖bean,这个方法就是DefaultListableBeanFactory的doResolveDependency方法,如果匹配的bean大于1,会执行如下方法:...原创 2018-07-24 21:34:09 · 6279 阅读 · 0 评论 -
SpringBoot源码解析(十)让你深度理解Spring是如何解决循环依赖的
在spring中我们有可能会遇到这种情况,A依赖B,B又依赖A,正常情况下,我们用@Reference或者@Autowired注解,是不会有问题的,可在我们用构造方法的时候,就会出现问题: public AssistantDoctorController(UserDoctorController userDoctorController) { this.userDoctor...原创 2019-10-03 20:58:25 · 331 阅读 · 0 评论 -
SpringBoot源码解析(九)所有AutoConfiguration类加载源码
在SpringBoot中,有许多的AutoConfiguration类,例如RedisAutoConfiguration,DubboAutoConfiguration等,这个类,并不在@SpringBootApplication的扫描路径中,那么这些类的配置是怎么生效的呢,下面我们跟着源码看下。一、入口以前我们讲@Configuration的配置源码的时候,说过ConfigurationClass...原创 2018-07-12 22:21:02 · 1454 阅读 · 2 评论 -
Springboot源码解析(八)@Configuration注解被扫面注射为bean的源码解析(二)
在Springboot中,@Configuration注解是最重要的注解之一,相当于Spring中的xml,关于Springboot源码中是如何解析@Configuration注解的。是我们这篇文章后面要探讨的内容。一、入口解析@Configuration注解的入口还是在AbstractApplicationContext类的invokeBeanFactoryPostProcessors(bean...原创 2018-06-17 23:55:16 · 4968 阅读 · 0 评论 -
Springboot源码解析(七)@Configuration注解被扫面注射为bean的源码解析(一)
一、入口Springboot中@Configuration注解被扫描到的入口在AbstractApplicationContext类中的invokeBeanFactoryPostProcessors(beanFactory);方法中,方法上面有一行注解为// Invoke factory processors registered as beans in the context.意思是把处理bea...原创 2018-06-14 20:30:38 · 4706 阅读 · 0 评论 -
SpringBoot源码解析(六)SpringApplication.run()方法执行两遍源码
在SpringBoot中,SpringApplication.run()方法执行了两遍。原创 2018-06-02 15:13:37 · 8411 阅读 · 4 评论 -
springboot源码解析(五)prepareContext
SpringApplication中的prepareContext,其内容如下:private void prepareContext(ConfigurableApplicationContext context, ConfigurableEnvironment environment, SpringApplicationRunListeners listeners, Appl...原创 2018-04-29 10:44:50 · 1276 阅读 · 0 评论 -
springboot源码解析(四)new FailureAnalyzers(context);
在SpringApplication的run方法中,初始化了FailureAnalyzers,其内容如下: FailureAnalyzers(ConfigurableApplicationContext context, ClassLoader classLoader) { Assert.notNull(context, "Context must not be null"); this....原创 2018-04-27 17:44:56 · 1684 阅读 · 0 评论 -
springboot源码解析(三)prepareEnvironment(listeners, applicationArguments);
在SpringApplication的启动的run方法中,有这么一个方法:ConfigurableEnvironment environment = prepareEnvironment(listeners, applicationArguments);此方法是准备运行时的环境。这段代码的具体实现如下: private ConfigurableEnvironment prepareEnv...原创 2018-04-27 16:11:32 · 1424 阅读 · 0 评论 -
SpringBoot源码解析(二)SpringApplication的run方法
在初始化的initialize方法完成后,就进入SpringApplication的run方法了,run()方法如下: public ConfigurableApplicationContext run(String... args) { StopWatch stopWatch = new StopWatch(); stopWatch.start(); ConfigurableAppl...原创 2018-05-06 19:14:22 · 1490 阅读 · 0 评论 -
SpringBoot源码解析(一)初始化方法
springboot的启动都是从main方法开始的,如下:@SpringBootApplicationpublic class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); }}后面会进入SpringApplica...原创 2018-04-26 16:52:16 · 737 阅读 · 0 评论