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 接口,它的不同实现类,会根据不同的策略去访问资源。
1 | public interface ResourceLoader { |
5.说一说什么是 IoC?什么是 DI?
IoC(控制反转,Inversion of Control),就是由容器来控制对象的生命周期和对象之间的关系。以前是我们想要什么就自己创建什么,现在是我们需要什么容器就帮我们送来什么。
DI(依赖注入,Dependency Injection):有人说 IoC 和 DI 是一回事,有人说 IoC 是思想,DI 是 IoC 的实现。2004 年,Martin Fowler 在他的文章《控制反转容器&依赖注入模式》首次提出了依赖注入这个名词。