繁体   English   中英

Lombok 子类构造函数@Autowired

[英]Lombok subclass constructor @Autowired

我有超类:

@AllArgsConstructor
public abstract class AbstractSuperService {
     protected final SuperRepository superRepository;
  
}

和两个子类:

@Service
public class OneSubService extends AbstractSuperService {
     private final OneRepository oneRepository;
     
     public OneSubService(SuperRepository superRepository, OneRepository oneRepository){
         super(superRepository);
         this.oneRepository = oneRepository;
    }
}


@Service
public class SecondSubService extends AbstractSuperService {
     private final SecondRepository secondRepository;

     public SecondSubService(SuperRepository superRepository, SecondRepository secondRepository){
         super(superRepository);
         this.secondRepository = secondRepository;
    }
}

这段代码是工作。 但是如果我更改代码:删除子类中的构造函数并在所有类中添加注释 lombok @SuperBuilder。

@AllArgsConstructor
@SuperBuilder
public abstract class AbstractSuperService {
     protected final SuperRepository superRepository;
  
}

@Service
@SuperBuilder
public class OneSubService extends AbstractSuperService {
     private final OneRepository oneRepository;
     
}


@Service
@SuperBuilder
public class SecondSubService extends AbstractSuperService {
     private final SecondRepository secondRepository;

}

出现以下错误:

Description:

Parameter 0 of constructor in OneSubService required a bean of type 'OneSubService$OneSubServiceBuilder' that could not be found.


Action:

Consider defining a bean of type 'OneSubService$OneSubServiceBuilder' in your configuration.

如何在子类中正确应用lombok注解,以免在子类中编写构造函数?

如果您使用@SuperBuilder ,则不会创建构造函数。 在 Spring 中,为了注入OneRepositorySuperRepository ,您需要一个将这两个对象作为参数的构造函数。

使用@AllArgConstructor ,Lombok 仅为该类的成员创建构造函数,而不考虑超类。 为什么? 您可以在此处阅读 Lombok 开发人员的答案。

最后,如果您想拥有一个超类,您的第一个解决方案是一个独特的解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM