java - Spring bean 不使用@Component 注释 Autowiring

标签 java spring spring-mvc annotations

不确定我做错了什么,但我有一个 webapp 配置可以在单元测试中工作,但在组件 bean 的生产中就死了。

bean 扩展了 WebServiceGatewaySupport 并扩展了一个接口(interface)。

我是这样在java中定义的:

@Component("myShippingImplementation")
public class MyShippingImplemenation extends WebServiceGatewaySupport implements ShippingImplementation {
    private String addressValidationUri;

    public String getAddressValidationUri() {
        return addressValidationUri;
    }

    public void setAddressValidationUri(String addressValidationUri) {
        this.addressValidationUri = addressValidationUri;
    }   
}

XML bean 配置是:

<bean id="myShippingImplementation" class="com.cerp.service.shipping.MyShippingImplemenation" autowire="byType">
    <property name="addressValidationUri" value="https://www.testurl.com" />
    <property name="defaultUri"           value="https://www.alturl.com" />
    <property name="marshaller" ref="marshaller"/>
    <property name="unmarshaller" ref="marshaller"/>
</bean>

如果我在单元测试中连接它,它会工作:

public class MyServiceClientTest extends BaseWebServiceTest {
    @Autowired MyShippingImplemenation c;

(BaseWebServiceTest使用SpringJUnit4ClassRunner)

但是如果我将它连接到 Controller 中并使用以下命令在 Tomcat 上运行它:

@Controller
@RequestMapping(value="/work/settings")
public class SettingsController {
    @Autowired
    SignupServiceI signupService;

    @Autowired
    ShippingImplementation myShipImplementation;

它死了。问题是我在 XML 中定义的字段似乎不是自动连接到 Controller 的 bean 的一部分。例如,我在 setAddressValidationUri 中放置了一个断点,我可以看到它在应用程序启动时使用适当的属性调用。但是,在 Controller 中 Autowiring 之后,bean 的实例对于这些值具有 null。

您还会注意到有一个 SignupServiceI 引用...这是一个成功 Autowiring 的服务 bean。它是由用 @Service 标记注释的类实现的接口(interface)。

最佳答案

删除@Component

添加此注释并结合组件扫描会导致同一 bean 的两个实例(实际上在您的情况下,由于相同的 bean 名称/id,一个 bean 覆盖了另一个)。您还用 XML 定义了它。 XML 中的那个就是您要使用的那个。

关于java - Spring bean 不使用@Component 注释 Autowiring ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23623398/

相关文章:

java - 尝试 Autowiring 使用 MockitoJUnitRunner 运行的配置属性时出现 NullPointerException

java - 返回 Spring MVC Post 请求的 JSON 响应

java - 如何在java中将 map 转换为实体对象?

java - 用于开发的轻型 Java servlet 容器

java - 将 Gradle 项目导入 IntelliJ IDEA 时如何避免重复库

spring - 找不到使用域类资源创建的Grails REST API返回

java - 如何在 Spring Boot 测试类中为每个方法应用不同的配置?

java - 无法使用 getApplicationInfo 从名称获取子包

Java.util.Collection 重写 spliterator()

java - 为什么 UserDetailsS​​ervice 在 Spring Boot 应用程序中返回 null?