JMX在技術上的需求可以說是將管理功能從功能性接口中分離出來。
例如一個緩存接口
interface ICache{
Object get(Object key);
void put(Object key, Object value);
}
但一個具體實現類可能有很多參數可以調整,如緩存的最大尺寸等。這些可配置參數一般與具體實現緊密相關,即與實例相關,而不直接涉及到所要實現的功能。例如實現類可以具有setMaxSize()和getMaxSize()方法。
如 果這些配置方法在功能接口中定義,就會造成功能接口的臃腫和不必要的與實現方法之間的依賴。如果直接調用實現類的方法,只能使用reflection, 但是java class作為元數據所承載的信息量有限,需要外部定義一個規范來補充信息。JMX就是這樣的一種規范。
例如一個緩存接口
interface ICache{
Object get(Object key);
void put(Object key, Object value);
}
但一個具體實現類可能有很多參數可以調整,如緩存的最大尺寸等。這些可配置參數一般與具體實現緊密相關,即與實例相關,而不直接涉及到所要實現的功能。例如實現類可以具有setMaxSize()和getMaxSize()方法。
如 果這些配置方法在功能接口中定義,就會造成功能接口的臃腫和不必要的與實現方法之間的依賴。如果直接調用實現類的方法,只能使用reflection, 但是java class作為元數據所承載的信息量有限,需要外部定義一個規范來補充信息。JMX就是這樣的一種規范。