学习重点随记 or 留着以后出题面试别人
1、java常见设计模式知多少?
工厂模式:不关心具体的制造/创造工艺,对外暴露公共的接口生产同一类产品,如spring BeanFactory的getBean方法;
代理模式:关心过程,增强事件的处理效果(AOP),如房产代理人,经纪人;
委派模式:关心结果,不会对事件处理过程进行增强,如上级向下级委派任务;
构建者模式:对于复杂的对象构建,统一生成其构造器来统一创建,如@Builder注解的实现;
装饰器模式:封装原有对象,从而增强其对外提供能力,如包装类、Wrapper后缀类;
模板模式: 封装流程化的步骤,原料不同,结果不同,如榨汁机、数据库连接执行sql;
单例模式:对外只提供一个实例,有懒汉,恶汉,内部类三种实现方式,如数据库连接池;
策略模式:结果固定,注重过程,如A地到B地可以有很多方式、比较器;
原型模式:以一个对象为原型复制出一个新对象,如对象属性copy;
2、spring默认对象是单例的,那么spring单例对象是如何实现的?
IOC容器是一个map结构,每当依赖注入某对象时,先到map中获取,有则取,无则创建并保存到map中;
HandlerMapping本质上是一个map结构,handlerMappings本质上是一个list(每个元素是HandlerMapping类型)
3、谈谈动态代理、java反射、cglib?
代理分静态代理与动态代理,运行时才动态生成代理对象的方式称为动态代理,JDK Proxy(java反射)与cglib(字节码操作机制)是其两种实现方式;
JDK Proxy方式:采用实现目标对象父类接口的方式(因为代理类已经继承Proxy类,而java是单继承的,所以只能再实现接口),只能代理实现了接口的对象,本质上是代理对象重新实现并增强该接口的方法;
Cglib方式:采用继承目标对象生成其子类的方式,所以不能代理final修饰的类(因为该类不能被继承),本质上是代理对象重写并增强目标对象方法;