【问题标题】:What's a smart way to organize classes in Spring 3 for component-scan?在 Spring 3 中组织类以进行组件扫描的聪明方法是什么?
【发布时间】:2011-10-21 01:05:28
【问题描述】:

我已经开始使用 Spring 3 开发一个新项目,并且我正在使用注释。我喜欢我可以连接我的类来注入依赖项,但我知道让context:component-scan 从基础包开始是一种不好的做法。

我使用的是DispatcherServlet,它有自己的 xml 配置文件。这也是context:component-scan。当我第一次开始学习 Spring 时,我的组件扫描中有重叠,并且看到了多次创建的 bean。我想避免这种情况。

有什么好方法可以组织我的包或组件扫描以覆盖所有 bean 而不会重复?

目前我有这样的包:

my.package.controller
my.package.dao
my.package.entity
my.package.service
my.package.util

如果我在所有这些包中都有 bean,那么简单的方法似乎是将 <context:component-scan base-package="my.package"></context:component-scan> 放入 applicationContext.xml 并完成它。

在调度程序的 xml 中扫描 my.package.controller 并在 applicationContext.xml 中扫描其余部分(不包括 my.package.controller)会更好吗?

或者我应该将所有带注释的课程安排在一个区域,而将其他所有内容安排在另一个区域?比如:

my.package.spring.controller
my.package.spring.dao
my.package.spring.entity
my.package.spring.service
my.package.spring.util
my.package.notannotated
my.package.notannotated2

我正在使用 @Autowired 将日志记录添加到我的大部分类(如果不是全部的话),所以我不知道我会有任何不会被注释的类。

我讨厌卡在配置上...我宁愿卡在代码中,所以如果有人可以提供任何提示,我很乐意欢迎他们。

谢谢!

【问题讨论】:

    标签: java spring annotations


    【解决方案1】:

    是的 - 在您的主要上下文中扫描除控制器之外的所有内容

     <context:component-scan base-package="my.package">
        <context:exclude-filter type="regex" expression="my\.package\.controller.*"/>
     </context:component-scan>
    

    在您的 DispatcherServlet 上下文中,只需扫描控制器包。

    【讨论】:

    • 哇,这比我想象的要容易,谢谢。我的包设置看起来合理吗?
    猜你喜欢
    • 2018-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-10
    • 1970-01-01
    • 1970-01-01
    • 2012-04-26
    相关资源
    最近更新 更多