java 将Spring Bean自动连接到默认方法的接口中

but5z9lq  于 2023-04-19  发布在  Java
关注(0)|答案(3)|浏览(164)

我需要向一些类实现的接口添加一个默认方法,但我的IDE会抱怨(bean may not have been initialized)。代码如下所示:

public interface IValidator {

    MyValidationBean beanToBeAutowired;
    ...
    default Boolean doSomeNewValidations(){
        return beanToBeAutowired.doSomeNewValidations();
    }
}

是不允许自动装配到接口中,还是代码有问题?在接口上使用@Component没有任何区别。
我宁愿保留这种设计,而不是使用抽象类。

pbossiut

pbossiut1#

我能想到的解决办法如下-

public interface IValidator {

   public Service getBeanToBeAutowired();

   default Boolean doSomeNewValidations(){
    return getBeanToBeAutowired().doSomeNewValidations();
   }

}

public class ValidatorClass implements IValidator {

    @Autowire private Service service;

    @Override
    public Service getBeanToBeAutowired() {
        return service;
    }

}
snvhrwxg

snvhrwxg2#

在Java中不可能在接口中添加变量。默认情况下,它将是public static final常量。因此您必须执行以下操作之一:

MyValidationBean beanToBeAutowired = new MyValidationBeanImpl();

或以下内容:

MyValidationBean beanToBeAutowired();

default Boolean doSomeNewValidations(){
    return beanToBeAutowired().doSomeNewValidations();
}

您可以在实现类中重写beanToBeAutowired方法。

kmpatx3s

kmpatx3s3#

只是一个想法,发送验证bean到接口为parameter;

public interface IValidator {

    default Boolean doSomeNewValidations(MyValidationBean beanToBeAutowired){
        return beanToBeAutowired.doSomeNewValidations();
    }
}

您的callerClass;

public class CallerClass implements IValidator{

    @Autowired
    MyValidationBean beanToBeAutowired;
    ...

    doSomeNewValidations(beanToBeAutowired);

}

相关问题