面试题(仅供参考)
1. 什么是AOP和IOC?
Ioc(控制反转)
- 控制反转(Inversion of Control)是一种设计原则,用来减少计算机程序中的依赖关系,它允许程序在运行时动态地适应和配置对象之间的关系。在Java中,IoC通常通过依赖注入(DI)实现,其实就减少我们在业务层通过new 来创建dao层对象。
- 依赖注入(DI):组件之间的依赖关系由容器在运行时注入,而不是在代码中硬编码。
Aop(面向切面编程)
可以理解为面向方法编程,底层通过动态代理机制实现对目标方法编程
2.Spring常用注解
-
@Component
:用于标识一个类为Spring的组件。 -
@Repository
:用于标识一个类为数据访问组件。 -
@Service
:用于标识一个类为服务组件。 -
@Controller
:用于标识一个类为Spring MVC中的控制器。 -
@Autowired
:用于自动装配Bean。 -
@Qualifier
:与@Autowired
一同使用,指定注入的Bean的名称。 -
@Value
:用于注入属性值。 -
@Configuration
:标识一个类为配置类。 -
@Bean
:在配置类中使用,用于声明一个Bean。 -
@Scope
:用于指定Bean的作用域。 -
@PostConstruct
:在Bean初始化完成后执行的方法。 -
@PreDestroy
:在Bean销毁之前执行的方法。
。。。
3. Spring Bean的生命周期与作用域
-
生命周期:
-
实例化:通过构造方法或工厂方法创建Bean实例。
-
属性赋值:通过setter方法或直接赋值将属性注入。
-
初始化:调用
@PostConstruct
注解的方法或实现InitializingBean
接口的afterPropertiesSet
方法。 -
使用:Bean可以被应用程序使用。
-
销毁:调用
@PreDestroy
注解的方法或实现DisposableBean
接口的destroy
方法。
-
-
作用域:
-
singleton(默认): 在整个Spring容器中只有一个Bean实例。
-
prototype: 每次注入或者通过
getBean
方法获取Bean时,都会创建一个新的实例。 -
request: 每个HTTP请求都会创建一个新的实例,仅在Web应用中有效。
-
session: 每个HTTP Session都会创建一个新的实例,仅在Web应用中有效。
-
global-session: 类似于
session
作用域,但在整个应用的全局范围内有效,仅在Web应用中有效。
-
4. Spring的自动装配
Spring的自动装配是通过@Autowired
注解实现的。它可以自动将符合类型的Bean注入到需要的地方。有三种自动装配的方式:
-
按类型自动装配(byType): 通过属性的数据类型自动匹配并注入。
-
按名称自动装配(byName): 通过属性的名称与Bean的名称匹配并注入。
-
构造器自动装配(constructor): 类似于按类型自动装配,但是应用于构造方法。
5. Spring框架中都用到了哪些设计模式?
在Spring框架中,常见的设计模式包括:
-
单例模式(Singleton): Spring默认情况下使用单例模式,保证一个Bean在容器中只有一个实例。
-
工厂模式(Factory): Spring使用工厂模式通过
ApplicationContext
来创建和管理Bean。 -
代理模式(Proxy): Spring AOP的实现就使用了代理模式,包括静态代理和动态代理。
-
观察者模式(Observer): Spring中的事件机制就是观察者模式的一种实现。
-
策略模式(Strategy): Spring中的
@Qualifier
注解用于解决自动装配时的歧义性,可以看作是策略模式的一种应用。
这些设计模式有助于提高代码的可维护性、可扩展性,并降低组件之间的耦合度。