首页 > 解决方案 > Spring 无法实例化类:原因:java.lang.NoSuchMethodException

问题描述

我试图在一个将拦截数据库查询的类中注入一个 Utils 类,但显然,Spring 找不到构造函数。这两个类都带有注释,@Component并且在扫描其他弹簧组件时位于包中。

Utils 类如下:

@Component
public class Utils {

    private static final String LOCAL_PROFILE = "local";

    private final Environment environment;
    private final String dummy = "dummy";

    @Autowired
    public Utils(Environment environment) {
        this.environment = environment;
    }

    public String getInfo() {

        //to avoid ST Visa issues in Local environment
        if (environment != null && Arrays.asList(environment.getActiveProfiles()).contains(LOCAL_PROFILE)) {
            return dummy;
        }

        return SecurityContextHolder.getContext().getAuthentication().getName();
    }
}

我要注入 Utils 的拦截器如下:

@Component
public class ContractInterceptor implements StatementInspector {

    private final Utils utils;

    @Autowired
    public ContractInterceptor(Utils utils) {
        this.utils = utils;
    }

    @Override
    public String inspect(String sql) {
        //String info = utils.getInfo();
        log.info("Enter Interceptor" + sql);
        return sql;
    }
}

春天失败了

Caused by: java.lang.NoSuchMethodException: com.package.interceptor.<init>()    at
java.base/java.lang.Class.getConstructor0(Class.java:3349)  at
java.base/java.lang.Class.newInstance(Class.java:556)

谢谢。

标签: springspring-bootinversion-of-controlautowired

解决方案


推荐阅读