我是通过Google Guice加入国际奥委会的。
现在,我被迫在工作中使用Spring2.5.6&我迷路了,因为Spring非常复杂。下面是阅读spring文档后的一些问题:
@Service,@Controller和@Component有什么区别?如果我只想像Guice那样自动连接我的对象,我需要被所有这些刻板印象所困扰吗?- In the above example, did I correctly qualify the 2 different implementations of `Boo` ?
- Is there any feature similar to Google Guice's Providers ?
- How do I mimic the `@Singleton` behaviour (in Guice) in Spring ?
发布于 2009-11-18 02:52:02
看看您的代码,看起来一切都很好,您的组件将获得autowired。您必须在XML配置文件中给出您的包名,这样Spring就可以扫描它以获得注释。
一般来说,自动检测组件的默认和最常见的作用域是单例.
实际上,“组件”是“服务”和“控制器”的概括。见文档。
Spring2.5引入了进一步的原型注释:@Component、@Service和@Controller。@Component用作任何Spring托管组件的通用构造型;而@Repository、@Service和@Controller则作为@Component的专门化,用于更具体的用例(例如,在持久性、服务和表示层)。这意味着您可以用@Component注释您的组件类,但是通过使用@Repository、@Service或@Controller注释它们,您的类更适合于通过工具处理或与方面关联。例如,这些原型注释为切入点提供了理想的目标。当然,@Repository、@Service和@Controller在Spring框架的未来版本中也可能带有额外的语义。因此,如果您决定在服务层中使用@Component还是@Service,那么@Service显然是更好的选择。同样,如上所述,@Repository已经被支持作为持久性层中自动异常转换的标记。
确保这些bean的default-autowire或autowire值是byType。然后你应该修改你的Boo组件如下,
@Component("yay")
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
public BooYay implements Boo
{...}
@Component("hoo")
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
public BooHoo implements Boo
{...}您可能希望使用autowire = "byName"来完成它,在这种情况下,您将不需要@Qualifiers,但是必须提供匹配的setter。我希望你现在能搞定这件事。
https://stackoverflow.com/questions/1753296
复制相似问题