Lombok子类构造函数@Autowired

发布于 2025-02-08 01:21:06 字数 1658 浏览 2 评论 0原文

我有超级阶级:

@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注释,以免在子类中编写构造函数?

I have superclass:

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

And two subclass:

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

This code is work.
But if I change code: delete constructor in subclasses and add annotation lombok @SuperBuilder in all class.

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

}

The following error appears:

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.

How to correctly apply the lombok annotation in subclass, so as not to write constructor in subclass?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

野稚 2025-02-15 01:21:13

如果您使用@superbuilder,则不会创建构造函数。
为了注入OneRepository超级repository,您需要一个将这两个对象作为参数的构造函数。

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

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

If you use @SuperBuilder, no constructor is created.
In Spring in order to inject OneRepository and SuperRepository, you need a constructor having these two objects as parameters.

Using @AllArgConstructor, Lombok creates the constructor just for the members of that class, not considering the super class.
Why? You can read the answer of a Lombok developer here.

In the end, your first solution is a unique solution if you want to have a super class.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文