インタビュアー: Springboot における @Bean と @Component の違い、e コマースを例に挙げて、それらの使用法について話します

目次

@Bean と @Component の違い

e コマース システムを例に説明します。

同じクラスで使用することをお勧めしますか


@Bean@Component的区别

Spring フレームワークでは、アノテーション@Bean@Componentアノテーションの両方を使用してコンポーネントを定義しますが、それらの間にはまだいくつかの違いがあります。

@Component注釈は、クラスを Spring のコンポーネントとして識別します。通常、コンポーネントを自動的にスキャンするために使用されます。Spring はこれらの注釈を自動的に検出してインスタンス化します。

@Bean注釈は、Bean を手動で構成するために使用され、通常は JavaConfig で Bean を宣言します

e コマース システムを例に説明します。

電子商取引システムで使用し@Beanて注釈を付ける必要がある可能性があるいくつかの例を次に示します。@Component

  • @Component:

    • UserController:登録、ログイン、個人情報の変更、その他の操作を含む、ユーザー関連のリクエストの処理を担当します。

    • ProductService: 商品の追加、変更、削除、照会、その他の操作を含む商品の管理を担当します。

    • OrderRepository: 注文の保存、注文の照会、注文の削除などの操作を含む、注文データの永続化を担当します。

//@Controller、@Service和@Repository这些都是component
@Controller
public class UserController {

    @Autowired
    private UserService userService;

    // other methods
}

@Service
public class UserService {

    @Autowired
    private UserRepository userRepository;

    // other methods
}

@Repository
public class UserRepository {

    // 数据库访问操作
}
  • @Bean:

    • RestTemplate: e コマース システムのサードパーティ API に HTTP 要求を送信するために使用されるクラス。

    • PasswordEncoder: パスワードを暗号化および復号化するためのクラスで、通常は複雑なロジック処理が必要です。

    • DataSource: データベース接続プールを構成および管理するために使用されます。通常、サードパーティ ライブラリを使用して作成する必要があります。

@Configuration
public class MyConfig {

    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

    @Bean
    public DataSource dataSource() {
        HikariConfig config = new HikariConfig();
        config.setJdbcUrl("jdbc:mysql://localhost:3306/mydatabase");
        config.setUsername("myusername");
        config.setPassword("mypassword");
        config.addDataSourceProperty("cachePrepStmts", "true");
        config.addDataSourceProperty("prepStmtCacheSize", "250");
        config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
        return new HikariDataSource(config);
    }
}

同じクラスで使用することをお勧めしますか

同じクラスで同時にアノテーション@Componentを使用すると@Bean、Spring はクラスをコンポーネントと Bean として同時に扱います。具体的には、このクラスは自動的にスキャンされてコンポーネントにインスタンス化され、JavaConfig クラスの @Bean メソッドによって手動で Bean にインスタンス化されます。これにより、インスタンス化が繰り返されるという問題が発生する可能性があるため、回避する必要があります。

したがって、不必要な問題を避けるために、同じクラスで@Componentとアノテーションを同時に使用しないことをお勧めします。@Beanアノテーションを使用して Bean を手動で構成する必要がある場合は@Bean、別の JavaConfig クラスで定義できます。

おすすめ

転載: blog.csdn.net/qq_27575627/article/details/129484777