饿汉式
HUngry
StaticHungry+
懒汉式
LazySimple
LazyDCL
LazyInnerClass
注册式:
Enum
Container
ThreadLocal
相同:线程按顺序执行,依次访问getInstance()方法
两个线程同时进入判读,后者覆盖前者。
不相同
两个线程同时进入判断条件,并且分别创建两个不同对象:
以上,都能被反射破坏
代理模式:
静态代理
Dao
Service
@Autowired
Dao dao;
Controller
@Autowired
Service service;
动态代理:
AOP
增强功能,代码增强
非功能性代码
非功能性代码和功能性进行解耦
事务管理、日志监控、权限控制
jdk动态代理的原理:
- 拿到目标对象的引用
- 反射拿到对象的class
- 拿到目标对象所实现的所有的接口
- 在proxy工具类,用代码生成一个新的类实现所有的接口,保证和目标属于同一个继承系
- 用户拿到的对象,新类的对象(偷梁换柱),最终调用时新的对象功能
- 新对象,偷偷地实现的增强
CGLib动态代理的原理:
生成一个新的类,他对目标没有任何要求
继承目标类,新类变成目标类的子类
重写父类所有的方法,在子类中实现增强
字节重组的动作:达到生产商新类和目标类属于同一个继承者。
学习方法:
有没有颠覆你对代理模式的认知?
只是云亦云,知其然,并不知所以然
系统学习的方法,让我们学习的知识他不会忘
责任链模式
责任链模式:
Filter 、Interceptor、Pipeline、
直说了自己的模式,没有写详细,程序员必备思想。