java - 通过 @Configuration 在自己的类上返回 @Bean
问题描述
我有以下课程:
@Configuration
@Component
@Getter
public class EndUserDisambiguator extends UserDisambiguator {
private final Collection<UserCredentialDisambiguator<?, ?, ?>> endUserCredentialDisambiguators;
@Autowired
public EndUserDisambiguator(final EndUserRepository userRepository) {
super(userRepository);
val phoneNumberDisambiguator = new UserCredentialDisambiguator<>(EndUser::getPhoneNumber, userRepository::findByPhoneNumber, PhoneNumberExistsException::new);
val socialSecurityNumberDisambiguator = new UserCredentialDisambiguator<>(EndUser::getSocialSecurityNumber, userRepository::findBySocialSecurityNumber, SocialSecurityNumberExistsException::new);
this.endUserCredentialDisambiguators = Set.of(phoneNumberDisambiguator, socialSecurityNumberDisambiguator);
}
@Override
public Collection<UserCredentialDisambiguator<?, ?, ?>> getUserCredentialDisambiguators() {
val baseCredentialDismabiguators = super.getUserCredentialDisambiguators().stream();
val specificUserCredentialDisambiguators = getEndUserCredentialDisambiguators().stream();
val userCredentialDisambiguators = Stream.concat(baseCredentialDismabiguators, specificUserCredentialDisambiguators);
return userCredentialDisambiguators.collect(Collectors.toUnmodifiableSet());
}
@Bean(UserDisambiguator.END_USER_QUALIFIER)
public EndUserDisambiguator getEndUserDisambiguator() {
return this;
}
}
这是我的应用程序消歧层的一部分,该层确保在服务层中创建的任何非持久用户不会干扰现有的持久用户(例如,确保用户名是唯一的)。`
因此,它是@Autowired
对用户存储库的引用,只有消歧层是@Autowired
存储库(服务层不是)。服务层通过消歧层进行持久化。
EndUserService
(相同类型用户的相应服务)因此需要@Autowired
引用EndUserDisambiguator
. 我不想将存储库层泄漏到服务层(服务层执行其持久的后消歧)。声明EndUserDisambiguator
a@Configuration
并有一个方法返回@Bean
对应于自身的 a 是设计缺陷吗?
这是EndUserDisambiguator
注入的位置:
@Service
public class EndUserService extends UserService {
@Autowired
public EndUserService(final VerificationTokenRepository verificationTokenRepository, final EndUserDisambiguator userDisambiguator) {
super(verificationTokenRepository, userDisambiguator);
}
...
}
解决方案
推荐阅读
- css - CSS 变换动画未按预期工作
- c# - 我应该将 Task.Run() 用于执行 I/O 的 BackgroundService
- python - Python pytorch 函数过快消耗内存
- linux - 为什么`rsnapshot`重复请求密码?
- laravel - 我需要帮助将此查询转换为 Laravel 查询生成器
- android - 是否可以从 React Native 重定向到本机设置页面以进行订阅管理?
- laravel - 我们无法识别您的电子邮件地址
- bash - 替换文件中的环境变量
- java - 如何在 Java Azure 函数中使用事件中心触发器
- laravel - 无法返回登录页面