Skip to content

内置函数

为了方便获取附着应用信息,DebugTools 提供了一些 Groovy 内置函数。

获取JVM实例

通过调用 gi / getInstances 传入 class 对象获取该类当前 JVM 实例数组。

函数定义

java
/**
 * 获取JVM中指定Class所有的实例
 *
 * @param targetClass 要获取的class对象
 * @param <T>         具体的类型
 * @return 实例数组
 */
public <T> T[] gi(Class<T> targetClass) {}

/**
 * 获取JVM中指定Class所有的实例
 *
 * @param targetClass 要获取的class对象
 * @param <T>         具体的类型
 * @return 实例数组
 */
public <T> T[] getInstances(Class<T> targetClass) {}

使用示例

groovy
import org.springframework.context.ApplicationContext
// gi或者getInstances 获取jvm实例
gi(ApplicationContext.class)
gi ApplicationContext.class
getInstances(ApplicationContext.class)
getInstances ApplicationContext.class

Spring Bean操作

注入Bean实例

通过调用 rb / registerBean 注入Bean实例。

函数定义

java
/**
 * 向Spring容器中注入实例,通过Spring的BeanName规则生成BeanName
 *
 * @param bean 要获取的bean
 * @param <T>  具体类型
 */
public <T> void rb(T bean) {}

/**
 * 向Spring容器中注入实例,通过Spring的BeanName规则生成BeanName
 *
 * @param bean 要获取的bean
 * @param <T>  具体类型
 */
public <T> void registerBean(T bean) {}

/**
 * 向Spring容器中注入实例并指定BeanName
 *
 * @param beanName 注入的BeanName
 * @param bean     要获取的bean
 * @param <T>      具体类型
 */
public <T> void rb(String beanName, T bean) {}

/**
 * 向Spring容器中注入实例并指定BeanName
 *
 * @param beanName 注入的BeanName
 * @param bean     要获取的bean
 * @param <T>      具体类型
 */
public <T> void registerBean(String beanName, T bean) {}

使用示例

groovy
class TestBean {
    String hello(String name) {
        return "hello " + name
    }
}

def testBean = new TestBean()
rb(testBean)
rb("testBean", testBean)
registerBean(testBean)
registerBean("testBean", testBean)

获取Bean实例

通过调用 gb / getBean 获取Spring Bean实例。

函数定义

java
/**
 * 获取Spring容器中指定Bean的所有实例
 *
 * @param beanClass 要获取的class对象
 * @param <T>       具体类型
 * @return 实例数组
 */
public <T> T[] gb(Class<T> beanClass) {}

/**
 * 获取Spring容器中指定Bean的所有实例
 *
 * @param beanClass 要获取的class对象
 * @param <T>       具体类型
 * @return 实例数组
 */
public <T> T[] getBean(Class<T> beanClass) {}

/**
 * 获取Spring容器中指定Bean的所有实例
 *
 * @param beanName 要获取的bean名称
 * @param <T>      具体类型
 * @return 实例数组
 */
public <T> T[] gb(String beanName) {}

/**
 * 获取Spring容器中指定Bean的所有实例
 *
 * @param beanName 要获取的bean名称
 * @param <T>      具体类型
 * @return 实例数组
 */
public <T> T[] getBean(String beanName) {}

使用示例

groovy
gb(TestBean.class)
// 获取注入的testBean,执行hello方法
gb("testBean")[0].hello("debug tools")
gb TestBean.class
getBean(TestBean.class)
getBean("testBean")
getBean TestBean.class

销毁Bean实例

通过调用 urb / unregisterBean 销毁Spring Bean实例。

函数定义

java
/**
 * 销毁指定名称的Bean
 *
 * @param beanName 要销毁的Bean名称
 */
public void urb(String beanName) {}

/**
 * 销毁指定名称的Bean
 *
 * @param beanName 要销毁的Bean名称
 */
public void unregisterBean(String beanName) {}

使用示例

groovy
urb("testBean")
unregisterBean("testBean")

获取Spring运行环境

通过调用 gActive / getSpringProfilesActive 获取 spring.profiles.active 配置信息。

函数定义

java
/**
 * 获取spring运行环境
 *
 * @return 运行环境
 */
public String gActive() {}

/**
 * 获取spring运行环境
 *
 * @return 运行环境
 */
public String getSpringProfilesActive() {}

使用示例

groovy
gActive()
getSpringProfilesActive()

获取Spring配置信息

通过调用 gsc / getSpringConfig 获取spring配置信息。

函数定义

java
/**
 * 获取spring配置
 *
 * @param key 配置key
 * @return 具体配置信息
 */
public Object gsc(String key) {}

/**
 * 获取spring配置
 *
 * @param key 配置key
 * @return 具体配置信息
 */
public Object getSpringConfig(String key) {}

使用示例

groovy
gsc("spring.application.name")
gsc "spring.application.name"
getSpringConfig("spring.application.name")
getSpringConfig "spring.application.name"

完整示例

groovy
import org.springframework.context.ApplicationContext

// 返回结果
class ResultDTO {
    // gi的结果
    ApplicationContext[] gi
    // gb的结果
    TestBean[] gb
    // 调用hello方法的执行结果
    String helloMethodResult
    // 当前环境
    String active
    // 应用名
    String applicationName
}

// 要注入TestBean
class TestBean {

    String hello(String name) {
        return "hello " + name
    }
}

def result = new ResultDTO()

// gi或者getInstances 获取jvm实例
def v1 = gi(ApplicationContext.class)
result.gi = v1
gi ApplicationContext.class
getInstances(ApplicationContext.class)
getInstances ApplicationContext.class

def testBean = new TestBean()
// 向spring中注册bean
rb(testBean)
//rb("testBean", testBean)
//registerBean(testBean)
//registerBean("testBean", testBean)


// gb或者getBean 获取spring bean
def v2 = gb(TestBean.class)
result.gb = v2
// 获取注入的testBean,执行hello方法
result.helloMethodResult = gb("testBean")[0].hello("debug tools")
gb TestBean.class
getBean(TestBean.class)
getBean("testBean")
getBean TestBean.class

// 注销bean
urb("testBean")
//unregisterBean("testBean")

// gActive或者getSpringProfilesActive 获取当前spring环境
def v3 = gActive()
result.active = v3
getSpringProfilesActive()

// gsc或getSpringConfig 获取spring配置
def v4 = gsc("spring.application.name")
result.applicationName = v4
gsc "spring.application.name"
getSpringConfig("spring.application.name")
getSpringConfig "spring.application.name"
return result

通过 debug 方式查看到返回结果。

groovy_example_debug