@Component を仕様発展史として味わうと、出発点はSpringではなく、Java 5で導入された JSR 175: A Metadata Facility for the Java Programming Language にある。JSR 175は、クラス、メソッド、フィールドなどのプログラム要素へ、構造化されたメタデータを付与する仕組みとしてアノテーションを導入した。重要なのは、この段階でアノテーションは「処理」ではなく「注釈付き属性」であり、プログラムの意味を直接変えるものではなかった点である。
この仕様により、@interface、@Target、@Retention が定義され、RUNTIME 指定のアノテーションはclassファイルに RuntimeVisibleAnnotations などの属性として保存され、Reflectionから参照可能になった。Javaが提供したのは、あくまで「メタデータを宣言し、保存し、読み出す」標準機構である。
その器をフレームワークが利用した代表例が @Component である。@Component 自体は、Java仕様上は単なるRUNTIME保持のannotation typeにすぎない。しかしSpringはこれを「コンテナ管理対象を示す印」と解釈する。つまり、Java仕様はメタデータの文法と格納形式を与え、Springはそこに「クラス発見」「Bean定義化」「依存注入」という意味論を重ねた。
発展史としては、XMLなど外部設定で管理していた構成情報が、Java 5以降、ソースコード上のアノテーションへ移動したといえる。@Component はその象徴であり、Javaのメタデータ仕様が、フレームワーク設計を「外部記述」から「コード内宣言」へ押し出した事例である。
関連キーワード:JSR 175、Java 5、metadata facility、annotation type、@interface、@Target、@Retention、RuntimeVisibleAnnotations、Reflection、class file attribute、source-level metadata、@Component、component model、configuration metadata、DI container。