Ice*_*nte 5 java spring annotations spring-mvc
不确定我做错了什么,但我有一个webapp配置,可以在单元测试中工作,但在生产中死于Component bean.
bean扩展WebServiceGatewaySupport并扩展了接口.
我这样在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;
}
}
Run Code Online (Sandbox Code Playgroud)
并且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>
Run Code Online (Sandbox Code Playgroud)
如果我在单元测试中连接它,它可以工作:
public class MyServiceClientTest extends BaseWebServiceTest {
@Autowired MyShippingImplemenation c;
Run Code Online (Sandbox Code Playgroud)
(BaseWebServiceTest使用SpringJUnit4ClassRunner)
但如果我在控制器中连接它并使用以下命令将其从Tomcat运行:
@Controller
@RequestMapping(value="/work/settings")
public class SettingsController {
@Autowired
SignupServiceI signupService;
@Autowired
ShippingImplementation myShipImplementation;
Run Code Online (Sandbox Code Playgroud)
它死了.问题是我在XML中定义的字段似乎不是自动装入Controller的bean的一部分.例如,我在其中放置了一个断点setAddressValidationUri,我可以看到它在具有适当属性的应用程序启动时被调用.但是,在控制器中自动装配之后,bean的实例对于这些值为null.
您还会注意到有一个SignupServiceI引用...这是一个成功自动装配的Service bean.它是由使用@Service标记注释的类实现的接口.
M. *_*num 11
删除@Component.
添加此注释与组件扫描相结合会导致同一个bean的两个实例(实际上在您的情况下,由于相同的bean名称/ id,一个bean会覆盖另一个bean).您还使用XML定义了它.XML中的那个是您要使用的那个.