我试图从我用依赖项导入的第二个项目中调用一个方法。
此方法包含在一个类中,该类在我的项目中使用@Bean批注进行实例化。问题是在这个类里面我有一个@Autowired来获得第二个项目的另一个类,当我尝试运行它时无法解决这个连接。
有一些方法可以称呼它吗?
更新
以下是一个例子:
在我的项目A中我有下一堂课:
@Component
public class Logger {
private static final Logger logger =
LoggerFactory.getLogger(Logger.class);
@Autowired
private RabbitTemplate template;
@Autowired
private DirectExchange exchange;
}
从项目B我得到一个具有maven依赖的项目A.
在项目B中我有:
public class OperatorSdkAmqpPollTests {
private static final Logger logger =
LoggerFactory.getLogger(OperatorSdkAmqpPollTests.class);
@Autowired
private Logger logger;
}
当我运行它时会出现以下错误:
Field exchange in com.minsait.cybersec.netvote.common.core.Logger required a bean of type 'org.springframework.amqp.core.DirectExchange'
添加我在Spring Boot下运行它以便自动定义RabbitTemplate,当我在项目A中运行Test时它运行没有问题,DirectExchange在项目A中定义在这样的类中:
@SpringBootApplication
public class AmqpConfig {
@Bean
public Queue worksQueue() {
return new Queue("queue");
}
@Bean
public DirectExchange exchange() {
return new DirectExchange("exchange");
}
}
答案 0 :(得分:1)
在您的项目B中,您的类Logger
不称为bean,因为注释@Component
在项目A的范围内定义了您的类Logger
。解决方案非常简单:添加一个在项目B中的Spring的XML配置文件中为您的Logger
类定义bean。然后在您的项目B中将它称为Bean,一切都会起作用。
所以在MyOwnappricationContext.xml中的某个地方执行此操作:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
...
<bean id="logger" name="logger" class="com.minsait.cybersec.my.package.from.project.a.Logger"/>
</beans>