動機
クラスローディングに関する以前の質問のフォローアップとして
人気のある Spring フレームワークでアノテーションがどのように機能するのか興味があります。
考えられる解決策
私が理解している限りでは、2 つのメカニズムが使用される可能性があります。
1. クラスローディング時のバイトコード インジェクション
Spring は独自のクラスローダーを使用して、必要なクラスをロードできます。実行時に、クラスがロードされ、Spring が適切なアノテーションがあると判断すると、バイトコードを挿入して、追加のプロパティまたは動作をクラスに追加します。
したがって、 で注釈が付けられたコントローラーは、@Controller
いくつかのコントローラー基本クラスを拡張するために変更される可能性があり、関数は で注釈が付けられたときにルーティングを実装するように変更される可能性があります@RequestMapping
。
@Controller
public class HelloWorldController {
@RequestMapping("/helloWorld")
public String helloWorld(Model model) {
model.addAttribute("message", "Hello World!");
return "helloWorld";
}
}
2. インスタンス化に使用されるリフレクション
@Autowired
インスタンス化の順序を処理し、構成されたプロパティをインスタンス化するために、実行時に BeanFactory によるリフレクションによって読み取ることができます。
public class Customer
{
private Person person;
@Autowired
public void setPerson(Person person) {
this.person = person;
}
}
質問
Spring アノテーションは実際にどのように機能しますか?