Spring 注解在 Web 层的演进
Spring 框架从诞生之初就致力于提供强大且非侵入式的解决方案。随着 Spring 2.0 引入定制命名空间,XML 配置逐渐精简,核心框架及各类项目(如 Security、CXF)都深深植根于这一机制中。到了 Spring 2.5,一套完整的注解体系正式推出,旨在替代繁琐的 XML 配置。这些注解覆盖了对象自动发现、依赖注入、生命周期管理、Web 层配置以及测试支持等多个维度。
组件扫描与基础注解
回顾一下基于 XML 的配置痛点:XML 文件往往臃肿不堪,尤其是 Web 层,充斥着视图名称、表单对象等配置信息,而真正的业务逻辑却很少涉及依赖注入。
通过 @Controller 和 @Autowired,我们可以大幅缩减配置代码。例如:
@Controller
public class ClinicController {
private final Clinic clinic;
@Autowired
public ClinicController(Clinic clinic) {
this.clinic = clinic;
}
}
这里 @Controller 标记该类为 Web 层组件,@Autowired 则请求一个被依赖注入的 Clinic 实例。只需少量 XML 语句即可让容器识别这些注解并限定扫描范围:
<context:component-scan base-package="org.springframework.samples.petclinic"/>
这对 Web 层配置可谓福音,避免了大量重复的 XML 声明。
从接口到注解:@MVC 的变革
传统的 Spring MVC 控制器通常实现 Controller 接口或继承基类(如 AbstractController)。这种模式虽然规范,但限制了灵活性。Spring 2.5 引入的 @MVC 注解技术(主要指 @RequestMapping 等)改变了这一设计模型:
- 无需接口或基类:普通 POJO 即可成为控制器。
- 任意数量的处理方法:不再局限于单一方法签名。
- 方法签名高度灵活:参数绑定更加自然。
这一切得益于 AnnotationMethodHandlerAdapter 适配器,它取代了对控制器基类的依赖,使得 DispatcherServlet 能够高效调用被注解的控制器。
@RequestMapping 实战
让我们看一个具体的映射示例。传统方式下,我们需要扩展接口;而在注解模式下,只需在方法上添加 @RequestMapping:
@Controller
public class AccountsController {
AccountRepository accountRepository;
{
.accountRepository = accountRepository;
}
ModelAndView Exception {
ServletRequestUtils.getStringParameter(request, );
();
mav.addObject(, accountRepository.findAccount(number));
mav;
}
}

