Spring相关知识点总结

一. IoC和AOP

IoC和AOP是Spring框架中的两个核心思想。

1. 什么是IoC?

IoC(Inversion of Control)控制反转,是一种设计思想或设计模式,不是一种具体的技术实现。IoC的核心思想是将原本在程序中手动创建对象的控制权交给Spring框架管理。

IoC可以看作是一个工厂,负责对对象进行统一创建和管理。当需要创建一个对象时,只需要配置好配置文件和注解即可,不需要了解对象是如何创建的。在Spring中,IoC容器是实现IoC的载体,IoC容器实际上是一个Map(key,value),存放各种对象。

IoC解决了什么问题?

让两方不在相互依赖,交由第三方容器进行资源管理。这样可以降低对象间的耦合度和依赖程度,同时方便了资源的统一管理。

IoC 最常见以及最合理的实现方式叫做依赖注入(Dependency Injection,简称 DI)。

2. 什么是AOP?

AOP(Aspect-Oriented Programming)面向切面编程,将那些与业务无关,却为业务模块所共同调用的逻辑(如事务处理、日志管理、权限控制等)封装起来。减少冗余代码,降低模块耦合度,便于后续的扩展与维护。

AOP之所以称为面向切面编程,是因为它的核心思想是将横切关注点(事务处理、日志管理、权限控制等)从核心业务逻辑中分离出来,形成一个个切面(横切关注点的封装类)。

AOP解决了什么问题?

在不改变原有业务逻辑的前提下,将横切关注点从核心业务逻辑中分离,减少代码冗余程度,实现代码的复用和解耦。

AOP的底层基于动态代理,如果要代理的对象实现了接口,那么AOP采用JDK动态代理去创建代理对象,如果没有实现接口的对象,那么采用Cglib生成一个被代理对象的子类作为代理。

二. Spring MVC

MVC是模型(Model)、视图(View)、控制器(Controller)的缩写,其核心思想是通过将业务逻辑、数据、视图分离来组织代码。 

Spring MVC 可以帮助我们进行更简洁的 Web 层的开发,并且它天生与 Spring 框架集成。Spring MVC 下一般把后端项目分为 Service 层(处理业务)、Dao 层(数据库操作)、Entity 层(实体类)、Controller 层(控制层,返回数据给前端)。

Spring MVC的核心组件:

  • 中央处理器(DispatcherServlet):负责接收分发请求,并给予客户端响应。
  • 请求处理器(Handler):处理请求。
  • 处理器映射器(HandlerMapping):根据URL去匹配查找能处理请求的Handler,并将请求涉及到的拦截器和Handler封装。
  • 处理器适配器(HandlerAdapter):执行找到的Handler。
  • 视图解析器(ViewResolver):根据Handler返回的逻辑视图,解析并渲染真正的视图,并传递给中央处理器响应客户端。

Spring MVC工作原理:

  1. 客户端(浏览器)发送请求,中央处理器拦截请求。
  2. 中央处理器调用映射器,根据URL去匹配能够处理请求的Handler,并封装拦截器Handler。
  3. 中央处理器调用适配器,执行找到的Handler。
  4. Handler执行完成后会返回一个ModelAndView对象给中央处理器,Model是数据对象,View是逻辑上的View。
  5. 视图解析器会根据逻辑View查找真实View。
  6. 中央处理器会把Model传给View进行视图渲染。
  7. 视图渲染完成后将View返回给客户端。

三. Spring、Spring MVC和Spring Boot之间的关系

Spring MVC和Spring Boot是建立在Spring框架基础上的扩展。

Spring MVC是基于Spring的Web开发框架,用于构建Web应用程序。Spring Boot简化了Spring的搭建和配置,做到开箱即用,并且内嵌服务器,如Tomcat,方便部署和运行,同时也提供了一系列强大的开发工具支持,如自动重启、自动化测试等,提升了开发效率。

四. Spring Bean

Bean代指那些被IoC容器管理的对象。需要告诉IoC容器帮我们管理哪些对象。

1. 将一个类声明为Bean的注解有哪些?

  • @Component:通用的注解,可标注任意类为Spring组件。如果一个Bean不知道属于哪个层,可用该注解
  • @Repository: 对应持久层Dao层,主要用于数据库相关操作。
  • @Service: 对应服务层,主要涉及一些复杂的逻辑,需要调用Dao层。
  • @Controller: 对应Spring MVC控制层,主要用于接受用户请求并调用 Service 层返回数据给前端页面。

2. @Component 和 @Bean 的区别是什么?

  • @Component 注解作用于类,@Bean注解作用于方法。
  • @Component 通过类路径扫描来自动检测类以及自动装配到Spring容器中(可以使用ComponentScan注解定义要扫描的路径,从中找出标识了需要装配的类)
  • @Bean注解通常是在标有该注解的方法中,定义产生这个bean,告诉Spring这是某个类的实例,要用时给我。
  • @Bean注解比@Component注解的自定义性更强,而且很多地方只能通过Bean注解来注册bean。比如引用第三方库中的类,需要装配到Spring容器时,只能通过@Bean来实现。

3. 注入Bean的注解有哪些?

Spring内置的 @Autowired 以及 JDK 内置的 @Resource 和 @Inject 都可以用于注入 Bean。

4. @Autowired和@Resource的区别?

  • @Autowired是Spring提供的注解,@Resource是JDK提供的注解。
  • Autowired默认注入方式为byType,@Resource默认注入方式为byName。
  • 一个接口存在多个实现类时,@Autowired和@Resource都需要通过名称匹配到对应Bean。Autowired可以通过 @Qualifier注解来显式指定名称,@Resource可以通过name属性来显式指定名称。

5. Bean的作用域

  • singleton: IoC容器中只有唯一的bean实例。Spring中的bean默认都是单例的,是对单例设计模式的应用。
  • prototype: 每次获取都会创建一个新的bean实例。连续getBean() 两次,得到不同的Bean实例。
  • request(仅Web应用可用): 每次HTTP请求都会产生一个新的bean(请求 bean),该bean仅在当前HTTP request内有效。
  • session(仅 Web 应用可用) : 每次来自新session的HTTP请求都会产生一个新的bean(会话 bean),该 bean 仅在当前 HTTP session 内有效。
  • application/global-session(仅 Web 应用可用):每个Web应用启动时创建一个Bean(应用 Bean),该 bean 仅在当前应用启动时间内有效。
  • websocket(仅 Web 应用可用):每一次WebSocket会话产生一个新的 bean。

如何配置作用域?

xml方式:

<bean id="..." class="..." scope="singleton"></bean>

注解方式:

@Bean
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public Person personPrototype() {
    return new Person();
}
  • 33
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Phoenixxxxxxxxxxxxx

感谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值