1.怎么理解SpringIoc?
2.依赖倒置,依赖注入,控制反转分别是什么?
3.如果让你设计一个SpringIoc,你觉得会从哪些方面考虑这个设计?
4.SpringAOP主要想解决什么问题
5.SpringAOP的原理了解吗
6.动态代理是什么?
7.动态代理和静态代理的区别
8.AOP实现有哪些注解?
9.什么是反射?有哪些使用场景?
10.spring是如何解决循环依赖的?
1.怎么理解SpringIoc?
控制反转。控制就是对对象的创建、初始化、销毁的控制权,反转就是把这个权力从程序员手中转移给了Spring。IOC 解决了繁琐的对象生命周期的操作,解耦了我们的代码。
2.依赖倒置,依赖注入,控制反转分别是什么?
控制反转是设计思路。
依赖是类与类之间的连接,依赖关系表示一个类依赖于另一个类的定义,通俗来讲就是一种需要,例如一个人(Person)可以买车(Car)和房子(House),Person类依赖于Car类和House类。
依赖注入: 一种编码技巧,我们不通过 new 的方式在类内部创建依赖类的对象,而是将依赖的类对象在外部创建好之后,通过构造函数、函数参数等方式传递(或注入)给类来使用。
**依赖倒置:**高层模块不依赖低层模块,它们共同依赖同一个抽象。抽象不要依赖具体实现细节,具体实现细节依赖抽象。这样对底层类的修改就不需要影响到高层类。
( 将类A修改为依赖接口interface,类B和类C各自实现接口interface,类A通过接口interface间接与类B或者类C发生联系,则会大大降低修改类A的几率。)
3.如果让你设计一个SpringIoc,你觉得会从哪些方面考虑这个设计?
Bean的生命周期管理(以及管理期间的异常捕获),依赖注入以及对配置文件的加载(xml,注解,配置类),Bean的作用域,AOP功能的支持。
4.SpringAOP主要想解决什么问题
它的目的是对于面向对象思维的一种补充。OOP 不能很好地处理一些分散在多个类或对象中的公共行为(如日志记录、事务管理、权限控制、接口限流、接口幂等等),这些行为通常被称为 横切关注点(cross-cutting concerns) 。**如果我们在每个类或对象中都重复实现这些行为,那么会导致代码的冗余、复杂和难以维护。**AOP 可以将横切关注点(如日志记录、事务管理、权限控制、接口限流、接口幂等等)从 核心业务逻辑(core concerns,核心关注点) 中分离出来,实现关注点的分离。
5.SpringAOP的原理了解吗?
6.动态代理是什么?
https://allenwu.itscoder.com/use-of-proxy
动态代理是 Java 一大特性。它的显著优势就是无侵入式的扩展代码。通俗来讲就是可以用来做方法的增强,让你可以在不修改源码的情况下,增强一些方法或者功能,在方法执行前后做任何你想做的事情。具体应用的话,比如可以添加调用日志,做事务控制等。
目前动态代理主要分为 Java 自己提供的动态代理和 CGLIB 类似框架。Java 自带的动态代理是需要接口来辅助的。CGLIB 这种则是直接修改字节码。
在 Java 动态代理机制中 InvocationHandler 接口和 Proxy 类是核心。
7.动态代理和静态代理的区别
8.AOP实现有哪些注解?
9.什么是反射?有哪些使用场景?
反射允许程序通过类的字节码文件(通常是.class文件)获取类的结构信息(如字段、方法、构造函数等),并能够在运行时动态地创建对象、调用方法、访问或修改字段。
动态加载类:在运行时根据需要加载类,如JDBC连接数据库时动态加载数据库驱动。这样,开发项目时,切换不同的数据库只需更改配置文件即可
依赖注入:Spring容器会在运行时解析@Autowired注解,通过反射找到对应的DAO类,实例化它,并将其注入到Service类中。
10.spring是如何解决循环依赖的?
https://developer.aliyun.com/article/766880
循环依赖指的是两个类中的属性相互依赖对方:例如 A 类中有 B 属性,B 类中有 A属性,从而形成了一个依赖闭环。