Spring Bean介绍

目录

1.什么是bean

2.获取bean

3.bean的作用域

4.第三方bean

5.Bean的生命周期

6.Bean的种类

7.为什么使用Bean?


1.什么是bean

        Bean是Java世界中的一种组件,用于封装数据和逻辑,以便在应用程序中重用和维护。它不仅可以装在数据,还可以包含业务逻辑,甚至连接到数据库的操作。这样的设计让开发工作变得更加模块化,提高了代码的可重用性(由于封装的特性,Bean可以被多个程序或多个项目中复用,提高了开发效率。)和可维护性。通常情况下,Bean由私有属性和公有的访问方法(getter和setter)组成。这种结构让外部代码只能通过指定的接口与Bean交互,而不能直接访问内部状态,从而确保了数据的封装性和安全性。

        在Spring框架中,Bean是由Spring IoC容器来管理的对象。IoC即控制反转,是一种设计原则,用来减少代码之间的依赖关系。通过依赖注入的方式,Spring容器负责将依赖对象提供给需要的Bean,这样就降低了组件之间的耦合度。

2.获取bean

        默认情况下spring项目启动时,就会把bean都创建好放在IOC容器中,如果想要主动获取这些bean,可以通过如下方式:

  • 根据name获取bean
    Object getBean(String name)
  • 根据类型获取bean
    <T> T getBean(Class<T> requiredtype)
  • 根据name获取bean(带类型转换)
    <T> T getBean(String name,Class<T> requiredType)

        上述所说的(spring项目启动时,会把其中的bean都创建好)还会受到作用域延迟初始化的影响,这里主要针对于默认的单例非延迟加载的bean而言。

3.bean的作用域

Spring支持五种作用域,后面三种在web环境中才生效:

作用域说明
singleton容器内同名称的bean只有一个实例(单例)(默认)
prototype每次使用该bean时会创建新的实例(非单例)
request每个请求范围内会创建新的实例(web环境中,了解)
session每个会话范围内会创建新的实例(web环境中,了解)
application每个应用范围内会创建新的实例(web环境中,了解)

        可以通过@Scope注解来进行配置作用域:

@Scope("prototype")
@RestController
@RequestMapping("/depts")
public class DeptController{
}

注意事项:

  • 默认singleton的bean,在容器启动时被创建,可以使用@Lazy注解来延迟初始化(延迟到第一次使用时)。
  • prototype的bean,每一次使用bean的时候都会创建一个新的实例。
  • 在实际开发当中,绝大部分的Bean是单例的,也就是说绝大部分bean不需要配置scope属性。

4.第三方bean

@Bean

        如果要管理bean对象来自第三方(不是自定义的)、是无法用@Component及衍生注解声明bean的,就需要用到@Bean注解。

        若要管理这些第三方的bean对象,建议对这些bean进行集中分类配置,可以通过@Configuration注解声明一个配置类。

        不建议在启动类中添加其他代码,要保证其纯净性。

@SpringBootApplition
public class SpringBootWebConfig2Applition{
    @Bean//将方法返回值交给IOC容器管理,成为IOC容器的bean对象
    public SAXReader saxReader(){
        return new SAXReader();
    }
}

        config包下创建类 

@Configuration
public class CommonConfig{
    @Bean
    public SAXReader saxReader(){
    return new SAXReader();
    }
}

注意事项:

  • 通过@Bean注解的name注解或value可以声明bean的名称,如果不指定,默认bean的名称就是方法名
  • 如果第三方bean需要依赖其它bean对象,直接在bean定义方法中设置形参即可,容器会根据类型自动装配。

5.Bean的生命周期

  • 通过BeanDefinition获取bean的定义信息
  • 通过构造函数实例化bean
  • bean的依赖注入
  • 处理Aware接口(BeanNameAware,BeanFactoryAware,ApplicationContextAware)
  • Bean的后置处理器BeanPostProcessor——前置
  • 初始化方法(InitializingBean,init-method)
  • Bean的后置处理器BeanPostProcessor——后置
  • 销毁Bean

6.Bean的种类

在Java的世界里,有几种不同类型的Bean:

  1. 实体Bean(Entity Bean):通常用于表示数据库中的数据表,每个实体Bean对应表中的一行记录。

  2. 会话Bean(Session Bean):用户与系统交互时,会话Bean保存用户信息,充当的是用户的会话对象。

  3. 消息驱动Bean(Message-Driven Bean):用于处理异步消息,常与JMS(Java Message Service)一起使用。

7.为什么使用Bean?

使用Bean的好处包括但不限于:

  1. 解耦:Bean的使用减少了代码间的直接依赖,使得各部分更容易理解和维护。

  2. 提高可测试性:由于Bean是独立的组件,可以单独对Bean进行测试,提升整体代码的可测试性。

  3. 增强灵活性:Bean可以被任何支持Java的平台重用和扩展,这为应用程序提供了更大的灵活性。

  • 25
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值