【问题标题】:Are Annotations generally realized with AOP and can they "do" Depedency Injection?Annotations 一般是用 APP 实现的,能“做”依赖注入吗?
【发布时间】:2011-05-24 12:17:17
【问题描述】:

Spring Framework中的注解是如何实现的?是通过依赖注入还是面向切面编程实现的?

我认为他们使用 AOP,嗯,因为注释的东西会做其他地方指定的事情。另一方面,像@Autowired @Qualifier("beanID") IS Dependency Injection 之类的东西——嗯,也许Annotations 基于AOP 并且可以实现依赖注入?这是正确的吗?

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

【问题讨论】:

    标签: java spring dependency-injection annotations spring-aop


    【解决方案1】:

    注解不任何事情,代码可以做事情注解,这是一个巨大的区别。

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

    基本上有三种处理注解的方法(可能还有更多,但我知道三种):

    Spring 使用反射来读取注释值,然后注入依赖项或添加 AOP 建议(以及更多内容)。但是如果你在 Spring 中使用静态 AspectJ 编译,一些相同的注解会用在切入点中。

    【讨论】:

    • 谢谢!例如,@Autowired@Qualifier("beanID") Spring 使用反射来注入依赖项。并且使用 @Transactional spring 使用反射来添加 AOP 建议。对吗?
    • @nano7 是的。 Spring AOP 模仿了 aspectj 所做的事情,但使用反射而不是静态编译
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      一些 JSR-250 注释在 Spring 中被识别,并创建了一个动态代理,例如 @PostConstruct 和 @PreDestroy。这是在容器启动期间完成的。 DI 类型注释由上下文指令发现,例如 和 。由于 DI 发生在 bean 后处理之前,因此不需要代理。

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

      【讨论】:

      • 主页上的注释列表很好。如果可以根据它们所使用的项目(安全、弹簧、批处理)按字母顺序对它们进行排序,那就太好了
      【解决方案4】:

      它们是可排序的 - 点击内容下方的链接以访问 Google 电子表格。

      这将允许您对它们进行排序。

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

      我计划在我更专注的时候添加更多细节,包括:

      • 注释参数
      • Annotation 的使用说明

      【讨论】:

      • 不,我不是说像“spring”、“javax”、“hibernate”这样的排序,而是“roo”、“batch”、“mvc”……这样会更有趣。跨度>
      猜你喜欢
      • 2019-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-17
      • 1970-01-01
      • 1970-01-01
      • 2016-11-08
      • 2023-03-14
      相关资源
      最近更新 更多