spring
文章平均质量分 86
Butterfly(Papillon)
我会用我的肩扛起我岁月里所有的坚强
展开
-
spring依赖注入(属性赋值)
前提:在spring启动时,扫描得到某个业务bean,经过实例化等等步骤后,需要给这个bean进行属性赋值或者set方法的注入,也就是执行populateBean()方法。以下为核心流程InstantiationAwareBeanPostProcessor#postProcessAfterInstantiation()在属性赋值之前spring对外提供了一个实例化后的拓展,对bean进行加工spring内部实现自动注入在spring中不写任何注解,通过set方法来实现属性的依赖注入1原创 2021-11-29 20:40:01 · 534 阅读 · 1 评论 -
spring核心概念-----笔记
1、BeanDefinition BeanDefinition表示spring中bean的定义,用来描述Bean的各个属性。比如:bean的类型,bean是否单例等等。通常我们在开发时会通过申明式来定义bean:1、@Compnent,@Service等2、@Bean3、<bean/>而我们还可以通过不常用的编程式来定义bean:AnnotationConfigApplicationContext applicationContext = new Anno....原创 2021-11-24 16:20:18 · 185 阅读 · 0 评论 -
spring boot自动装配和启动流程
自动装配的原理@EnableAutoConfiguration注解我们先关注下这个注解的内容,主要由三个核心的注解:@SpringBootConfiguration:内置@Configurantion注解,表示是一个配置类;@EnableAutoConfiguration:自动装配;@ComponentScan:扫描路径以及排除和包含的类。@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented@I原创 2021-12-16 20:10:23 · 878 阅读 · 0 评论 -
spring事务实现原理----源码总结
通常我们在日常开发中在配置类上增加@EnableTransactionManagement注解,在业务开发时,只要在业务类上或者方法上加@Transactional注解,spring就会帮我们做好创建数据库连接,设置相关的数据隔离级别,超时,提交或者回滚等操作,而我们只要专注业务开发,做好配置即可。那么spring是如何做到处理各种复杂情况呢?首先我们来看看这两个注解为我们做了哪些事情:@EnableTransactionManagement@Target(ElementType.TYPE原创 2021-12-06 17:37:53 · 1005 阅读 · 0 评论 -
spring aop概念及核心思想-----源码总结
我们知道spring aop是通过动态代理实现的,而动态代理有两种实现:jdk动态代理----jdk只能代理接口类public static void main(String[] args) { UserService target = new UserService(); UserInterface userInterface = (UserInterface) Proxy.newProxyInstance(AppConfig.class.getClassLoader(), new Cl原创 2021-12-05 17:37:37 · 114 阅读 · 0 评论 -
手写spring集成mybatis以及源码核心逻辑
我们知道在使用mybatis的时候,需要导入spring-mybatis的集成jar包,才能将mybatis集成到spring容器中,而这集成的jar包具体做了哪些事情,使用什么技术把mybatis的mapper接口当成一个bean注册到spring容器中去的呢?首先前面提过FactoryBean的功能,它就是把实现的getObject()返回的对象解析为spring的一个bean,beanName为FactoryBean;而集成mybatis的第一步就是通过FactoryBean导入mybatis原创 2021-12-03 17:36:56 · 176 阅读 · 0 评论 -
spring解析配置类
我们知道spring在启动的过程中,会调用refresh()方法,而refresh()方法会调用invokeBeanFactoryPostProcessors(beanFactory);通过方法名称可以知道其实就是执行BeanFactoryPostProcessor,它在spring中是一个BeanFactory的后置处理器,作用是对BeanFactory进行加工。但是spring启动到这里,beanFactory中只有一个BeanFactoryPostProcessor,就是ConfigurationCl原创 2021-12-03 10:32:22 · 1856 阅读 · 0 评论 -
spring推断构造方法
我们知道spring bean在创建的过程中,通过BeanDefinition的来实例化对象,而实例化对象肯定需要构造方法,大多数情况都是使用默认的无参构造方法。但是spring底层实现考虑的情况非常复杂主要分为两种情况:一是没有@Autowired修饰的构造方法,二是加了@Autowired修饰的构造方法;源码思路:1、创建bean时会调用AbstractAutowireCapableBeanFactory#createBeanInstance()方法2、根据BeanDef..原创 2021-12-01 16:04:14 · 548 阅读 · 2 评论 -
spring循环依赖
下面就是循环依赖最经典简单的案例,spring在创建AService时,属性填充的时候就需要依赖BService,spring会调用getBean()获取BService的bean对象,而此时单例池中还不存在BService对象,spring就去创建BService bean对象;在这个过程中,spring发现BService在属性填充的时候他也依赖了AService bean对象,这个时候就出现了循环依赖,那spring是如何解决这个问题的呢...原创 2021-11-30 17:37:30 · 290 阅读 · 0 评论