Beanの配線:@Component、@Service、@Repository
ステレオタイプアノテーションを使い、@BeanでBeanを定義して、コンポーネントスキャンの仕組みを理解します。
「Beanの配線:@Component、@Service、@Repository」はCoddyKit上の無料Java Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはJava Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Java Academyコースには全4レッスンが含まれています。
ステレオタイプアノテーション
Springには、クラスをSpring管理Beanとしてマークし、その役割を示すステレオタイプアノテーションがあります。@Component(汎用)、@Service(ビジネスロジック)、@Repository(データアクセス)、@Controller/@RestController(Web層)です。
@Component: 汎用Bean
@Componentが付いたクラスは、コンポーネントスキャン中に検出され、Spring Beanとして登録されます。これは、他のすべてのステレオタイプの基礎となります。
@Component
public class EmailFormatter {
public String format(String to, String subject) {
return "To: " + to + "\nSubject: " + subject;
}
}@Service: ビジネスロジック層
@Serviceは@Componentの特殊化であり、意味上、そのクラスがサービスクラスであることを示します。Springは@Componentと同じように扱いますが、意図を明確にでき、AOPアドバイザーによって使用される場合があります。
@Service
public class OrderService {
private final OrderRepository repo;
public OrderService(OrderRepository repo) { this.repo = repo; }
public Order placeOrder(Cart cart) { /* business logic */ return repo.save(new Order(cart)); }
}@Repository: データアクセス層
@RepositoryはDAOクラスを示します。Springは永続化例外の自動変換を追加し、SQLExceptionやベンダー固有の例外をSpringのDataAccessException階層でラップします。
@Repository
public class JdbcUserRepository {
private final JdbcTemplate jdbc;
public JdbcUserRepository(JdbcTemplate jdbc) { this.jdbc = jdbc; }
public User findById(long id) {
return jdbc.queryForObject("SELECT * FROM users WHERE id=?",
new BeanPropertyRowMapper<>(User.class), id);
}
}@Configurationクラスの@Bean
@Configurationクラス内のメソッドに@Beanを付けると、Beanを手動で登録できます。アノテーションを付けられないサードパーティ製クラスに便利です。
@Configuration
public class AppConfig {
@Bean
public ObjectMapper objectMapper() {
return new ObjectMapper().registerModule(new JavaTimeModule());
}
@Bean
public RestTemplate restTemplate() { return new RestTemplate(); }
}コンポーネントスキャン
@SpringBootApplicationは、アプリケーションのパッケージを起点として、その配下でコンポーネントスキャンを実行します。サブパッケージ内のクラスは自動的に検出されます。@ComponentScan(basePackages=...)を使用するとカスタマイズできます。
// Explicit scan (rarely needed in Spring Boot):
@SpringBootApplication
@ComponentScan(basePackages = {"com.example.app", "com.example.shared"})
public class MyApp { ... }Beanの名前付け
デフォルトでは、Bean名はクラス名の先頭を小文字にしたものです(OrderService → orderService)。カスタム名を指定するには、@Service("orders")または@Bean("myMapper")を使用します。
@Service("orderSvc")
public class OrderService { ... }
// Inject by name:
@Autowired @Qualifier("orderSvc")
private OrderService svc;Beanスコープ
デフォルトのスコープはsingletonです(Springコンテキストごとに1つのインスタンス)。その他のスコープには、prototype(インジェクションごとに新しいインスタンス)、request、session(Web専用)があります。
@Service
@Scope("prototype")
public class ReportBuilder {
private List<String> lines = new ArrayList<>();
public void addLine(String line) { lines.add(line); }
}@Primaryと@Qualifierによる曖昧性の解消
同じインターフェースを複数のBeanが実装している場合、デフォルトにするBeanには@Primaryを付けます。または、インジェクションポイントで@Qualifier("name")を使用して特定のBeanを選択します。
@Service @Primary
public class CacheUserService implements UserService { ... }
@Service
public class DbUserService implements UserService { ... }
// Inject specific one:
@Autowired @Qualifier("dbUserService")
private UserService userService;遅延初期化
デフォルトでは、singleton Beanは起動時に作成されます。@Lazyを付けると、初回使用時まで作成を遅延できます。使用頻度が低く、作成コストの高いBeanに便利です。
@Service @Lazy
public class HeavyReportService {
public HeavyReportService() { System.out.println("Created on first use"); }
}@PostConstructと@PreDestroy
@PostConstructを使用すると、依存関係のインジェクション後に初期化処理を実行できます。@PreDestroyを使用すると、Beanの破棄前にリソースをクリーンアップできます。
@Service
public class CacheService {
@PostConstruct
public void init() { System.out.println("Cache warming up..."); }
@PreDestroy
public void cleanup() { System.out.println("Cache cleared."); }
}クイックチェック
@Repositoryは@Componentにどのような追加動作をもたらしますか?
まとめ
ビジネスロジックには@Service、DAOには@Repository、ユーティリティには@Component、サードパーティ製の型には@Beanを使用します。複数のBeanの解決には@Primary/@Qualifierを使用します。ライフサイクルフックには@PostConstruct/@PreDestroyを使用します。
よくある質問
「Beanの配線:@Component、@Service、@Repository」レッスンは無料ですか?
はい。「Beanの配線:@Component、@Service、@Repository」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Java Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Java Academyコースには全4レッスンが含まれています。
「Beanの配線:@Component、@Service、@Repository」で何を学びますか?
ステレオタイプアノテーションを使い、@BeanでBeanを定義して、コンポーネントスキャンの仕組みを理解します。 ブラウザで直接実行するハンズオンコードでJava Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Java Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのJava Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「Beanの配線:@Component、@Service、@Repository」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このJava Academyレッスンでコードを書いて実行できますか?
はい。すべてのJava Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 自動構成とSpring Bootスターター
- アプリケーションプロパティとプロファイル
- Beanの配線:@Component、@Service、@Repository
- コンストラクターインジェクションと循環依存