Spring
-
什么是Spring?
Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的框架 -
Spring的优点/特性?
IoC和DI支持
AOP 面向切面编程
声明式事务支持:支持通过配置来完成事务的管理。
快速集成测试:集成junit,可以通过注解测试Spring功能
快速集成功能:方便集成各种优秀框架
复杂的API模板封装:对一下复杂的API(JDBC、远程调用等)提供了模块化的封装方法 -
Spring 有哪些模块呢?
主要七大模块:
Spring Core:核心模块,主要提供对 IoC 和 DI 的特性
Spring Context:Spring的上下文容器,BeanFactory功能加强的子接口
Spring Web:提供对Web应用开发的支持
Spring MVC:提供Web应用中MVC思想实现的支持
Spring DAO:提供对JDBC抽象层的支持,简化了JDBC代码
Spring ORM:提供对ORM框架的支持,例如ibatis、Hibernate
Spring AOP:提供AOP编程特性 -
Spring 有哪些常用注解呢?
Web方面:@RequestMapping(GetMapping、PostMapping、DeleteMapping、PutMapping):映射URL 请求到具体的方法上
@ResponseBody :方法返回值填入HTTP响应正文中,一般用于凤凰JSON数据
@RequestBody :表示一个方法的参数应该绑定WEB请求体
@PathVariable :用于接收路径参数@RequestMapping(“/hello/{name}”)
@RequestParam: 用于接收请求参数@RequestParam(name = "key") String key
@Controller : 标注控制层组件
@RestController :ResponseBody和Controller 结合体,返回JSON数据时使用
容器方面:@Value:用于将 Spring Boot 中 application.properties 配置的属性值赋值给变量
@Component:将一个类标记为Spring组件,能够被Spring容器扫描和管理
@Autowired:按类型自动注入依赖
@Service:标记一个服务层组件
@Configuration:定义一个配置类,可替换XML配置文件
@Repository:标记一个持久层组件
AOP方面:
@Aspect:定义一个切面
@PointCut:定义一个切点,指点拦截的方法
@After:方法执行之后执行
@Before:方法执行之前执行
@Around:方法执行前后都执行
事务:@Transactional:声明一个方法需要事务支持
IOC
- 什么是IOC/DI?
IOC(控制反转)一种设计思想,由容器来控制对象的生命周期和对象之间的关系。在Spring中,由IOC容器去创建类,而不是去new 一个类,并且创建和销毁工作都由容器完成。对于一个类来说,以前是由类自己来创建管理他依赖的类,现在是由容器来管理,所以是控制反转。
DI(依赖注入),由容器动态的将依赖关系注入到组件当中,例如类A依赖类B,类A运行时,容器会自动将类A运行所需要的类B注入到类A中。DI的实现主要依赖于反射机制。DI可以理解为IOC的实现,不同的角度描述同一件事。关于DI和IOC更详细理解可以参考https://www.cnblogs.com/xdp-gacl/p/4249939.html - 能简单说一下 Spring IoC 的实现机制吗?你有自己实现过简单的 Spring 吗?
Spring IoC 的本质就是一个大工厂,工厂运行总体分为3个部分,工厂本身,订单,库房。
- 工厂本身生产产品,也就是Spring通过反射实例化Bean。工厂本身的生产管理通过工厂模式来实现
- 订单,也就是工厂生产产品的依据,Spring里Bean的定义和依赖。一般是注解或 xml 文件
- 库房就是 IoC 容器,实例化的Bean存放在 IoC 容器里