今天在项目中遇到一个由于Java反射调用Bean方法而导致Spring特性失效的问题,折腾了半天,现给出解决方案。
1、抛出问题
我要在控制器的某个方法中通过反射调用一个service的方法,但是这个方法已经被纳入切面同时该方法也依赖于其他通过Spring自动注入的Bean实例,准备代码如下:
1.1、编写TestAspectController类
@RestController
public class TestAspectController {
@GetMapping("/testAspect")
public Object testAspect() throws NoSuchMethodException {
try {
//通过完整类名反射加载类
Class cla = Class.forName("com.icypt.learn.service.TestAspectService");
//取得类实例
Object obj = cla.newInstance();
//通过实例反射调用sayHello方法
obj.getClass().getDeclaredMethod("sayHello").invoke(obj);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();