Spring
文章平均质量分 92
好记性不如烂笔头
一只懒鱼a
言念君子,温其如玉
展开
-
Spring之循环依赖
依赖的相互引用,如下列的这种形式@Component@Autowired@Component@Autowired。原创 2024-03-31 10:01:54 · 883 阅读 · 0 评论 -
@Autowired和@Resource两个注解的异同点
在之前分别写了关于@Autowired和@Resource注解的两篇博文,这里我们总结一下两个注解的异同点。原创 2024-03-21 09:33:40 · 312 阅读 · 0 评论 -
@Resource注解的使用及源码解析
阅读这边文章之前我们先保持一个疑问 : @Resource注解真的是根据名称注入的么?原创 2024-03-20 13:16:27 · 2081 阅读 · 0 评论 -
@Autowired注解的使用及源码解析
注意这里的metadata不是我们方法点进去的InjectionMetadata,而是AutowiredAnnotationBeanPostProcessor的内部类。Spring期望你在注入某些特定类型的bean时候,使用的是它预先设置的bean,而不是用户自定义的bean。方法的注入和属性的注入类似,主要还是doResolveDependency方法,这里就不再赘述。集合类依赖的处理过程我们不重点说明,因为其底层也是调用单体依赖的逻辑,主要演示其用法。创建一个类型为Foo的bean,并复用上文代码。原创 2024-03-20 09:12:42 · 1404 阅读 · 0 评论 -
Spring之注入模型
之前我写过一篇关于BeanDefinition的文章,讲述了各个属性的作用,其中有一个属性我没有提到,因为这个属性比较重要,所以这里单独开一篇文章来说明上一篇博文链接Spring之BeanDefinition通过源码我们得出结论,注入类型有四种PS : 实际有五种,AUTOWIRE_AUTODETECT已过期,我们暂不讨论。原创 2024-03-12 08:43:56 · 1049 阅读 · 1 评论 -
Spring之@Qualifier注解
作用于方法上、作用于类上等于给bean添加了一个alias,作用于属性上、作用于参数上时等于属性注入,然后属性注入的时候既可以使用beanName,也可以使用alias。作用于注解上比较特殊,如果作用于方法上、作用于类上时用了包装注解,作用于属性上、作用于参数上也必须使用包装注解,否则只能使用beanName,使用alias会报错。当我们注入的依赖存在多个候选者,我们得使用一些方法来筛选出唯一候选者,否则就会抛出异常。从源码中我们知道这个注解可以作用于属性、方法、参数、类、注解上面。原创 2024-03-18 09:00:52 · 2452 阅读 · 1 评论 -
Spring之@Value注解
Value注解在Spring的依赖注入中占据重要地位,这里对@Value注解的作用进行演示以及扩展。原创 2024-03-18 09:35:45 · 1398 阅读 · 1 评论 -
Spring事务失效的几种场景
在上一篇博文中,我们对@Transactional源码进行了解析,这一篇我们来结合源码,分析一下我们面试、开发中经常遇到的事务失效问题。原创 2024-03-05 13:53:18 · 861 阅读 · 0 评论 -
@Import在Spring中的应用之@EnableAsync
在上一篇博文Spring之ConfigurationClassPostProcessor解析流程中,我们重点介绍了@Import注解。在这篇文章中,我们以@EnableAsync举例说明@Import在Spring中的应用1.点击@EnableAsync注解 查看@Import注入的类。原创 2023-12-03 23:17:01 · 411 阅读 · 1 评论 -
Spring之@Lookup
如果类中存在@Lookup标注的方法,Spring在实例化bean的时候会进行动态代理,注册一个LookupOverrideMethodInterceptor拦截器。后期如果我们调用@Lookup标注的方法,就会进入拦截器的intercept方法,该ntercept方法通过beanFactory.getBean重新获取bean。原创 2023-12-07 13:50:33 · 925 阅读 · 0 评论 -
Spring之AOP源码解析(上)
EnableTransactionManagement,@EnableAspectJAutoProxy,@EnableAsync注解都有可能产生AOP动态代理@EnableTransactionManagement,@EnableAspectJAutoProxy注解注入的bpp,都是依靠AbstractAutoProxyCreator这个类完成动态代理的。如果它们同时存在,Spring中只会存在一个优先级更高的bpp。这两个注解指定的参数是互补的,对于特定需求,可以进行扩展。原创 2024-02-20 08:51:03 · 1160 阅读 · 0 评论 -
Spring之@Transactional源码解析
我们在日常开发的时候经常会用到组合注解,比如:@EnableTransactionManagement + @Transactional、@EnableAsync + @Async、@EnableAspectJAutoProxy + @Aspect。今天我们就来抽丝剥茧,揭开@Transactional注解的神秘面纱BeanPostProcessor从本质上说,它也是一个bean,不过它优先实例化,然后作用于普通bean。原创 2024-03-05 13:27:05 · 1258 阅读 · 0 评论 -
Spring之AOP源码解析(中)
在上一篇文章中,我们讲解了Spring中那些注解可能会产生AOP动态代理,我们通过源码发现,完成AOP相关操作都和ProxyFactory这个类有密切关系,这一篇我们将围绕这个类继续解析ProxyFactory这个类在Spring完成AOP动态代理的过程中起到了重要的作用,具体如下所述决定Spring进行aop动态代理的方式(jdk动态代理或者cglib动态代理)可以设置监听器,监听动态代理对象可以决定是否提前暴露代理对象(属性exposeProxy=true则会提前暴露)原创 2024-02-20 08:51:52 · 1102 阅读 · 0 评论 -
Spring之AOP源码解析(下)
在上一遍文章中,我们主要讲解了ProxyFactory在Spring完成AOP动态代理的过程中发挥的作用。这一篇我们主要讲解这些注解都会如何注入Advisors,然后分析这些Advisors生效的条件希望我的理解能对大家有帮助,如果有什么理解错误的地方欢迎大家指正。原创 2024-02-23 10:51:17 · 1075 阅读 · 1 评论 -
Spring之为什么标记了@Component的类会被扫描成bean
1.自定义注解2.创建一个普通的类,标注自定义的注解3.创建配置类4.运行main方法,查看运行结果我们看到,我们自定义的注解生效了,容器中存在myComponent的bean 第三步需要注意,如果我们不显示配置useDefaultFilters为false,则@Component等注解标记的类,也是会被解析成bean,如果显示的标记为false,只有自己自定义的Filter生效。原创 2023-11-29 16:15:22 · 1129 阅读 · 0 评论 -
Spring之什么是配置类
我们可以看到Spring尝试根据beanName和args,从BeanFactory中获取结果,如果我们没有配置Scope,则bean默认是单例的,所以如果我们多次执行全配置类的@Bean标注的方法,返回的对象是同一个,我们来写点代码,简单证明一下。我们在开发的时候,经常写一些配置文件,形似MybatisConfig这样的配置文件,然后在类上标记@Configuration注解,同时会写一些方法@Bean标记方法,接下来我们来看一下Spring是怎么定义配置类的。,则称之为全配置类,如果bd含有属性。原创 2023-11-29 23:01:21 · 1392 阅读 · 1 评论 -
Spring之推断构造方法
在之前的博文《Spring之BeanDefinition》讲述了BeanDefinition的用法,以及如何定制化属性,使bean按照我们期望的方式实例化。supplier构造器今天我们主要讲解Spring是如何推断出一个唯一的构造器方法,来实例化对象2.源码分析相关源码在AbstractAutowireCapableBeanFactory#createBeanInstance分成三个优先级第一优先级通过supplier实例化bean对象。原创 2023-12-15 08:43:39 · 1116 阅读 · 0 评论 -
Spring之FactoryBean
我们可以将FactoryBean看成Factory + Bean。首先它是一个Bean,和其他Bean一样,归Spring容器管理。同时它也是一个factory可以生产一个定制的Bean。transformedBeanName :将类似"&&&&beanName"的字符串转成"beanName"canonicalName :bean存在别名的说法,比如beanA的别名是beanB,beanB的别名是beanC,如果调用getBean("beanC")最终会获得beanA。原创 2023-12-15 23:46:13 · 1275 阅读 · 0 评论 -
@MapperScan源码解析
MapperScan以@Import为切入点的注入一个类型为MapperScannerConfigurer的BeanDefinitionMapperScannerConfigurer继承BeanDefinitionRegistryPostProcessor接口,在某个阶段执行postProcessBeanDefinitionRegistry方法。原创 2023-12-22 08:58:13 · 982 阅读 · 0 评论 -
Spring之BeanDefinition
BeanDefinition相关属性的源码解析及如何使用原创 2023-12-07 08:51:54 · 1066 阅读 · 0 评论 -
Spring之BeanPostProcessor
BeanPostProcessor是bean的后置处理器,会影响bean的一些行为甚至是替换原有的bean。了解BeanPostProcessor之前最好有对BeanFactoryPostProcessor有一些了解,不了解的小伙伴可以查看我的上篇博文Spring之BeanFactoryPostProcessor2.BeanPostProcessor是在什么时机注入到Spring中的。原创 2023-12-02 18:19:06 · 2671 阅读 · 0 评论 -
Spring之@Conditional源码解析
Override@Override@Override@OverrideSpring对@Conditional注解的处理分成两个阶段@Conditional注解可以指定在那个阶段生效或者所有阶段都生效能否匹配上@Conditional注解,可以查阅具体@Conditional注解注入类的mathces方法(子类没有重新就查找其父类的matches方法)原创 2024-01-03 09:00:00 · 947 阅读 · 1 评论 -
Spring之BeanFactoryPostProcessor
什么是BeanFactoryPostProcessor,并且举例说明BeanFactoryPostProcessor常用功能,以及BeanFactoryPostProcessor在源码中的执行顺序原创 2023-12-02 14:05:11 · 1199 阅读 · 0 评论 -
Spring之ConfigurationClassPostProcessor解析流程
Spring是如何解析@ComponentScan @ComponentScans @PropertySource @PropertySources @Import等注解以及相关接口 父类原创 2023-12-03 16:18:16 · 1353 阅读 · 1 评论 -
BeanDefinition之dependencyCheck
简单来说,就是检查相关属性是否都赋上值如果我们业务上需要某个bean的所有属性值是无缺失的,我们可以利用BeanFactoryPostProcessor修改BeanDefinition的dependencyCheck属性,让Spring在启动时就报错,避免上线产生问题。原创 2023-12-12 08:56:22 · 422 阅读 · 1 评论