【问题标题】:Java EE 6 / 7 equivalent for Spring @ConfigurationJava EE 6 / 7 等效于 Spring @Configuration
【发布时间】:2013-12-11 20:41:09
【问题描述】:

Spring 的 @Configuration 是否有 Java EE 6 / 7 等效注解?

如果答案是肯定的,那么它周围的注释的等价物,例如@ComponentScan@EnableWebMvc

当然,我确实在 Java EE 6 / 7(我承认我在这里和那里跳过了一段)、javadocs(特别是在注释中)、Spring doc、教程、博客、SO 和 Google 中寻找它。

【问题讨论】:

    标签: spring dependency-injection java-ee-6 java-ee-7


    【解决方案1】:

    JEE CDI 还有一个以编程方式创建 bean 并公开它们的注解,因此它提供了 bean 工厂,称为生产者: https://dzone.com/articles/cdi-and-the-produces-annotation-for-factory

    【讨论】:

      【解决方案2】:

      CDI 提供了 Producer 方法(使用 @Produces 注释),相当于 Spring 中的 @Bean。您可以实现 Producers 类,它们是包含一堆生产者方法的 bean。然而,这远没有弹簧配置那么强大,因为据我所知,没有可能,例如“导入”其他配置(生产者类)。

      这使得测试 CDI 应用程序变得特别困难。

      你可以

      1. 大量使用模拟来测试单个 CDI bean 以完全避免注入对象
      2. 炸毁您的测试类只是为了创建具有所有依赖项的被测实例
      3. 使用 CDI-Unit 等测试框架为您创建 bean

      有了 1. 测试驱动开发变得几乎不可能,并且测试必须在实现发生变化时进行调整,即使合同没有改变。

      使用 2. 一旦 Bean 之间的依赖关系发生变化,您就会在测试中遇到很多编译器错误

      使用 3. 您需要将测试框架指向 bean 的实现。由于不存在知道所有 bean 的配置,因此测试需要知道它。同样,如果事情发生变化,您的测试将会中断。

      我承认...我不喜欢 CDI ;-P

      【讨论】:

        【解决方案3】:

        javax.servlet.annotation 包定义了一些注解,用于注册ServletFilterListener 类以及进行一些其他配置,例如安全性。

        您还可以使用ServletContainerInitializer 类通过Java 而不是通过XML 部署描述符来配置您的ServletContext。 Spring 提供了自己的 ServletContainerInitializer 实现,在这种情况下,您只需创建一个实现 WebApplicationInitializer 的类,并进行 servlet、过滤器和侦听器注册,并将该类留在类路径中。

        javadoc 中的示例比比皆是。

        【讨论】:

          猜你喜欢
          • 2014-06-20
          • 1970-01-01
          • 2013-10-05
          • 1970-01-01
          • 1970-01-01
          • 2012-11-14
          • 1970-01-01
          • 2019-05-19
          • 2019-05-29
          相关资源
          最近更新 更多