我想从我的应用程序中使用的外部JAR中自动连接对象:
@Autowired
PythonInterpreter interp;
我收到此异常:
com.package.services.ServicesImpl中的字段interp需要一个类型为'org.python.util.PythonInterpreter'的bean。
操作:
考虑在您的配置中定义类型为“ org.python.util.PythonInterpreter”的bean。
我知道@ComponentScan
仅在使用@Component
进行注解的情况下有效。
答案 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
注释或元注释的类都将在组件扫描期间获取。
@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>