问题 你如何在Spring 2.5.x中使用构造型注释?


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


7224
2018-03-27 15:14


起源

javadoc中记录了各种构造型注释的语义。 - skaffman


答案:


2.5中的以下构造型注释可以在Spring MVC应用程序中使用,作为在XML中连接bean的替代方法:

  • @Repository - 用于DAO bean - 允许 你何时抛出DataAccessException 数据源不可用。

  • @Service - 用于商业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";
    }
}

我发现 本文 非常适合广泛地概述刻板印象注释,除了 官方文件


13
2018-03-27 15:40



你会说新的(2.5)构造型只适用于Spring MVC吗? - topchef
这三个高级注释可以被视为MVC特定的。您可以将它们重新用于其他目的,但如果在将来的版本中更改它们,您可能会遇到升级问题。 @Component是泛型bean连接注释,可以在MVC领域之外轻松扩展和使用。 - seanhodges


注释不再是MVC特定的。见 参考文件 了解更多信息。使用@Component注释或其规范的示例是 的tcServer 有监督支持。看到 这里 举个例子。此监视支持添加了加载时间AspectJ编织。

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


3
2018-03-30 17:37



这不完全正确。 @Component注释不是MVC特定的,但OP问题中列出的其他注释都是MVC特定的。 - seanhodges
seanhodges:不,@ Repository,@ Controller和@Service都属于org.springframework.context模块。 @Endpoint也是@Component的特化,是特定于Spring WS的,是org.springframework.ws.java5模块的一部分。 Spring 3参考文档(不是特定于MVC)的片段:在Spring 2.0及更高版本中,@ Repository注释是任何满足存储库的角色或构造型(也称为数据访问对象或DAO)的类的标记。该标记的用途之一是异常的自动转换。 - Espen


别忘了在xml上添加这个标签

    <context:component-scan  base-package="com.example.beans"/> 

0
2018-03-30 09:08