Spring使用JMX

本文介绍如何在Spring中利用JMX注解如@ManagedResource和@ManagedAttribute等,实现对简单Bean的管理与监控。通过示例代码展示了配置过程,并解析了Spring内部对这些注解的处理机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Spring 中使用 JMX 要使用 ManagedResource ManagedAttribute 等注解来描述

 

例子演示

 

package cn.shendu.springbootlesson17.jmx;

 

 

import org.springframework.jmx.export.annotation.ManagedAttribute;

import org.springframework.jmx.export.annotation.ManagedResource;

import org.springframework.stereotype.Component;

 

@ManagedResource(

objectName = "cn.shendu.springbootlesson17.jmx:type=SimpleBean",

description = "这是一个简单的Bean,被spring托管"

)

@Component

public class SimpleBean {

private Long id;

private String name;

private Integer value;

 

@ManagedAttribute(description = "ID 属性")

public Long getId() {

return id;

}

 

public void setId(Long id) {

this.id = id;

}

 

@ManagedAttribute(description = "name 属性")

public String getName() {

return name;

}

 

public void setName(String name) {

this.name = name;

}

 

public Integer getValue() {

return value;

}

 

public void setValue(Integer value) {

this.value = value;

}

 

@Override

public String toString() {

return "SimpleBean{" +

"id=" + id +

", name='" + name + '\'' +

", value=" + value +

'}';

}

}

 

 

结果演示

 

 

 

 

源码分析

 

spring 实现 MBean 要实现 此接口

@Target(ElementType.TYPE)

@Retention(RetentionPolicy.RUNTIME)

@Inherited

@Documented

public @interface ManagedResource

 

被 AnnotationJmxAttributeSource 获取并初始化 ManagedResource

AnnotationJmxAttributeSource 下的

 

@Override

public org.springframework.jmx.export.metadata.ManagedResource getManagedResource(Class<?> beanClass) throws InvalidMetadataException {

ManagedResource ann = AnnotationUtils.findAnnotation(beanClass, ManagedResource.class);

return managedResource;

}

 

 

AnnotationJmxAttributeSource 被 MetadataNamingStrategy初始化

MetadataNamingStrategy 下的

 

public MetadataNamingStrategy(JmxAttributeSource attributeSource) {

Assert.notNull(attributeSource, "JmxAttributeSource must not be null");

this.attributeSource = attributeSource;

}

 

 

 

AnnotationMBeanExporter初始化 metadataNamingStrategy

AnnotationMBeanExporter 下的

 

private final MetadataNamingStrategy metadataNamingStrategy =

new MetadataNamingStrategy(this.annotationSource);

 

 

 

AnnotationMBeanExporter 注册 MBean

MBeanExporter  下 的 doRegister(mbean, objectName);

registeredBean = this.server.registerMBean(mbean, objectName);

 

 

 

大概的调用 链是

@interface ManagedResource

-- > AnnotationJmxAttributeSource impl JmxAttributeSource : getManagedResource 获取

--> MetadataNamingStrategy : MetadataNamingStrategy(JmxAttributeSource attributeSource)

--> AnnotationMBeanExporter ext MBeanExporter : MetadataNamingStrategy metadataNamingStrategy = new MetadataNamingStrategy(this.annotationSource)

--> MBeanExporter : doRegister --> this.server.registerMBean(mbean, objectName)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值