动机
作为我之前关于类加载的问题的后续行动
我很好奇注释在流行的 Spring 框架中是如何工作的。
可能的解决方案
据我了解,可能会使用两种机制:
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 注解如何真正起作用?