在Spring Boot中放@Bean在哪里?

2022-08-31 19:59:04

我想知道Spring Boot应用程序注册其他豆子的最佳位置是什么。我有一个 Main 类,它被注释,并在该类中定义的 bean 被拾取。但是当我把这些豆子放在另一个类中时,似乎没有被注册。@SpringBootApplication

在阅读文档时,我的想法是,将隐式搜索其中有注释的类。@SpringBootApplication@Bean

所以我的选择现在是:

  1. 把所有带注释的豆子放在我的主类中@Bean

    @SpringBootApplication
    public class MyApplication {
    
        @Bean
        public Filter AuthenticationFilter() {
            return new AuthenticationFilter();
        }
    
        public static void main(String[] args) {
            SpringApplication.run(MyApplication.class, args);
        }
    }
    
  2. 创建一个配置类,并为其添加注释@Configuration

    @Configuration
    public class MyConfiguration {
        @Bean
        public Filter AuthenticationFilter() {
            return new AuthenticationFilter();
        }
    }
    

有没有更好的方法来做到这一点?


答案 1

这几乎是一个偏好问题,但通常认为将公开的bean放在配置类中是最佳实践,这些配置类在逻辑上是分组的。

例如,您可能有几个配置类,每个配置类中都包含许多bean:一个带有Bean的身份验证配置类,用于SauthorationProvisioner或UserDetailsService;一个 Thymeleaf 配置类,包含各种 Thymeleaf 方言等的豆类。


答案 2

实际上,这是你的选择,没有弹簧标准来判断哪一个是最好的,但是在定义一个类OOP设计原则时说A类应该是和,应该,在这里loosely coupledhighly cohesivefollow Single Responsibility Principle (SRP)

Coupling--> 一个班级对另一个班级的知识程度

Cohesion-->学位,它告诉您的课程有多集中

SRP-->一个类应该只有一个责任,所以应该只有一个理由来改变一个类。

所以根据内聚力和SRP原则类应该重点突出,只有一个责任。

在你的情况下,你只有2个豆子,但将来,这些豆子可能会增加。因此,应遵循您的第二点,并为您的bean声明创建另一个类。

在我的选择中,甚至应该创建更多的配置类,所以一个配置类应该具有类似类型的bean。


推荐