繁体   English   中英

对Spring注释的依赖

[英]Dependency on Spring's annotations

我已经用@ Repository,@ Resource,@ Component,@ Service批注对类进行了批注,但是这些类必须在2种环境中运行。 第一个环境是基于Spring 2.x的,而另一个环境根本没有Spring。 我敢肯定,如果没有spring jars,代码将失败,并且我想从您那里了解如何保留注释,但仍然可以在两种环境下工作的想法

为了能够使用您提到的注释,或者说真正地让Spring为您使用注释,以便从中获得好处,您至少需要使用Spring 2.5.x,这是它们被引入的时间。

此外,注释不需要在类路径上。 他们将被忽略。 因为当您使用spring 2.0时,不会有代码尝试“扫描”它们。

对于Java中的每个注释,都有一个对应的类文件。 如果发现使用了哪些注释,则可以将类文件复制到其他环境。

我不确定这些类是否依赖于其他类。 它们可能不是,因为注释是不可变的纯数据对象。 如果该类还具有方法,则可以重新编译注释源(使用相同的序列化ID),而无需使用方法(即仅字段)来在其他环境中使用。

由于您无法删除已接受的帖子,因此我建议您阅读/投票给Hans的帖子,这比我原来的帖子要好得多: 依赖于Spring的注释


当使用构造型注释(@Service等)时,获得编译时bean验证的权衡是您已耦合到代码中的spring-context库。 我看到3个立即选择:

1)删除注释,并以XML配置您的bean。

2)将spring-context.jar(或包含构造型批注的等效库)复制到非Spring项目中以解决依赖关系,但是将Spring保留为未配置状态,以便在您的代码中不使用它。

3)从具体的类中删除注释,并使用“ Spring”版本进行扩展。 这种方法可能或可能不会对您的设计造成太大影响,但值得考虑:

 
 
 
 
  
  
  public class MyDAO { protected SessionFactory sessionFactory; public void setSessionFactory(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } // .. Your DAO code resides here .. }
 
 
  

和Spring子类:

 
 
 
 
  
  
  @Repository public class MySpringDAO extends MyDAO { @AutoWired protected SessionFactory sessionFactory; }
 
 
  

这样,您的非Spring项目可以使用“ MyDAO”,并从构建中排除“ MySpringDAO”类。

如果它迫使您直接让类依赖于它,那将不是春天。

您可以定义自己的注释,这些注释的作用与经过弹簧验证的注释相同。 即定义com.yourcompany .... Component等。

我假设您在spring配置中的某个地方使用了<context:component-scan .../> 只需添加use-default-filters="false"并定义您自己的过滤器以匹配您的注释即可。

寻找实际完成艰苦工作的PostProcessor。 可以将它们配置为使用备用注释集。 @RepositoryPersistenceExceptionTranslationPostProcessor检查。 可以将此PostProcessor配置为使用与注解等效的PostProcessor。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM