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

时间:2018-10-03 07:07:28

标签: java spring spring-boot

我需要向某些类实现的接口添加默认方法,但是我的IDE抱怨(bean may not have been initialized)。 代码将是这样的:

public interface IValidator {

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

是否只是不允许自动装配到接口中,或者代码有问题? 在界面上使用@Component没什么区别。

我宁愿保留这种设计,也不要使用抽象类。

3 个答案:

答案 0 :(得分:1)

我可以想到以下解决方案-

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;
    }

}

答案 1 :(得分:0)

在Java中无法将变量添加到接口中。默认情况下,它将是一个public static final常量。因此,您必须执行以下任一操作:

MyValidationBean beanToBeAutowired = new MyValidationBeanImpl();

或以下内容:

MyValidationBean beanToBeAutowired();

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

您可以在实现类中覆盖beanToBeAutowired方法。

答案 2 :(得分:0)

只是一个想法 ,发送验证信息bean以与parameter交互;

public interface IValidator {

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

您的callerClass

public class CallerClass implements IValidator{

    @Autowired
    MyValidationBean beanToBeAutowired;
    ...

    doSomeNewValidations(beanToBeAutowired);

}