目前,我正面临将CXF web服务与Spring @Configurable注释混合在一起的问题。
一方面,我让我的CXF web服务完全工作,并配置如下:
<import resource="classpath:some-other-context.xml" />
<jaxws:server id="Init"
serviceClass="package.to.my.ServiceInterface"
address="/">
<jaxws:serviceBean>
<bean class="package.to.my.BADematInitImpl">
</bean>
</jaxws:serviceBean>
</jaxws:server>
<context:spring-configured />在我的some-other-context.xml中是包含以下Bean的Spring配置:
@Configurable(autowire = Autowire.BY_TYPE)
public class MyConfigurable {
@Autowired(required=true)
private A a;
@Autowired(required=true)
private B b;
@Autowired(required=true)
private C c;
...
}但是,当我试图在我的服务中创建一个新的MyConfigurable bean实例时,由于空值应该是A、B和C对象,所以我得到了一个MyConfigurable。
知道吗?
发布于 2013-02-07 09:31:27
我终于发现了这个问题。
我需要将这个配置添加到我的第三部分应用程序XML文件中:
<context:load-time-weaver/>..。并将此参数添加到我的jvm启动命令行:
-javaagent:"path\to\my\spring-agent.jar"就像一种魅力。
我理解这是因为Spring需要有一个实体来管理它的AOP部分,这样就可以很好地注入依赖项。如果有人有进一步的解释,那将是很有趣的。
发布于 2013-02-07 08:15:45
@Configurable是AOP负载时间编织工具使用的标记。我想您没有使用任何AOP,因为在您的问题中没有提到任何关于它的内容。第二件事:您不必在required=true注释中使用@Autowired,因为true是required的默认值。我建议你这样修改你的代码:
将这些添加到spring配置文件中的元素中:
<context:component-scan base-package="your.pckg.toscan"/>文件上说:
扫描类路径,寻找将自动注册为Spring的带注释的组件。默认情况下,将检测到Spring提供的@组件、@Repository、@Service和@Controller原型。
<context:annotation-config/>文件上说:
激活要在bean类中检测到的各种注解:Spring的@Required和@Autowired,以及JSR 250的@PostConstruct、@PreDestroy和@Resource (如果可用)、JAX-WS的@WebServiceRef (如果可用)、EJB 3的@EJB (如果可用的话)和JPA的@PersistenceContext和@PersistenceUnit (如果可用的话)。或者,您可以选择为这些注释激活单个BeanPostProcessors。
因此,将代码更改为:
@Component
public class MyConfigurable {
@Autowired
private A a;
@Autowired
private B b;
@Autowired
private C c;
...
}一切都应该很好。
https://stackoverflow.com/questions/14733466
复制相似问题