1. bean创建
user.class--> 无参构造方法---> 普通对象----> 依赖注入(属性赋值)--->初始化前(postcontuct)-->初始化(InitializingBean.afterPropertiesSet())-->初始化后(AOP) --->代理对象生成--> bean创建
1.1. 推断构造方法
1.默认使用无参构造
2.只有有参构造会从容器中找参数实例找不到会报错
找bean规则
-
根据类型找到有且只有一个bean直接使用
-
多个时根据名称找名称匹配的匹配相同名称返回
在实例中的多个构造方法加Autowired 告诉spring也可以
1.2. 依赖注入
首先根据类型查询注入
无法匹配一个,再根据名称注入
1.3. AOP方法增强
AOP通过动态代理技术对方法做增强
1.对切点类生成代理类
2.先执行切面方法,在执行增强方法
事物通过动态代理做对事物方法进行事物 处理
1.对有@Transactional注解类生成代理类,
2.建立事物链接
3.关闭事物自动提交
4.执行事物sql
5.手动提交
6.异常则回滚
spring 可以通过Beanpostprocessor实现类增强对bean初始化前,初始化后的增强
AbstractAutowireCapableBeanFactory#doCreateBean
=> createBeanInstance // 第1步:通过构造器或工厂方法实例化
=> populateBean // 第2步:填充属性、依赖注入
=> initializeBean // 第3步:执行 init、@PostConstruct、AOP 代理等