目次
@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 クラスで定義できます。