Spring面试题, 你了解的 Spring 都用到哪些设计模式?
Spring面试题, 你了解的 Spring 都用到哪些设计模式?
QA
Step 1
Q:: Spring中使用了哪些设计模式?
A:: Spring 框架中广泛使用了多种设计模式,以下是一些主要的设计模式及其应用:
1.
工厂模式(Factory Pattern):在Spring中,BeanFactory和ApplicationContext用于创建Bean实例。
2.
单例模式(Singleton Pattern):Spring默认情况下,Bean是单例的,这意味着每个Spring容器中只有一个Bean实例。
3.
代理模式(Proxy Pattern):Spring AOP(面向切面编程)使用了代理模式来对方法进行拦截和增强。
4.
模板方法模式(Template Method Pattern):Spring中的JdbcTemplate、HibernateTemplate等都是模板方法模式的实现,用于简化数据库操作。
5.
观察者模式(Observer Pattern):Spring的事件机制基于观察者模式,允许Bean之间进行事件通知。
6.
依赖注入模式(Dependency Injection Pattern):这是Spring核心的设计模式,通过构造器注入、setter注入和接口注入等方式实现对象间的依赖关系管理。
Step 2
Q:: Spring AOP是如何实现的?
A:: Spring AOP(面向切面编程)主要通过动态代理和静态代理来实现方法的拦截和增强。动态代理包括JDK动态代理和CGLIB动态代理。
1.
JDK动态代理:它使用Java的反射机制生成代理类,只能代理实现了接口的类。
2.
CGLIB动态代理:它通过字节码生成技术生成代理类,可以代理没有实现接口的类。
Spring AOP允许在目标方法执行前后添加额外的行为(如日志记录、事务管理等),这是通过编写切面(Aspect)和通知(Advice)来实现的。
Step 3
Q:: Spring中的依赖注入有哪几种方式?
A:: Spring中的依赖注入(Dependency Injection,DI)主要有以下几种方式:
1.
构造器注入:通过构造函数将依赖传递给需要的对象。
2.
Setter方法注入:通过setter方法将依赖注入到需要的对象中。
3.
接口注入:通过实现特定接口来注入依赖,这种方式在Spring中并不常见。
4. 注解注入:使用注解(如@Autowired, @Inject, @
Resource)来自动注入依赖,这是一种更简洁的方式。
Step 4
Q:: Spring中的事务管理是如何实现的?
A:: Spring提供了两种事务管理方式:编程式事务管理和声明式事务管理。
1.
编程式事务管理:通过TransactionTemplate或PlatformTransactionManager手动管理事务,适用于需要精细控制的场景。
2. 声明式事务管理:使用@
Transactional注解或XML配置来声明事务边界,Spring会自动管理事务的开始、提交和回滚。这种方式更加简洁和易于维护。