@自动连接外部Jar中的对象

时间:2019-04-29 09:22:24

标签: java spring spring-boot

我想从我的应用程序中使用的外部JAR中自动连接对象:

@Autowired
PythonInterpreter interp;

我收到此异常:

  

com.package.services.ServicesImpl中的字段interp需要一个类型为'org.python.util.PythonInterpreter'的bean。

     

操作:

     

考虑在您的配置中定义类型为“ org.python.util.PythonInterpreter”的bean。

我知道@ComponentScan仅在使用@Component进行注解的情况下有效。

2 个答案:

答案 0 :(得分:5)

重点是:您必须告诉Spring 如何创建该类的实例。

在其documentation中查看其示例:

@Configuration
public class AppConfig {

    @Bean
    public MyService myService() {
        return new MyServiceImpl();
    }
}

因此,正如第一个注释正确地告诉您的那样:您需要定义一种以某种方式创建该对象的方法。然后,将该方法注释为@Bean,并确保Spring将其找到为@Configuration。

答案 1 :(得分:1)

Spring 通过@Autowired批注处理依赖项注入。当spring应用程序最初启动时,它会扫描软件包以发现bean。因此,所有带有@Component注释或元注释的类都将在组件扫描期间获取。

  • 在组件扫描期间发现的bean将被添加到 Spring应用程序上下文
  • 我们可以使用 @Autowired 批注从Spring应用程序上下文中使用这些bean

在您的情况下,您正在自动装配Bean,但是spring在上下文中找不到PythonInterpreter.class类型的Bean。这就是它引发该错误的原因。

解决问题的方法是在配置类中将Spring的bean注册到配置文件中。我们通常通过使用@Configuration注释一个类来注册bean(以便Spring进行组件扫描)。 @Bean注释如下:

@Configuration
public class AppConfig {

    @Bean
    public MyService myService() {
        return new MyServiceImpl();
    }
}

或使用基于xml的配置:

<beans>
    <bean id="myService" class="com.acme.services.MyServiceImpl"/>
</beans>