我正在使用 CXF 自动生成一些 Web 服务客户端类。结果类似于:
@WebServiceClient
public class TheService extends Service {
}
到目前为止,我通过 new TheService()
使用这些服务,但由于我现在使用 Spring
,我还想注入(inject)我的自动生成的类。编辑生成的类显然不是一个好主意,因为它们将来可能会重新生成(例如,在 Web 服务更新时)。所以我不能用 @Service
来注释它们。
但是我怎样才能使用@Autowired private TheService服务
?难道不可能吗?
最佳答案
每次生成客户端类时,如果有可能更改类名(我在从 Axis 1.1 升级到 Axis 2 进行 Web 服务客户端 stub 生成时遇到了此类名称更改),那么您可以尝试使用 Spring XML 配置而不是注释。
<bean id="clientStub" class="com.package1.TheService">
....
</bean>
在您想要访问的类中引用此 id(clientstub)。
<bean id="accessingClass" class="com.package2.AccessingClass">
<property name="service" ref="clientStub" />
</bean>
Public class AccessingClass{
private Service service;
....
}
唯一需要进行更改的地方是 id="clientStub"的 bean 定义的类(具有生成的类名) 因此,对 TheService className 的任何更改都将被吸收,并且您不必在访问此 clientstub 的类中进行更改,因为 Spring 会通过 id 处理更改。
关于java - 如何注入(inject)自动生成的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22357931/