springbean的生命周期: class----》推断构造方法-----》实例化----》对象----》属性填充------》初始化-----》AOP-----》代理对象-----》bean
属性填充:对加了@autowried或者@resource的注解的属性赋值(DI)、
初始化:实现InitializingBean 重写afterPropertiesSet()方法,对比如需要在mysql中查询的用户信息进行赋值;或者在某个方法上面
加@PostConstruct注解,告诉spring此方法就是用来初始化前的方法
利用类的构造方法,反射获取实例化对象问题:多个构造方法时,用哪个去创建??用无参的构造方法,如果有两个构造方法。一个无参一个有参用无参只有一个有参,就用这个。两个有参,没有无参,则报错。但是两个有参,
可以给一个加@autowired注解,spring就会用加了注解那个方法
然后如果就一个有参构造,然后用到了这个有参构造,他的参数如何获取?去容器中找,先bytpe 再byName:即根据Class的的类,再根据对象的名字
bytype:1.根据Type去spring容器中找到多个bean 2.是不是isAutowriedCandidate
3.是不是符合Qualifiler 4. 取@primary标注的bean 5.取优先级最高的bean 6.根据名字选出一个
**bean的实例化:**通过构造方法获得一个对象
**bean的初始化:**通过initializingBean,去执行实例化出来对象的某一个方法
单例bean:并不是spring容器中只能有一个该类型的bean;单例bean就是根据名字,去getbean的时候,每次拿到的都是同一个对象
单例模式
**@resource注解:**是java提供的,autowired的是spring提供的
**@resource注解:**byname再bytype name属性,@resource(name=" ")根据名字直接去找bean
spring事务: 当connection对象isautocommit是ture,则执行一个sql就会提交,当为false时,需要通过自己的commit方法才会提交
隔离级别:
传播机制:Never,发现当前有一个事务就直接抛异常
动态代理实现:1.JDK (目标对象必须实现接口) 2.CGlib(继承思想,创建的代理类是目标类的子类 对目标类是否存在接口实现没有要求)
CGlib实现的动态代理类和目标类,属于的是父子关系
nCGLIB AOP:将spring里所有的切面Bean拿出来,匹配切点AOP生成一个子类,根据这个代理类,去生成代理对象,
执行代理对象对应与切点相同的方法之后,在方法中执行代理逻辑,执行自己写的切面的逻辑再生成一个实例化后对象,执行那个对象的方法
AOP(术语)
1.连接点:类里面哪些方法可以增强
2.切入点:实际被增强的方法
3.通知(增强):实际增强逻辑的部分称为通知(前置、后置、环绕、异常、最终)
4。切面:把通知应用到切入点的过程称为切面
AspectJ: 不属于spring框架,独立于AOP的框架