简单来说,Bean 代指的就是那些被 IoC 容器所管理的对象。通过配置元数据可以告诉 IoC 容器帮助我们管理哪些对象。配置元数据可以是 XML 文件、注解或者 Java 配置类。
Bean 的生命周期指的是 Bean 在 Spring(IoC)中从创建到销毁的整个过程。Bean 的生命周期主要包含以下 5 个流程:
1.实例化:为 Bean 分配内存空间;
2.设置属性:将当前类依赖的 Bean 属性,进行注入和装配;
3.初始化:
执行各种通知。
执行初始化的前置方法。
执行初始化方法。
执行初始化的后置方法。
4.使用 Bean:在程序中使用 Bean 对象;5.销毁 Bean:将 Bean 对象进行销毁操作。
@Component:通用的注解,可标注任意类为 Spring 组件。如果一个 Bean 不知道属于哪个层,可以使用@Component 注解标注。
@Repository : 对应持久层即 Dao 层,主要用于数据库相关操作。
@Service : 对应服务层,主要涉及一些复杂的逻辑,需要用到 Dao 层。
@Controller : 对应 Spring MVC 控制层,主要用于接受用户请求并调用 Service 层返回数据给前端页面。
通过注解和xml方式
Spring 框架中的 Bean 是否线程安全,取决于其作用域和状态。几乎所有场景的 Bean 作用域都是使用默认的 singleton ,重点关注 singleton 作用域即可。
prototype 作用域下,每次获取都会创建一个新的 bean 实例,不存在资源竞争问题,所以不存在线程安全问题。
singleton 作用域下,IoC 容器中只有唯一的 bean 实例,可能会存在资源竞争问题(取决于 Bean 是否有状态)。如果这个 bean 是有状态的话,那就存在线程安全问题(有状态 Bean 是指包含可变的成员变量的对象)。不过,大部分 Bean 实际都是无状态(没有定义可变的成员变量)的(比如 Dao、Service),这种情况下, Bean 是线程安全的。
对于有状态单例 Bean 的线程安全问题,常见的有两种解决办法:
在 Bean 中尽量避免定义可变的成员变量。在类中定义一个 ThreadLocal 成员变量,将需要的可变成员变量保存在 ThreadLocal 中(推荐的一种方式)。
IoC(Inversion of Control:控制反转)是一种设计思想,而不是一个具体的技术实现。IoC 的思想就是将原本在程序中手动创建对象的控制权,交由 Spring 框架来管理。不过, IoC 并非 Spring 特有,在其他语言中也有应用。
控制:指的是对象创建(实例化、管理)的权力
反转:控制权交给外部环境(Spring 框架、IoC 容器)
将对象之间的相互依赖关系交给 IoC 容器来管理,并由 IoC 容器完成对象的注入。这样可以很大程度上简化应用的开发,把应用从复杂的依赖关系中解放出来。 IoC 容器就像是一个工厂一样,当我们需要创建一个对象的时候,只需要配置好配置文件/注解即可,完全不用考虑对象是如何被创建出来的。
MVC 是模型(Model)、视图(View)、控制器(Controller)的简写,其核心思想是通过将业务逻辑、数据、显示分离来组织代码。
使用注解的方式统一异常处理,具体会使用到 @ControllerAdvice + @ExceptionHandler 这两个注解
好处:会给所有或者指定的 Controller 织入异常处理的逻辑(AOP),当 Controller 中的方法抛出异常的时候,由被@ExceptionHandler 注解修饰的方法进行处理。
事务是逻辑上的一组操作,要么都执行,要么都不执行。
Spring Boot是一个用于简化和加速Spring应用程序开发的开源框架。它是基于Spring框架的,但旨在更容易地创建独立的、生产级别的应用程序。以下是关于Spring Boot的简要介绍:
简化配置:Spring Boot通过自动配置(Auto-Configuration)来减少了传统Spring应用程序中的样板式配置。它可以自动检测并配置应用程序所需的各种组件,包括数据源、Web服务器、消息队列等。这样,开发人员可以专注于编写业务逻辑,而不必花费太多时间在配置上。
集成Spring框架:Spring Boot是构建在经典的Spring框架之上的,因此继承了Spring的强大功能,如依赖注入、面向切面编程(AOP)、事务管理等。它允许您使用Spring的各种模块,如Spring MVC、Spring Data、Spring Security等,以构建全功能的应用程序。
内嵌式Web服务器:Spring Boot内置了多个Web服务器,如Tomcat、Jetty和Undertow。这意味着您可以创建独立的可执行JAR文件或WAR文件,其中包含了您的应用程序和Web服务器,无需额外配置。
约定优于配置:Spring Boot遵循"约定优于配置"的原则,通过约定和默认设置来减少配置需求。这使得应用程序的结构更加清晰,并且开发人员可以快速了解项目的组织方式。
丰富的起步依赖(Starter Dependencies):Spring Boot提供了大量的起步依赖,这些依赖包含了常见场景下所需的库和配置。您可以通过引入适当的起步依赖,轻松地集成数据库、消息队列、安全性等功能。
自动化生产级别功能:Spring Boot为生产环境提供了各种功能,如性能监控、健康检查、安全性、日志记录等。这些功能使得应用程序容易部署和维护。
自动配置(Auto-Configuration):Spring Boot根据应用程序的依赖和类路径自动配置各种组件,如数据源、Web服务器、消息队列等,减少了繁琐的手动配置工作。
起步依赖(Starter Dependencies):Spring Boot提供了一系列预定义的起步依赖,它们包含了常见场景下所需的库和配置。开发人员可以轻松地引入这些依赖,以集成数据库、消息队列、安全性等功能。
Spring Boot AOP:支持面向切面编程(AOP)的模块,可以方便地实现横切关注点,如日志、性能监控等。
Spring Boot CLI:命令行界面工具,用于快速创建和运行Spring Boot应用程序。
Spring Boot Initializer:Web界面工具,用于生成Spring Boot项目的初始代码。您可以选择所需的项目配置和依赖,然后生成项目结构。
Spring Boot Web:包括Spring MVC和Spring Webflux,用于构建Web应用程序的模块。
内嵌式Web服务器:Spring Boot支持多个内嵌式Web服务器,包括Tomcat、Jetty和Undertow。这些服务器可以轻松地集成到应用程序中,无需额外的配置。
Spring Boot Actuator:提供了用于监控和管理应用程序的功能,包括健康检查、性能监控、日志记录和应用信息端点。
Spring Boot DevTools:开发工具,提供了自动重启应用程序、实时重新加载和其他开发辅助功能,加速开发周期。
Spring Boot Data:简化数据访问的模块,包括Spring Data JPA、Spring Data MongoDB、Spring Data Redis等,使得与数据库和其他数据存储的交互更加容易。
Spring Boot Security:用于身份验证和授权的安全性模块,可以轻松添加安全性功能到应用程序中。
Spring Boot Test:用于编写单元测试和集成测试的测试框架,提供了各种测试工具和注解。
Spring Boot Cloud:用于构建云原生应用程序的模块,包括服务注册与发现、负载均衡、配置管理等。
Spring Boot Batch:用于批处理处理的模块,简化了大数据量处理任务的开发。
Spring Boot Messaging:用于消息传递的模块,包括JMS和Apache Kafka的集成,支持异步消息处理。
Spring Boot Integration:用于与外部系统集成的模块,包括HTTP、FTP、AMQP等。
依赖注入模式(Dependency Injection):Spring最显著的设计模式之一。通过依赖注入,对象的依赖关系由容器负责管理,而不是在对象内部创建依赖对象。这有助于降低组件之间的耦合,提高代码的可测试性和可维护性。
工厂模式(Factory Pattern):Spring使用工厂模式来创建和管理对象。Bean工厂(如BeanFactory和ApplicationContext)负责创建和配置应用程序中的对象。这使得对象的创建过程可以集中管理,并且可以根据需要生成单例或原型对象。
单例模式(Singleton Pattern):Spring容器管理的默认范围是单例,因此它通过保持一个单一实例来确保应用程序中的某些对象只被创建一次。这有助于节省资源并提高性能。
模板模式(Template Pattern):Spring在JDBC、JMS等模块中使用模板模式。例如,JdbcTemplate为数据库操作提供了一个模板,开发者只需提供自己的回调方法,而模板处理了底层的操作,如连接管理和异常处理。
观察者模式(Observer Pattern):Spring的事件机制基于观察者模式。组件可以发布事件,而其他组件可以监听这些事件并在事件发生时做出响应。
策略模式(Strategy Pattern):Spring的DispatcherServlet使用策略模式来确定请求应该由哪个处理器来处理。开发者可以注册不同的处理策略,以处理不同类型的请求。
适配器模式(Adapter Pattern):Spring的AOP模块使用适配器模式来将切面织入到目标对象中。通过使用代理对象,AOP可以在目标方法执行前后添加额外的行为。
装饰者模式(Decorator Pattern):Spring的@Transactional注解和AOP代理可以视为装饰者模式的应用,它们在方法执行前后添加了事务管理的行为。
建造者模式(Builder Pattern):在Spring中,SpringApplicationBuilder用于创建Spring Boot应用程序的构建器。它提供了链式调用的方式来配置和构建应用程序。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。