什么是Spring框架?
Spring是一种轻量级开发框架,旨在提高开发人员的开发效率以及系统的可维护性。
Spring中的一些重要模块
- Spring Core:基础,可以说Spring其他所有的功能都需要依赖于该类库,主要提供
IoC
依赖注入功能。 - Spring Aspects:为AspectJ的集成提供支持。
- Spring AOP:提供了面向切面的编程实现。
- Spring JDBC:Java数据库连接。
- Spring JMS:Java消息服务。
- Spring ORM:用于支持Hibernate等ORM工具。
- Spring Web:为创建Web应用程序提供支持。
- Spring Test:提供了对JUnit和TestNG测试的支持。
@Controller、@RestController
- @Controller:单独使用@Controller不加@ResponseBody的话一般使用在要返回一个视图的情况,属于传统Spring MVC,对应前后端不分离。
- @RestController:只返回对象,对象数据直接以JSON或XML形式写入HTTP响应(Response)中,这种情况属于RESTful Web服务,对应前后端分离。
Spring IoC
IOC(Inverse of Control:控制反转):将原本在程序中手动创建对象的控制权,交由Spring框架来管理。IoC容器是Spring用来实现IoC的载体,IoC容器实际上是个Map<key,value>,Map中存放的是各种对象。IoC容器就像一个工厂,当我们需要创建一个对象的时候,只需要配置好配置文件/注解即可,完全不用考虑对象是如何被创建出来的。
Spring IoC的初始化过程
Spring AOP
AOP(Aspect-Oriented Programming:面向切面编程):能够将那些与业务无关,却为业务模块所共同调用的逻辑或责任(例如事务管理、日志管理、权限控制等)封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可拓展性和可维护性。Spring AOP就是基于动态代理的,如果要代理的对象,实现了某个接口,那么Spring AOP会使用JDK动态代理去创建代理对象;对于没有实现接口的对象,会使用CGLib,生成一个被代理对象的子类来作为代理。
Spring AOP代理
Spring AOP、AspectJ AOP
- Spring AOP属于运行时增强,而AspectJ是编译时增强。
- Spring AOP基于代理,AspectJ基于字节码操作。
- AspectJ功能更强大,Spring AOP更简单。
Spring中bean的作用域
- singleton:唯一bean实例,Spring中的bean默认都是单例的。
- prototype:每次请求都会创建一个新的bean实例。
- request:每一次HTTP请求都会产生一个新的bean,该bean仅在当前HTTP request内有效。
- session:每一次HTTP请求都会产生一个新的bean,该bean仅在当前HTTP session内有效。
- global-session:全局session作用域,Spring5已经没有了。
@Component、@Bean
- @Component作用与类,@Bean作用与方法。
- @Component通常是通过类路径扫描来自动侦测以及自动装配到Spring容器中,@Bean通常是我们在标有该注解的方法中定义产生这个bean。
- @Bean比@Component自定义性更强,而且很多地方我们只能通过@Bean来注册bean,比如当我们引用第三方库中的类需要装配到Spring容器时,只能通过@Bean来实现。
将一个类声明为Spring的bean的注解
我们一般使用@Autowired注解自动装配bean,要想把类表示成可用于@Autowired注解自动装配的bean的类,可采用以下注解:
- @Componet
- @Repository
- @Service
- @Controller
Spring中的bean生命周期
- 通过构造器或工厂创建bean实例。
- 为bean的属性设置值和对其他bean的引用。
- 调用bean的初始化方法。
- bean可用使用了。
- 当容器关闭时,调用bean的销毁方法。
Spring MVC流程
Spring框架中用到的设计模式
- 工厂模式:BeanFactory、ApplicationContext创建bean对象。
- 代理模式:Spring AOP。
- 单例模式:Spring中Bean默认单例。
- 装饰模式:动态切换不同的数据源。
- 观察者模式:Spring事件驱动模型。
- 适配器模式:Spring AOP。
- ……