11

当迁移到 Spring 2.5.x 时,我发现它添加了更多的原型注解(在2.0的@Repository之上): @Component、@ Service和@Controller。你如何使用它们?您是依赖隐式 Spring 支持还是定义自定义构造型特定功能/方面/特性?还是主要用于标记 bean(编译时间、概念等)?

4

3 回答 3

13

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";
    }
}

除了官方文档之外,我发现这篇文章非常适合对构造型注释进行广泛的概述。

于 2010-03-27T15:40:45.797 回答
3

注释不再特定于 MVC。有关详细信息,请参阅参考文档。使用 @Component 注释或其规范的一个示例是具有监视支持的tcServer 。有关示例,请参见此处。这种监视支持是通过加载时 AspectJ 编织添加的。

总而言之,注解可以在 Spring 容器启动后的运行时以不同的设置使用,或者在 AspectJ weaving 的编译/加载时使用。

于 2010-03-30T17:37:48.657 回答
0

不要忘记在xml上添加这个标签

    <context:component-scan  base-package="com.example.beans"/> 
于 2010-03-30T09:08:17.930 回答