当前位置: 首页 > article >正文

Spring学习笔记06——bean、java bean、spring bean、POJO几个概念讲解

一次讲清楚这几个概念及其区别

一、Bean

在Java开发中,“Bean” 这个词的具体含义需要根据上下文来区分,它可能指 Java Bean(标准Java规范)或 Spring Bean(Spring框架中的概念)。

二、Java Bean(标准规范)

定义

符合特定编码规范的普通Java类,主要用于封装数据,是一种通用的编程约定。

特点
  • 必须满足的条件

    1. 有无参构造方法(public User() {}
    2. 属性私有化(private
    3. 通过公共的Getter/Setter访问属性
    4. 可序列化(implements Serializable,可选)
  • 典型用途

    • 数据传输对象(DTO)
    • 实体类(Entity,如JPA/Hibernate映射数据库表)
    • GUI开发(如Swing组件)
  • 示例

    public class User implements Serializable {
        private String name;
        public User() {} // 无参构造
        public String getName() { return name; } // Getter
        public void setName(String name) { this.name = name; } // Setter
    }
    

简单来说,Java Bean是Java开发中约定俗成的"数据盒子",让数据传递更安全、更自动化。

在Java开发中,Bean(全称JavaBean)是一个特殊的Java类,它遵循特定的设计规范,主要用于封装数据。你可以把Bean想象成一个标准的数据容器,它的核心作用是让数据在不同模块之间规范、安全地传递。

二、Spring Bean(Spring框架概念)

定义

Spring IoC容器管理的Java对象,可以是任何类(不一定是Java Bean规范类)。

被 Spring 管理的对象,就像工厂流水线上生产的“标准产品”。这些对象不是你自己 new 出来的,而是由 Spring 容器(一个超级工厂)帮你创建、组装、管理。

特点
  • 管理方式

    • 通过注解(如@Component, @Service, @Controller)或XML配置声明。
    • Spring负责创建、组装、管理其生命周期(如依赖注入、单例/多例控制)。
  • 不强制要求

    • 不一定需要无参构造或Getter/Setter(但依赖注入时可能需要)。
  • 典型用途

    • 服务层(@Service
    • 控制器(@Controller
    • 数据库访问层(@Repository
  • 示例

    @Service // 声明为Spring Bean
    public class UserService {
        public void saveUser(User user) { ... }
    }
    
核心价值

控制反转(IoC):Spring自动管理对象依赖关系,降低耦合。

🔍 Java bean和Spring bean关键区别

对比项Java BeanSpring Bean
规范来源Java语言规范Spring框架定义
主要目的数据封装依赖注入和组件管理
是否需无参构造必须可选(依赖注入方式决定)
是否需Getter/Setter必须可选(但推荐有,便于框架处理)
典型注解@Component, @Service

Spring bean的定义比较广泛,java bean 所定义的概念相对比较狭窄。
只要被Spring管理的Java bean,就属于spring bean,否则就不是。

由 @Component、@Service、@Controller 等注解标记的类,都会变成 Spring 管理的 Bean。这些注解就像是给类贴了一个标签,告诉 Spring:“嘿,这个类交给你了,帮我管理它!”

四、POJO

  • 定义:POJO(Plain Old Java Object) 是一个普通的 Java 对象,不依赖任何特定框架或接口,没有强制性的约束。

它的核心思想是保持代码的简洁性和可移植性,避免与特定技术绑定。

  • 特点
    • 无需继承特定父类或实现特定接口。
    • 没有强制的代码规范(如无参构造器、Getter/Setter)。
    • 可以自由定义字段和方法。
  • 目的:简化代码结构,避免框架侵入性设计。
  • 示例
    public class User {
        public String name; // 直接暴露字段(不符合Java Bean规范)
        public int age;
        
        public User(String name, int age) { // 可以自定义构造器
            this.name = name;
            this.age = age;
        }
    }
    

Entity、DTO、VO 都属于 POJO,它们是具有特定用途的POJO。

Java bean是符合特定规范的 POJO(无参构造 + getter/setter + 可序列化)。

POJO和Java bean的关系与区别

特性POJOJava Bean
约束无强制规范,自由定义必须符合特定规范(如 Getter/Setter)
序列化可选通常需要实现 Serializable
构造器可有任意构造器必须有无参构造器
框架依赖无依赖常被框架(如 Spring)管理
灵活性较低(需遵守规范)
  • 关系:Java Bean 是 POJO 的子集,所有 Java Bean 都是 POJO,但 POJO 不一定是 Java Bean。
  • 核心区别:Java Bean 的规范更严格,POJO 更自由。

使用场景

  • POJO:适用于简单的数据传输对象(DTO)、领域模型等,无需框架约束。
  • Java Bean:适用于需要被框架(如 Spring IoC)、工具(如 JPA/Hibernate)管理的组件,或需要序列化的场景。

五、总结**

  • Bean 这个词的具体含义需要根据上下文来区分,它可能指 Java Bean(标准Java规范)或 Spring Bean(Spring框架中的概念)。
  • POJO 是普通 Java 对象,强调简单性。Entity、DTO、VO 都属于 POJO,它们是具有特定用途的POJO。
  • Java Bean 是标准化的POJO,强调规范与兼容性。
  • Java Bean一定是POJO,但POJO不一定是Java Bean,Java Bean的规范更严格,POJO 更自由,例如Java Bean必须有Getter/Setter方法,并且必须有无参构造器,而POJO不必须。
  • Spring Bean 的范围更大, 只要被 Spring 管理的对象都是Spring Bean,意味着Java Bean和POJO如果被Spring 管理,即它们都称为Spring Bean,如果不被Spring管理,那就不是。很多Sping Bean不一定就是POJO,也可能是其它功能比较复杂的Java对象。

http://www.kler.cn/a/614588.html

相关文章:

  • 【网络协议详解】—— STP 、RSTP、MSTP技术(学习笔记)
  • Pycharm(八):字符串切片
  • Nvidia Driver英伟达驱动安装-Ubuntu-CUDA
  • AB包介绍及导出工具实现+AB包资源简单加载
  • OpenBMC:BmcWeb 生效路由5 优化trie
  • 网络通信微服务
  • Vue3组件事件用户信息卡练习
  • 扩散模型总结
  • 外观模式(Facade Pattern):复杂系统的“统一入口”
  • 快速入手-基于Django-rest-framework的ModelViewSet终极版(七)
  • 前端路由守卫与后端权限验证,仅使用路由守卫是否安全?
  • 前端 VSCODE 插件开发总结 (后续将出专栏详细讲解开发的细节...)
  • 关于音频采样率,比特,时间轴的理解
  • Reactive编程:应用场景和传统比较
  • java网盘项目 目前 文件有分享表 文件夹也要创建分享表吗
  • 复古半色调褶皱照片效果ps特效滤镜样机 Halftone Crumpled Paper Effect
  • Baklib驱动企业知识管理数字化转型
  • CSS3学习教程,从入门到精通, CSS3 盒子模型的详细语法知识点及案例代码(23)
  • PERL开发环境搭建>>Windows,Linux,Mac OS
  • mac 下配置flutter 总是失败,请参考文章重新配置flutter 环境MacOS Flutter环境配置和安装