当迁移到 Spring 2.5.x 时,我发现它添加了更多的原型注解(在2.0的@Repository之上): @Component、@ Service和@Controller。你如何使用它们?您是依赖隐式 Spring 支持还是定义自定义构造型特定功能/方面/特性?还是主要用于标记 bean(编译时间、概念等)?
3 回答
2.5 中的以下构造型注释可以在 Spring MVC 应用程序中使用,作为在 XML 中连接 bean 的替代方法:
@Repository - 对于 DAO bean - 允许您在数据源不可用时抛出 DataAccessException。
@Service - 用于业务 bean - 是相当简单的 bean,它们设置了一些默认的保留策略。
@Controller - 用于 servlet - 允许您设置页面请求映射等。
此外,还引入了通用的第四个注解:@Component。所有的 MVC 注释都是这个注释的特化,你甚至可以单独使用 @Component,尽管通过在 Spring MVC 中这样做,你将不会使用任何未来添加到更高级别注释的优化/功能。您还可以扩展 @Component 以创建您自己的自定义构造型。
下面是 MVC 注释的一个快速示例......首先,数据访问对象:
@Repository
public class DatabaseDAO {
@Autowired
private SimpleJdbcTemplate jdbcTemplate;
public List<String> getAllRecords() {
return jdbcTemplate.queryForObject("select record from my_table", List.class);
}
}
服务:
@Service
public class DataService {
@Autowired
private DatabaseDAO database;
public List<String> getDataAsList() {
List<String> out = database.getAllRecords();
out.add("Create New...");
return out;
}
}
最后,控制器:
@Controller("/index.html")
public class IndexController {
@Autowired
private DataService dataService;
@RequestMapping(method = RequestMethod.GET)
public String doGet(ModelMap modelMap) {
modelMap.put(dataService.getDataAsList());
return "index";
}
}
注释不再特定于 MVC。有关详细信息,请参阅参考文档。使用 @Component 注释或其规范的一个示例是具有监视支持的tcServer 。有关示例,请参见此处。这种监视支持是通过加载时 AspectJ 编织添加的。
总而言之,注解可以在 Spring 容器启动后的运行时以不同的设置使用,或者在 AspectJ weaving 的编译/加载时使用。
不要忘记在xml上添加这个标签
<context:component-scan base-package="com.example.beans"/>