SpringBoot 反射自动注入bean,并调用其方法

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_36511401/article/details/102613446

1、测试代码。关于springboot、swagger-ui和反射的相关知识,可以查看我的其他文章。Java 反射机制SpringBoot swagger2的使用

package com.zxj.reptile.api.test;

import com.zxj.reptile.api.AjaxJson;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.lang.reflect.Method;


@Api(value = "test", tags = "测试Api")
@RestController
@RequestMapping("test")
public class TestApi {
    @Autowired
    private ApplicationContext applicationContext;

    @ApiOperation(value = "测试", notes = "测试")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "className", value = "类名(包含路径)", dataType = "String", paramType = "query"),
            @ApiImplicitParam(name = "methodName", value = "方法名", dataType = "String", paramType = "query")
    })
    @RequestMapping(value = "reflexTest", method = RequestMethod.GET)
    public AjaxJson reflexTest(@RequestParam(value = "className") String className,
                               @RequestParam(value = "methodName") String methodName) {
        AjaxJson ajaxJson = new AjaxJson<>();
        try {
            Class<?> aClass = Class.forName(className);
            Object obj = applicationContext.getBean(aClass);
            Method method = aClass.getMethod(methodName);
            String str = (String) method.invoke(obj);
            ajaxJson.setData(str);
        } catch (Exception e) {
            e.printStackTrace();
            ajaxJson.error("失败: " + e.getMessage());
        }
        return ajaxJson;
    }

    public void test() {
        System.out.println("I am just a test");
    }
}

2、swagger测试接口,输入类名为:com.zxj.reptile.api.test.TestApi,输入方法名为test。就可以在SpringBoot中自动注入bean,并调用其方法。

猜你喜欢

转载自blog.csdn.net/qq_36511401/article/details/102613446
今日推荐