您现在的位置是:首页 >技术杂谈 >Spring Bean网站首页技术杂谈

Spring Bean

哇塞大嘴好帅(DaZuiZui) 2024-07-13 00:01:02
简介Spring Bean

Spring Bean

​ Spring Bean就是容器管理的对象,他是应用程序的基本构造块(最基本的元素),可以是任何Java对象。SPring容器负责实列化,配置和管理这些Bean对象。

​ Bean是通过配置文件(XML文件)或注解进行定义和配置。它可以代表应用程序中的各种组件,如服务、数据访问对象、控制器等。

Spring Bean的特点

​ **实列化和生命周期管理:**Bean的实列化和生命周期是由Spring进行创建和管理的,包括初始化、属性注入、销毁。

依赖注入:SPring IOC通过依赖注入将Bean之间的依赖关系进行解析和注入。这使得Bean之间的耦合度降低,提高了代码的灵活性和容错性。

​ **配置灵活性:**Bean可以通过注解和配置文件进行灵活定义。这使得开发人员可以根据需求进行配置调整,而不需要修改源代码。

​ **AOP支持:**Spring框架提供了面向切面编程(AOP)的支持,可以通过配置或注解来定义和应用切面。实现横切的关注点的模块化。

通过使用Spring bean,开发人员可以更好地管理和组织应用程序的组件,并利用Spring框架提供的丰富功能来实现解耦、可维护性、可扩展性。

什么是可维护性

​ 可维护性就是我们的应用程序代码容易理解、修改、和维护。一个良好设计的应用程序应该具有清晰的模块化分,低耦合度和高内聚性,使得我们对某一个模块进行修改或调整的时候,能够最小化对其他模块的影响。这样可以使的团队成员能够轻松地理解和维护代码。降低开发和维护的成本。

可扩展性

可扩展性就是我们APplication可以不更改核心结构下进行扩展,一个可扩展的应用程序可以通过添加新的功能或模块来满足不断变化的需求,不需要对代码进行大批量的修改。

举一个列子

如果在未来需要修改购物车的计算逻辑,例如添加折扣功能,一个可维护的应用程序应该有清晰的代码结构和良好的模块划分,使得我们只需要修改购物车模块的相关代码,而不需要触及其他模块。这样可以减少错误的引入和维护的困难。

Bean的生命周期

1.实例化阶段 instantion

​ 在这个阶段,Bean的实例被创建,通常使用构造函数来创建一个Bean的实例。

2.属性赋值阶段

​ 在实例化之后,容器会将设置Bean的属性。这包括setter方法直接访问字段进行赋值。这写属性值可以通过xml配置文件、注解。

3.初始化阶段

​ 在属性赋值完成后,容器会调用Bean的初始化方法(如果定义了话)。这个初始化方法可以是自定义方法,也可以是实现了特定接口的方法(如InitializingBean接口的afterPropertiesSet())方法。开发人员可以在初始化方法中执行一些特定的逻辑。

4.使用阶段

​ 在初始化完成后,Bean进入可用状态,可以被其他或者其他组件使用。这个阶段,Bean通常会执行一些业务逻辑或提供特定的功能。

5.销毁阶段

​ 淡化Bean的生命周期结束的时候,容器会执行销毁方法,来释放资源进行清理操作。与初始化方法类似,也可以通过自定义的方法或实现特定的接口,如Disposablebean接口的destroy方法来定义销毁逻辑。

Bean的作用域

1.Singleton 单列

​ Singleton(单例)作用域:在Singleton作用域下,容器只会创建一个bean实例,并在整个应用程序的生命周期进行共享该实例,每次对该Bean的操作都会返回同一个实例。当应用程序被关闭或者容器被销毁它的生命周期也就被销毁了, 否则它会一直存在整个应用程序。

2.Prototype 原形

​ 每次对该Bean的请求都会创建一个新的实例,每次返回都会返回一个独立的Bean实例。Spring 容器不会自动销毁他的生命周期,需要我们手动清理调用cleanup()方法。

// 创建Prototype作用域的Bean
MyPrototypeBean bean = applicationContext.getBean(MyPrototypeBean.class);

// 使用Bean实例
// ...

// 手动执行销毁操作
if (bean != null) {
    bean.cleanup(); // 执行清理逻辑或资源释放操作
}

3.request 请求

​ 每个HTTP请求都会创建一个新的Bean实例。对于同一请求,容器会返回想听的bean实例,他的生命周期是和请求一样的。该作用域适合在整个请求都要保持独立状态的组件情况下。

4.Session

​ 当用户session开启的时候开启,关闭的时候关闭。如浏览器的打开和关闭。

5.Application

​ 当应用程序开启的时候它开启,当应用程序结束的时候它结束。他和Singleton的区别是他需要继承第三方框架或者自定义扩展来实现,而Singleton是spring默认的作用域。

6.WebSocket

​ 在WebSocket的应用程序中,WebSocket作用域表示Bean实例与每一个WEbSocket会话关联。每个WebSocket会话都会创建一个新的实例。

​ 当关闭连接和连接超时和在WEbSocket连接期间发生异常或者错误就会销毁。

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。