后端经典面试题合集, Spring 框架中都用到了哪些设计模式?
后端经典面试题合集, Spring 框架中都用到了哪些设计模式?
QA
Step 1
Q:: Spring 框架中都用到了哪些设计模式?
A:: Spring 框架广泛使用了多种设计模式,以下是一些常见的设计模式及其在 Spring 中的应用:
1.
单例模式(Singleton Pattern):Spring 的 Bean 默认是单例的,每个容器中只会创建一个 Bean 实例。
2.
工厂模式(Factory Pattern):Spring 使用工厂模式来创建 Bean 对象,特别是在 BeanFactory
和 ApplicationContext
中。
3.
代理模式(Proxy Pattern):Spring AOP(面向切面编程)就是基于代理模式实现的,允许在不修改代码的情况下添加新的行为(如事务、日志等)。
4.
模板方法模式(Template Method Pattern):Spring 中的 JdbcTemplate、RestTemplate 等都是模板方法模式的具体应用,提供了固定的操作步骤,允许用户扩展特定的步骤。
5.
依赖注入模式(Dependency Injection Pattern):Spring 通过依赖注入将对象的依赖关系从代码中解耦,通过配置文件或注解来实现注入。
Step 2
Q:: Spring 的依赖注入有几种方式?
A:: Spring 支持多种依赖注入方式:
1.
构造函数注入:通过构造函数将依赖传入类中,这种方式确保依赖在对象创建时就被注入。
2.
Setter 方法注入:通过 Setter 方法将依赖注入到类中,灵活但不能确保依赖在对象创建时就被注入。
3. **字段注入(Field Injection)**:通过 @
Autowired 注解直接注入字段,简洁但不推荐用于复杂的依赖管理。
Step 3
Q:: Spring 中的 AOP 是如何实现的?
A:: Spring AOP 主要基于代理模式来实现:
1.
JDK 动态代理:用于代理实现了接口的类,生成代理类在方法调用时执行切面逻辑。
2.
CGLIB 代理:用于代理没有实现接口的类,生成子类来扩展目标类并实现切面逻辑。
3.
AspectJ:Spring AOP 也可以与 AspectJ 集成,以实现更强大的静态织入功能。