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

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.dtcms.com/a/99147.html

相关文章:

  • 算法刷题记录——LeetCode篇(1.2) [第11~20题](持续更新)
  • Labview学习记录
  • 杂草YOLO系列数据集4000张
  • 【MySQL基础-16】MySQL DELETE语句:深入理解与应用实践
  • Ray AI - 概述、安装、入门
  • 【HTML 基础教程】HTML <head>
  • Java多线程与高并发专题——Condition 和 wait/notify的关系
  • python:模块
  • app整改报告怎么写?app整改方案分享
  • 液压式精密矫平机——精准掌控,重塑金属平整新高度
  • 【黑马点评】Redis解决集群的session共享问题
  • wait函数等待多个子进程
  • vue3对比vue2新增特性
  • CSS 边框(Border)样式详解
  • 泛目录优化:无极泛目录优化网站,技术解析与风险控制指南
  • Flutter开发There are multiple heroes that share the same tag within a subtree报错
  • C++ explicit
  • 使用Java操作Redis
  • 在 Windows 中查看 Nginx 当前占用的端口
  • 基于高德地图实现地图交互功能的探索与总结
  • 函数式组件中的渲染函数 JSX
  • Python基础教程:从格式化到项目管理
  • QT操作PDF文件
  • 计算机视觉准备八股中
  • 多任务眼底血管与眼底血管中心线提取
  • Oracle数据库数据编程SQL<3.1 PL/SQL 匿名块 及 流程控制中的条件判断、循环、异常处理和随机函数应用>
  • CSS 美化页面(一)
  • 【Ai插件开发】Notepad++ AI插件开发进阶:集成Ai模型问答功能与流式交互实现
  • 【区块链安全 | 第九篇】基于Heimdall设计的智能合约反编译项目
  • SpringCould微服务架构之Docker(5)