[英]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 中,为了注入OneRepository
和SuperRepository
,您需要一个将这两个对象作为参数的构造函数。
使用@AllArgConstructor
,Lombok 仅为该类的成员创建构造函数,而不考虑超类。 为什么? 您可以在此处阅读 Lombok 开发人员的答案。
最后,如果您想拥有一个超类,您的第一个解决方案是一个独特的解决方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.