0Pricing
Java Academy · レッスン

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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 自動構成とSpring Bootスターター
  2. アプリケーションプロパティとプロファイル
  3. Beanの配線:@Component、@Service、@Repository
  4. コンストラクターインジェクションと循環依存
← Java Academyに戻る