spring原理相关问题

1,发现一个被注解需要被spring容器管理的类。
2,推断构造方法
3,得到普通的对象
4,依赖注入
5,初始化前(@PostConstruct)
6,初始化(InitializingBean)
7,初始化后(AOP)
8,是否需要代理对象
9,放入map类型的容器中(有代理对象就把代理对象放进去,没有才放普通对象)


步骤23属于bean的实例化,步骤6属于bean的初始化,初始化需要实现InitializingBean接口并重写afterPropertiesSet方法。
在这里插入图片描述


步骤2推断构造方法
当一个类里有多个构造方法,且我们没有使用@Autowired注解指定使用哪个构造方法的时候,spring会找无参构造方法,有无参就用无参构造方法,没有就报错。


进行依赖注入或者使用有参构造方法时,spring会在map容器里查找对象,默认先byType再byName。如果容器里有三个类型一样而名字不一样的三个bean(orderService,orderService1,orderService2),
在这里插入图片描述

OrderService orderService123;//报错,有三个OrderService类型的bean,且不包括orderService123名字的bean
OrderService orderService1;//不报错
OrderService orderService123;//如果注释掉上面两个bean,那么不会报错,因为可以通过OrderService类型找到一个bean对象 

springAop代理对象
有以下两种情况:
在这里插入图片描述
在这里插入图片描述


spring事务底层原理也是Aop,在执行方法前事务管理器会建立新连接,开启事务,并设置自动提交为false,方法执行后,如果发生异常就回滚,否则就可以提交。注意如果不是代理对象调用事务方法,不会有事务操作,且在其他方法里直接调用事务方法也不会起作用,解决方法:自己注入自己。
在这里插入图片描述


Spring为什么用三级缓存解决循环依赖?
面试必杀技,讲一讲Spring中的循环依赖

猜你喜欢

转载自blog.csdn.net/lc257/article/details/126020730