依赖于Spring的注释

时间:2010-03-18 08:39:05

标签: java spring annotations

我使用@ Repository,@ Resource,@ Component,@ Service注释注释了我的类,但这些类必须在2个环境中运行。第一个环境是基于Spring 2.x而另一个环境根本没有弹簧。我确信如果没有弹簧罐和代码,代码就会失败。我想知道您如何保留注释但仍然可以在两种环境中工作的想法

4 个答案:

答案 0 :(得分:5)

为了能够使用你提到的注释,或者真的,让Spring为你使用它们以便获得好处,你需要至少使用Spring 2.5.x,就在它们被引入的时候。

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

答案 1 :(得分:1)

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

我不确定这些类是否依赖于其他类aswel;它们可能不是,因为注释是不可变的仅数据对象。如果类也有方法,则可以在没有方法(即只有字段)的情况下重新编译(使用相同的序列化ID)注释源,以便在其他环境中使用。

答案 2 :(得分:0)

由于您无法删除已接受的帖子,我建议您阅读/投票Hans的帖子,这是一个比我原来更好的解释:Dependency on Spring's annotations


使用构造型注释(@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”类。

答案 3 :(得分:0)

如果强迫你让你的课程直接依赖它,那就不会是春天了。

您可以定义自己的注释,其作用与弹簧证明的相同。即定义com.yourcompany ....组件等

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

寻找实际执行咕噜声工作的PostProcessors。可以将它们配置为使用备用的一组注释。 @Repository审核PersistenceExceptionTranslationPostProcessor。可以将此PostProcessor配置为使用等效的注释。