这里不会讨论Java基础的学习(Java基础学习移步至Java学习笔记 ),主要是Java底层逻辑的一些常识。

Bean

image-20240410102434377

Java Bean

上面说了Bean的中文含义是“豆子”,顾名思义JavaBean是一段Java小程序。Java Bean实际上是指一种特殊的Java类,它通常用来实现一些比较常用的简单功能,并可以很容易的被重用或者是插入其他应用程序中去。所有遵循一定编程原则的Java类都可以被称作JavaBean

Java Bean是基于Java的组件模型,由属性、方法、事件3部分组成。在该模型中,JavaBean可以被修改或与其他组件结合以生成新组件或完整的程序。它是一种Java类,通过封装成为具有某种功能或者处理某个业务的对象。因此,也可以通过嵌在JSP页面内的Java代码访问Bean及其属性

Bean的含义是可重复使用的Java组件。所谓组件就是一个由可以自行进行内部管理的一个或几个类所组成、外界不了解其内部信息和运行方式的群体。使用它的对象只能通过接口来操作。

这里借助维基百科的词条做一个总结:

image-20240410105013977

这里我再总结一下Java Bean的规范:

  1. 这个类所有属性为private
  2. 这个类必须具有一个公共的(public)无参构造函数
  3. private属性必须提供public的getter和setter来给外部访问,并且方法的命名也必须遵循一定的命名规范
  4. 这个类是可序列化的,要实现serializable接口

下面通过Java代码来体会一下:

image-20240410105708254

image-20240410105856903

Spring Bean

首先,Spring 是一个强大的开源框架,用于构建 Java 应用程序。而Spring Bean 是一种由 Spring 容器管理的对象。这些对象可以是普通的 Java 对象,但它们由 Spring 负责创建、配置和管理。Spring 的 IOC(控制反转)机制使得 Bean 的创建和管理变得更加灵活和集中化。

这里补充一下对于IOC机制、 IOC容器、Spring 容器的理解

image-20240410111208861

IOC控制反转是一种面向对象编程的设计模式,它可以将程序的控制权从应用程序本身转移到一个外部容器中,由容器来负责管理对象的创建和销毁

Spring容器可以理解为生产对象的地方,在这里容器不只是帮我们创建了对象那么简单,它负责了对象的整个生命周期(即创建、装配、销毁),而这里对象的创建管理的控制权都交给了Spring容器,所以这是一种控制权的反转,称为IOC机制,而实现了了IOC机制的容器,就称为IOC容器,所以Spring容器属于IOC容器的一种。

IOC机制不只是Spring才有,很多框架也都有该技术。

Java Bean和Spring Bean的区别和联系

image-20240410130903687image-20240410130912709

Spring 的 Bean 对象在一定程度上扩展了普通的 Java Bean对象的概念,以提供更多的功能和便利性。

为了方便理解,我分别从装配和管理依赖注入切面和增强生命周期管理配置写法等方面做一个对比总结:

  • 装配和管理: 普通的Java Bean对象需要自行创建和管理,而 Spring 的 Bean 则由 Spring 容器负责创建、配置和管理。这为我们的程序提供了更大的灵活性和可维护性,无须再像以前一样经常需要new 对象来使用,现在我们将创建对象的任务交给 Spring 来做,我们只需要在需要用的地方注入对象就可以。
  • 依赖注入: Spring 的 Bean 可以通过依赖注入(DI)来自动解决它们之间的依赖关系。这意味着我们可以将一个 Bean 注入到另一个 Bean 中,而无需手动实例化(new)它们或处理依赖关系。
  • 切面和增强: Spring 的 Bean 支持面向切面编程(AOP),这使我们可以将横切关注点(如日志记录、事务管理等)从业务逻辑中分离出来,使代码更加干净和模块化。说白了就是我们可以封装日志记录、事务管理的代码,等程序运行到我们想要切入的地方(即类中的方法)时,Spring AOP 会将我们封装的日志记录、事务管理等代码追加到切入点的前后啥的。
  • 生命周期管理: Spring 的 Bean 可以通过初始化和销毁回调方法来管理其生命周期。我们可以在 Bean 初始化之前或销毁之后执行特定的操作,如通过 @PostConstruct 来初始化前对属性进行赋值或者通过实现 InitializingBean 接口进行初始化
  • 配置: 普通的Java Bean对象通常在代码中硬编码配置,而Spring 的 Bean 可以通过 XML 配置、Java 注解或 Java 配置类进行配置,使得配置更加灵活和可管理。
  • 写法:传统Java Bean作为值对象,要求每个属性都提供getter和setter方法;但Spring中的Bean仅需为接受设值注入的属性提供setter方法

JMX

Java Management Extensions(JMX)是Java平台中一个重要的管理和监控技术,通过使用JMX,开发人员可以轻松地实现对Java应用程序进行监控和管理。

JMX介绍

JMX是Java平台的一个标准规范,它定义了一组API和协议,用于管理和监控Java应用程序的运行状态。JMX提供了一种统一的方式来访问Java应用程序的各种资源,包括操作系统、虚拟机、应用程序服务器和自定义应用程序组件等。

JMX的主要功能包括:

  1. 监控和管理Java应用程序的运行状态:JMX为Java应用程序提供了一种标准化的方式来访问应用程序内部的各种状态信息,比如内存使用情况、线程状态、GC情况等等。这些信息可以用于监控和管理应用程序的性能和可用性。
  2. 远程访问和管理:JMX支持通过网络远程访问和管理Java应用程序,使得开发人员可以随时随地地监控和管理应用程序的运行状态。
  3. 自定义MBean:JMX允许开发人员创建自定义MBean(Managed Bean),通过MBean可以暴露应用程序内部的状态信息和操作,从而方便开发人员进行监控和管理。

是不是和Spring Boot Actuator的功能很像,Spring Boot Actuator就用到了 JMX。此外,JConsole和VisualVM 也用到了 JMX。

image-20240410140129109

JMX架构与MBean

JMX的架构由三个主要组件组成:

  1. MBean: MBean是Managed Bean的缩写(中文可译为"托管Bean"),它是JMX中的核心概念。MBean用于暴露应用程序内部的状态信息和操作,比如内存使用情况、线程状态、GC情况等等。MBean可以被动态地创建、注册和注销,使得开发人员可以非常方便地将应用程序的状态信息暴露给JMX。
  2. MBean Server: MBean Server是JMX的核心组件,它提供了MBean的注册、查询和调用等功能。MBean Server负责管理所有注册到它上面的MBean,并通过JMX协议向外部提供服务。在Java应用程序中,每个JVM只有一个MBean Server实例。
  3. JMX Agent: JMX Agent是JMX的客户端组件,它允许开发人员通过网络远程访问和管理MBean Server。JMX Agent可以以独立进程的形式运行,也可以作为Java应用程序的一部分嵌入到应用程序中。

MBean就是一种规范的 Java Bean(即属于Java Bean的一种),集成和实现了一套标准的Java Bean 接口。在JMX中MBean代表一个被管理的资源【运行在Java虚拟机(JVM)上的资源】实例,例如应用程序或Java EE服务(事务监控、JDBC驱动程序等)。MBean会通过接口定义(这样外界就可以获取被管理的资源的状态和操纵MBean的行为),给出这些资源的一些特定操作,比如:

  1. 属性的读和写操作
  2. 可以被执行的操作
  3. 显示描述信息

JMX 中共有四种类型的 MBean,分别是 Standard MBean(标准MBean) Dynamic MBean(动态MBean)Open MBean(开放式MBean)MXBean(管理扩展Bean)Model MBean(模型MBean)。具体如下:

  1. Standard MBean(标准MBean):
    • Standard MBean是最简单的一种MBean类型,它是通过Java接口和具体实现类的方式定义的。
    • Standard MBean的接口定义了MBean的管理接口,实现类提供了具体的实现逻辑。
    • Standard MBean可以使用Java的反射机制自动生成MBean的管理接口和实现类的代码。
  2. Dynamic MBean(动态MBean):
    • Dynamic MBean是一种更灵活和动态的MBean类型,它不需要在编译时定义接口和实现类。
    • Dynamic MBean通过实现DynamicMBean接口来定义管理接口,并在运行时动态地提供管理属性和操作。
    • Dynamic MBean可以在运行时动态地添加、删除或修改其管理属性和操作。
  3. Open MBean(开放式MBean):
    • Open MBean是一种与特定Java类型无关的MBean类型,它可以管理任意类型的Java对象。
    • Open MBean使用MBean描述符来定义管理接口和属性,可以管理任意类型的对象和属性。
    • Open MBean可以通过MBean描述符提供属性类型、访问权限、合法值等信息。
  4. MXBean(管理扩展Bean):
    • MXBean是一种特殊类型的MBean,它通过Java接口和具体实现类的方式定义。
    • MXBean的接口定义了MBean的管理接口,实现类提供了具体的实现逻辑。
    • MXBean使用一组特定的注解来定义属性、操作和通知,并提供了更严格的类型限制和安全性。
  5. Model MBean(模型MBean):
    • Model MBean是JMX中的一种特殊类型的MBean,它提供了更灵活和可编程的管理机制。
    • Model MBean允许开发者在运行时动态地定义和管理MBean的属性、操作和通知。
    • Model MBean通过中间层的"模型"来将MBean的管理接口与实际的实现逻辑分离开来,实现了解耦和灵活的管理能力。
    • Model MBean可以通过配置和编程的方式进行定制,开发者可以在运行时为Model MBean设置属性、操作和通知,并为其提供自定义的实现逻辑。
    • Model MBean的管理接口可以通过MBeanInfo对象进行描述,包括属性、操作和通知等信息。

MXBean

MXBean 是一种MBean。更准确的来说,MXBean是一种引用预定义数据类型(例如java.util.Date)的MBean。通过这种方式,可以确保任何客户机(包括远程客户机)都可以使用MBean,而不需要客户机访问代表MBean类型的特定的类。MXBean提供一种方便的方法来绑定数据,而不需要客户端进行特殊的绑定操作。

鸣谢

Comments

2024-04-11

⬆︎TOP