[英]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。 可以将它们配置为使用备用注释集。 @Repository
由PersistenceExceptionTranslationPostProcessor
检查。 可以将此PostProcessor配置为使用与注解等效的PostProcessor。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.