2011-05-24 38 views
2

Spring框架中的注释是如何实现的?他们是通过使用依赖注入还是面向方面编程来实现的?注释通常是用AOP实现的,他们可以“做”注入?

我以为他们使用AOP,好吧,因为注释的东西会做某些指定的地方。另一方面,像@Autowired @Qualifier("beanID") IS依赖注入 - 也许注释是基于AOP并可以实现倾向注入?它是否正确?

我只是在想它,因为我正在阅读有关春季的主要部分:di和aop ,我想知道注释属于哪里。

回答

6

注释不要任何事情,代码可以做的事情注释,这是一个巨大的差异。

我建议您阅读Java教程中的Annotations以了解注释的含义。

基本上有三种方式来处理注释(可能有更多的,但我知道三):

Spring使用反射来读注释值,然后或者注入d依赖矿石添加AOP建议(还有更多的东西)。但是如果你在Spring中使用静态AspectJ编译,那么在切入点中会使用一些相同的注释。

+0

谢谢!例如@ Autowired @ Qualifier(“beanID”)Spring使用Reflection来注入一个依赖项。与@Transactional春天使用反射来添加AOP建议。正确? – nano7 2011-05-24 12:49:07

+0

@ nano7是的。 Spring AOP模仿了aspectj所做的事情,但是用反射而不是静态编译 – 2011-05-24 13:00:23

0

在Spring的上下文中(不仅仅是,但这是你的问题所在),注释仅仅是元数据 - 与代码相关的信息。它们只是方便(或不是)替换XML元数据,它可以做同样的事情:例如,指定给定的setter应该用给定的参数调用。注释和XML元数据之间的主要区别在于注释与代码捆绑在一起,因此它们可以用作方便的默认值,但您仍然可以使用XML bean定义覆盖它们。

为了完成“作业”,注释代码是不够的(因为编写XML应用程序上下文描述符永远不够,您需要某种能够读取该代码的bean工厂/应用程序上下文元数据和做任何要求。

0

一些JSR-250注解在Spring的认可和动态代理创建诸如@PostConstruct & @PreDestroy,这是容器启动时完成。DI类型的注释通过上下文指令,例如发现因为DI发生在bean后处理之前,所以不需要代理。

Spring项目中的注释(超过470) - http://gordondickens.com/wordpress/2011/05/20/annotation-reference-for-spring-projects/

+0

在您的主页上有很好的注释列表。如果他们可以根据他们使用的项目(安全,弹簧,批次)按字母顺序排序,那么它也会很好。 – nano7 2011-05-25 15:01:10

0

它们是可排序的 - 单击内容下面的链接转到Google Spreadsheet。

这将允许您排序它们。

顺便说一下,现在有超过500个注释(最近添加了Hibernate 3)。

我打算增加更多的细节时,我得到更集中的时间,其中包括:

  • 注释参数标注的使用
  • 说明
+0

不,我不是说像“spring”,“javax”,“hibernate”,“roo”,“批次“,”mvc“......这会更有趣。 – nano7 2011-06-07 08:33:28