2020年JAVA面试208题
Latest Episodes
AOP的底层原理
1 AOP就是面向切面编程,通过切面来达到对目标类的增强的目的,关于面向切面就不做太多的解释了。2 AOP底层是动态代理。3 AOP针对实现了接口的类,基于原生JDK的动态代理实现的; 针对没有实现接口的类,基于CGLib来实现的。4 CGLIb的动态代理,通过实现一个子类来实现的。5 JDK的动态代理有一个限制,只能针对实现了接口的类进行动态代理,这是为什么呢?因为JDK的动态代理实现的代理类不是继承目标类,而是继承自Proxy类,而JAVA不允许双重代理,因此就要求目标类必须实现了接口的类。
Spring中IOC的工作流程
1 各种ApplicationContext ,核心实现的是 BeanFactory ,例如 XmlWebApplicationContext AnnotationConfigApplicationContext ,2 BeanDefination3 创建一个 DefaultListableBeanFactory, 基于BeanDefination 创建Bean ,只处理单例的 , 先实例化,再初始化, DI ,4 所有的Bean 都放到一个 Map 里面,这就是Bean的容器。
什么是控制反转
1 IOC 是控制反转, Inversion of Control。2 控制反转不是一种语法,不是类或方法,它是一种设计模式3 当A类依赖于B类,如果不使用控制反转,A类要主动创建B类的对象,也就是new B类,这时候控制权在A类的手中,这就是主动控制; 使用控制反转,A类只要声明自己需要B类,而控制权交给Spring容器,Spring容器在A需要B类的时候为其注入B类即可,这时候控制权在Spring容器手中,即控制反转了。4 好处是什么呢?控制反转后A类与B类的耦合性就降低了,程序更加灵活。5 比如,一