使用spring-bean-invoke通过网页参数获取bean方法的执行结果

6 篇文章 0 订阅

spring-bean-invoke是通过bean-invoke调用spring的bean的示例项目,结合接口访问工具便可以进行项目中bean方法的调用,可用于某一方法的单元测试

InvokeParameterResolver主要是用来实现无法自动解析的参数,比如org.springframework.data.domain.Pageable,
可在convert方法中进行转换传入的参数

参数值的转换是通过类型转换——>自定义解析——>json数据的转换

bean-invoke: https://github.com/joker-pper/bean-invoke.git
spring-bean-invoke: https://github.com/joker-pper/spring-bean-invoke.git
接口工具地址: http://joker_yyc.coding.me/bean-invoke-html/

功能说明:

  1. 支持远端客户端执行bean/class方法
  2. 结合接口工具可直接选择bean/class方法通过自定义参数完成service/controller的执行结果

如何集成到项目:

 添加bean-invoke.jar依赖到项目中
 参考提供的InvokeBeanController在项目中提供相应的接口(可直接复制到项目中)
    getBean(String name)是用来通过该name找到所对应的实例,然后执行对应的bean方法
    parameterResolver()是用来提供外部无法转换的数据的自定义解析


注意事项

1. 若使用提供的接口工具访问:
    1.1 接口需提供跨域支持
    1.2 ajax跨域请求时若出现自定义header将出现预检请求,若项目中存在OPTIONS请求拦截的话需要进行放行,可参考AuthFilter进行处理
    1.3 请求方法执行接口结束路径必须为/result (post请求,参数在body中),获取方法列表接口结束路径必须为/method/entitys  (get请求)
2. 方法执行权限较大,需要注意数据安全问题

          

接口工具操作主要步骤:

  1. 设置接口地址路径
  2. 添加请求头(可选)
  3. 设置储存项(可作为项目,根据不同项储存相应的接口地址/bean名称/class类型)
  4. 设置bean名称(用于通过bean名称找到对应实例执行对应的方法)/class类型(用于通过class类型执行对应的方法)
  5. 点击加载按钮,加载当前bean/class的方法列表
  6. 输入方法中各参数类型所对应的参数值(基本类型直接输入对应的数值,其他对象则输入符合类型的json格式数据)
  7. 点击获取按钮获取执行结果

HandlerService方法参数示例:

运行项目后接口工具使用截图(若未开启header token验证,则无需添加请求头)

 public void showOrder(Order order1, Order order2, Order... orders) {
        System.out.println("show order1 : " + JSONObject.toJSONString(order1));
        System.out.println("show order2 : " + JSONObject.toJSONString(order2));
}

对应参数:

public int add(int a, int b) {
        return a + b;
 }

对应参数:

 public Page convertPage(Page page) {
        return page;
 }

对应参数:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以通过在方法前后添加时间戳,然后计算时间差来计算方法耗时。也可以使用Spring AOP的拦截器,在方法执行前后记录时间戳,然后计算时间差。以下是一个使用Spring AOP计算方法耗时的示例: 1. 定义一个切面类,实现MethodInterceptor接口 ```java @Component @Aspect public class TimingAspect implements MethodInterceptor { @Override public Object invoke(MethodInvocation invocation) throws Throwable { long startTime = System.currentTimeMillis(); Object result = invocation.proceed(); long endTime = System.currentTimeMillis(); long elapsedTime = endTime - startTime; System.out.println(invocation.getMethod().getName() + " 方法耗时:" + elapsedTime + "ms"); return result; } } ``` 2. 在配置文件中启用AOP,并将切面类作为切点 ```xml <aop:aspectj-autoproxy /> <bean id="timingAspect" class="com.example.TimingAspect" /> <aop:config> <aop:aspect ref="timingAspect"> <aop:pointcut expression="execution(* com.example.service.*.*(..))" /> <aop:around method="invoke" /> </aop:aspect> </aop:config> ``` 3. 在需要计算耗时的方法上加上@LogExecutionTime注解 ```java @Service public class MyService { @LogExecutionTime public void doSomething() { // do something } } ``` 4. 定义@LogExecutionTime注解和切面类 ```java @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface LogExecutionTime { } @Component @Aspect public class TimingAspect { @Around("@annotation(com.example.LogExecutionTime)") public Object logExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable { long startTime = System.currentTimeMillis(); Object result = joinPoint.proceed(); long endTime = System.currentTimeMillis(); long elapsedTime = endTime - startTime; System.out.println(joinPoint.getSignature().getName() + " 方法耗时:" + elapsedTime + "ms"); return result; } } ``` 这样,在调用doSomething方法时,就会输出方法耗时的信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值