1. Spring IOC、AOP举例说明
IOC(控制反转)
- IOC 是一种设计模式,它将对象的创建、配置和管理从应用程序代码中分离出来,交给 Spring 容器来完成。这使得代码更加松散耦合,易于维护和测试。
AOP(面向切面编程)
- AOP 允许在不修改原始代码的情况下,向应用程序中添加额外的功能,如日志记录、事务管理、性能监控等。这些功能被称为切面,通过在某些连接点(如方法调用、异常抛出等)上切入这些切面,实现横切关注点的分离。
2. springboot自动配置的原理
在Spring Boot应用的启动类上,通常会有一个@SpringBootApplication注解,这是一个组合注解,它包含了@SpringBootConfiguration、@EnableAutoConfiguration和@ComponentScan。其中,@EnableAutoConfiguration注解是开启自动配置的关键,它会导入AutoConfigurationImportSelector类,这个类负责读取META-INF/spring.factories文件,并加载其中定义的自动配置类。
3. RequestMapping 和 GetMapping 的不同之处在哪里?
RequestMapping 具有类属性的,可以进行 GET,POST,PUT 或者其它的注释中具有的请求方法。GetMapping 是 GET 请求方法中的一个特例。它只是 ResquestMapping 的一个延伸,目的是为了提高清晰度
4. 拦截器和过滤器(Filter)有什么区别
- 过滤器:属于 Servlet 规范,可对请求和响应进行过滤,在
doFilter
方法中实现逻辑,在 Servlet 容器启动时初始化,更底层,不依赖 Spring 容器。 - 拦截器:属于 Spring 框架,仅对 Spring MVC 的请求处理流程进行拦截,可访问 Spring 上下文,可处理控制器和视图层,依赖 Spring 容器。
5. Spring Boot 配置文件的加载顺序是怎样的
- 命令行参数。
SPRING_APPLICATION_JSON
中的属性。- Java 系统属性。
- 操作系统环境变量。
application-{profile}.properties
或application-{profile}.yml
。application.properties
或application.yml
。
6. 如何在 Spring Boot 中实现多环境配置的切换
- 可以使用多个配置文件,如
application-dev.properties
、application-prod.properties
等,通过spring.profiles.active
属性切换环境。也可以在启动命令中添加--spring.profiles.active=prod
来激活生产环境配置。
7. Spring Boot常用注解
@SpringBootApplication
- 功能:这是一个组合注解,相当于
@SpringBootConfiguration
、@EnableAutoConfiguration
和@ComponentScan
三个注解的集合。它会开启 Spring Boot 的自动配置功能,扫描当前包及其子包下的组件,并将主类标记为配置类。
@Component
- 功能:这是一个通用的组件注解,用于将一个类标记为 Spring 容器管理的组件。被
@Component
注解的类会被 Spring 自动扫描并注册为 Bean。
@Service
- 功能:它是
@Component
的一个特殊化注解,主要用于标记业务逻辑层的服务类,语义上更清晰地表明该类是一个服务组件。
@Repository
- 功能:同样是
@Component
的特殊化注解,通常用于标记数据访问层的类,如 DAO(Data Access Object)类,Spring 会对其进行一些数据访问相关的增强处理。
@Controller
- 功能:也是
@Component
的特殊化注解,用于标记控制器类,处理 HTTP 请求。在 Spring MVC 中,它与@RequestMapping
等注解配合使用。
@RestController
- 功能:这是
@Controller
和@ResponseBody
的组合注解,用于标记 RESTful 风格的控制器类,简化了编写 RESTful 接口的过程,返回的数据会直接作为 HTTP 响应体。
@Autowired
- 功能:用于实现依赖注入,Spring 会自动将匹配的 Bean 注入到被注解的字段、构造函数或方法参数中。
@RequestMapping
- 功能:用于将 HTTP 请求映射到控制器的处理方法上,可以指定请求的 URL、请求方法(GET、POST 等)、请求参数等。
@GetMapping
、@PostMapping
、@PutMapping
、@DeleteMapping
- 功能:这些是
@RequestMapping
的简化注解,分别对应 HTTP 的 GET、POST、PUT、DELETE 请求方法,使代码更简洁易读。
@Configuration
- 功能:用于标记一个类为配置类,相当于传统的 Spring XML 配置文件。在配置类中可以使用
@Bean
注解定义 Bean。
@Bean
- 功能:用于在配置类中定义 Bean,将方法的返回值注册为 Spring 容器管理的 Bean。
@Value
- 功能:用于从配置文件(如
application.properties
或application.yml
)中读取配置值,并注入到类的字段中。
@ConfigurationProperties
- 功能:用于将配置文件中的属性批量绑定到一个 Java 类上,方便管理和使用配置信息。
@Aspect
- 功能:用于标记一个类为切面类,在 Spring AOP 中,切面类可以包含各种通知(如前置通知、后置通知等)和切点定义。
8. 什么是 Spring Boot?
它基于 Spring 框架,旨在简化 Spring 应用的初始搭建以及开发过程
提供了大量的默认配置和启动器,开发者只需进行少量的配置,甚至无需编写传统的 XML 配置文件,就能快速搭建起一个 Spring 项目,大大提高了开发效率。
能根据项目中添加的依赖和类路径下的资源等信息,自动进行相关的配置。
Spring Boot 应用可以独立运行。
为微服务架构的开发提供了很好的支持,每个微服务可以很方便地使用 Spring Boot 来构建,包括服务注册与发现、配置管理、服务调用等功能都有相应的组件和工具支持。