【问题标题】:Class doesn't contain matching constructor for autowiring类不包含用于自动装配的匹配构造函数
【发布时间】:2014-03-15 19:40:32
【问题描述】:

我有两节课

public abstract class AbstractDAO<T> {
    private final MyExecutor<T> myExecutor;
    private final Class<T> clazz;

    public AbstractDAO(MyExecutor<T> myExecutor, Class<T> clazz) {
        this.myExecutor = myExecutor;
        this.clazz = clazz;
    }
}

@Component
public class MyDAOImpl extends AbstractDAO<Manager> {
    private final SessionManager sessionManager;
    private final MyExecutor<Manager> myExecutor;

    @Autowired
    public MyDAOImpl(SessionManager sessionManager, MyExecutor<Manager> myExecutor) {
        super(myExecutor, Manager.class);

        this.sessionManager = sessionManager;
        this.myExecutor= myExecutor;
    }
}

我在抽象类的定义中遇到一个错误,说:“类不包含用于自动装配的匹配构造函数”。

我所做的只是为 AbstractDAO 的构造函数添加了一个额外的构造函数参数,它是一个类。我需要这个,因为我没有找到一种方法在运行时从 T 中检测到这一点(stackflow 搜索说没有)。

我该如何解决这个问题?如何传递只能在实现类中确定的Class信息?

非常感谢

【问题讨论】:

  • 这是一个编译时错误。没有堆栈空间。谢谢。
  • 您的代码,如图所示,编译良好。
  • 只有在抽象类 AbstractDAO 的构造函数中添加 @Autowired 时才会编译。否则,它不会。我想知道为什么会这样。非常感谢。
  • 我认为你误解了什么是编译。您的错误不是编译错误(除非您的问题严重缺少某些内容)。

标签: java spring dependency-injection


【解决方案1】:

这是 IntelliJ 中的一个错误,已在 13.1 中修复。 http://youtrack.jetbrains.com/issue/IDEA-120977

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-14
    • 2013-06-23
    • 1970-01-01
    • 1970-01-01
    • 2012-05-06
    • 1970-01-01
    • 2019-04-22
    相关资源
    最近更新 更多