口述:spring中的bean一般都是单例的,当然可以用scope设置,那单例的会其实是存在线程安全问题的,因为对象的单例的嘛,那如果说我定义了一些实例变量啊类变量啊,在多线程的环境下因为这些都是共享变量嘛,涉及到多个线程的读写操作那肯定是有线程安全问题的,从这个意义上来讲的话那就是线程不安全的,当然我们一般是不会这样去写的,一般我们resource啊autowired啊注入的其实都是无状态的类,像service啊dao啊,注入进来我们是不能修改的,那其实从这种角度看的话就是线程安全的,其实我们一般开发不会写这种成员变量,用注解注入的呢又是不可修改的,所以一般是线程安全的。
记录操作的日志,环绕通知+切点表达式实现
事务失效:参考博客:https://blog.csdn.net/Pastxu/article/details/124531638?
大事务问题:参考博客:https://blog.csdn.net/qq_43141726/article/details/122095669?
实例化+初始化
首先通过beanDefinitionReader解析注解的bean的信息,然后放入beanDefinition对象内
三级缓存可以解决bean初始化过程中的循环依赖问题,不能解决构造方法中的循环依赖问题
一级缓存只有当bean初始化后才能注入,不能解决循环引用问题,
一般对象(不是代理对象)用二级缓存可以解决循环引用问题:
使用三级缓存解决循环依赖问题(可以解决代理对象)
构造方法注入导致循环引用解决:懒加载注解,需要的时候再注入,并不是实例化的时候就去注入
jsp阶段: