跳到主要内容

Java Spring

基础

1.Spring 是什么?特性?有哪些模块?

一句话概括:Spring 是一个轻量级、非入侵式的控制反转 (IoC) 和面向切面 (AOP) 的框架。

最主要的七大模块:

  • Spring Core:Spring 核心,它是框架最基础的部分,提供 IoC 和依赖注入 DI 特性。
  • Spring Context:Spring 上下文容器,它是 BeanFactory 功能加强的一个子接口。
  • Spring Web:它提供 Web 应用开发的支持。
  • Spring MVC:它针对 Web 应用中 MVC 思想的实现。
  • Spring DAO:提供对 JDBC 抽象层,简化了 JDBC 编码,同时,编码更具有健壮性。
  • Spring ORM:它支持用于流行的 ORM 框架的整合,比如:Spring + Hibernate、Spring + iBatis、Spring + JDO 的整合等。
  • Spring AOP:即面向切面编程,它提供了与 AOP 联盟兼容的编程实现。

2、Spring 有哪些常用注解呢?

Spring 提供了大量的注解来简化 Java 应用的开发和配置,主要用于 Web 开发、往容器注入 Bean、AOP、事务控制等。

Web类

  • @Controller:用于标注控制层组件。

  • @RestController:是@Controller@ResponseBody 的结合体,返回 JSON 数据时使用。

  • @RequestMapping:用于映射请求 URL 到具体的方法上,还可以细分为:

    • @GetMapping:只能用于处理 GET 请求

    • @PostMapping:只能用于处理 POST 请求

    • @DeleteMapping:只能用于处理 DELETE 请求

  • @ResponseBody:直接将返回的数据放入 HTTP 响应正文中,一般用于返回 JSON 数据。

  • @RequestBody:表示一个方法参数应该绑定到 Web 请求体。

  • @PathVariable:用于接收路径参数,比如 @RequestMapping(“/hello/{name}”),这里的 name 就是路径参数。

  • @RequestParam:用于接收请求参数。比如 @RequestParam(name = "key") String key,这里的 key 就是请求参数。

容器类

  • @Component:标识一个类为 Spring 组件,使其能够被 Spring 容器自动扫描和管理。
  • @Service:标识一个业务逻辑组件(服务层)。比如 @Service("userService"),这里的 userService 就是 Bean 的名称。
  • @Repository:标识一个数据访问组件(持久层)。
  • @Autowired:按类型自动注入依赖。
  • @Configuration:用于定义配置类,可替换 XML 配置文件。
  • @Value:用于将 Spring Boot 中 application.properties 配置的属性值赋值给变量。

AOP

@Aspect 用于声明一个切面,可以配合其他注解一起使用,比如:

  • @After:在方法执行之后执行。
  • @Before:在方法执行之前执行。
  • @Around:方法前后均执行。
  • @PointCut:定义切点,指定需要拦截的方法。

事务注解

主要就是 @Transactional,用于声明一个方法需要事务支持。

4.Spring 中应用了哪些设计模式呢?

Spring 框架中用了蛮多设计模式的:

  • 工厂模式:IoC 容器本身可以看作是一个巨大的工厂,负责创建和管理 Bean 的生命周期和依赖关系。

  • 像 BeanFactory 和 ApplicationContext 接口都提供了工厂模式的实现,负责实例化、配置和组装 Bean。

  • 代理模式:AOP 的实现就是基于代理模式的,如果配置了事务管理,Spring 会使用代理模式创建一个连接数据库的代理对象,来进行事务管理。

  • 单例模式:Spring 容器中的 Bean 默认都是单例的,这样可以保证 Bean 的唯一性,减少系统开销。

  • 模板模式:Spring 中的 JdbcTemplate,HibernateTemplate 等以 Template 结尾的类,都使用了模板方法模式。

    比如,我们使用 JdbcTemplate,只需要提供 SQL 语句和需要的参数就可以了,至于如何创建连接、执行 SQL、处理结果集等都由 JdbcTemplate 这个模板方法来完成。

  • 观察者模式:Spring 事件驱动模型就是观察者模式很经典的一个应用,Spring 中的 ApplicationListener 就是观察者,当有事件(ApplicationEvent)被发布,ApplicationListener 就能接收到信息。

  • 适配器模式:Spring MVC 中的 HandlerAdapter 就用了适配器模式。它允许 DispatcherServlet 通过统一的适配器接口与多种类型的请求处理器进行交互。

  • 策略模式:Spring 中有一个 Resource 接口,它的不同实现类,会根据不同的策略去访问资源。

public interface ResourceLoader {

String CLASSPATH_URL_PREFIX = ResourceUtils.CLASSPATH_URL_PREFIX;

Resource getResource(String location);

ClassLoader getClassLoader();
}

5.说一说什么是 IoC?什么是 DI?

IoC(控制反转,Inversion of Control),就是由容器来控制对象的生命周期和对象之间的关系。以前是我们想要什么就自己创建什么,现在是我们需要什么容器就帮我们送来什么。

DI(依赖注入,Dependency Injection):有人说 IoC 和 DI 是一回事,有人说 IoC 是思想,DI 是 IoC 的实现。2004 年,Martin Fowler 在他的文章《控制反转容器&依赖注入模式》首次提出了依赖注入这个名词。

SpringMVC

SpringBoot