我可以从另一个使用@Autowired的项目调用方法吗?

时间:2018-01-30 13:08:57

标签: java spring autowired

我试图从我用依赖项导入的第二个项目中调用一个方法。

此方法包含在一个类中,该类在我的项目中使用@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");
  }
}

1 个答案:

答案 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>