2

我们可以将带有 Spring Bean 注解的类生成为 jar 文件吗?如何从那个 jar 的类中注入另一个 Spring Bean?你能提供可能的方法吗?当我得到如下它不起作用?

在 Jar 文件中

    package org.java.support;

    @Service("CommonService")
    public class CommonService {
    }

在项目中

    package com.java.test.app;

    @Service(value = "OtherService")
    public class OtherService {
        @Resource(name = "CommonService")
        private CommonService service;
    }       

在配置中

    <context:component-scan base-package="com.java.test.app, org.java.support">
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
    </context:component-scan>

我收到以下错误;

13:32:12,331 DEBUG [org.springframework.context.annotation.AnnotationConfigApplicationContext] Unable to locate LifecycleProcessor with name 'lifecycleProcessor': using default [or
g.springframework.context.support.DefaultLifecycleProcessor@32dcb03b]
13:32:12,331 DEBUG [org.springframework.beans.factory.support.DefaultListableBeanFactory] Returning cached instance of singleton bean 'lifecycleProcessor'
Exception in thread "main" org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'CommonService' is defined
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:529)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1095)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:277)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1093)
    at org.ace.java.support.delete.Test.main(Test.java:18)
4

2 回答 2

2

如果您从 Eclipse 生成 Jar,请在导出对话框中确保选中“添加目录条目”复选框(在选项下)。

于 2013-03-11T16:46:19.537 回答
1

好吧,你快到了:)

您将需要使用包含过滤器将 jar 添加到您的 spring 上下文中。但我认为使用两条组件扫描线也应该有效。

例子:

<context:component-scan base-package="org.example">
    <context:include-filter type="regex" expression=".*Stub.*Repository"/>
    <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
</context:component-scan>

http://static.springsource.org/spring/docs/2.5.x/reference/beans.html#beans-classpath-scanning

于 2012-09-20T12:00:32.373 回答