我正在尝试在项目中的3个模块之间建立连接。当我尝试使用@Autowired错误到达我的对象时,出现错误。我会稍微解释一下我的情况。
所有这些模块都已连接到pom.xml内部。让我们谈谈我的问题。
public class Test extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
Movie movie = (Movie) getIntent().getParcelableExtra("parcel_data");
String apa_number = movie.getApa_number();
TextView textView1 = findViewById(R.id.textView2);
textView1.setText(apa_number);
}
.
.
.
@Autowired
public CommuniticationRepository;
@Autowired
public Core core;
.
.
.
现场通讯com.demo.xyz.A.RestControllers中的存储库。需要路由 类型为“ com.demo.xyz.A.CommunicationRepository”的bean,不能为 找到。
操作:
考虑在其中定义类型为“ com.demo.xyz.A.CommunicationRepository”的bean 您的配置。
public class Core {
private int id;
private String name;
private Date date;
public Core(int id, String name, Date date) {
this.id = id;
this.name = name;
this.date = date;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
}
答案 0 :(得分:2)
基本上,如果您想在任何属性之上使用@Autowired批注并使用它,显然,spring上下文中应该有一个初始化的bean,可以将其自动装配到您的用法中。因此,这里的问题在于您的春季环境,没有可以自动装配的bean。 因此,解决方案是您需要将这些bean放在spring上下文中,有多种方法可以完成此操作,
您需要的bean的类在spring上下文中自动初始化为@Component
Ex:
@Component
public class Car{
或者您可以手动使用一个配置文件来返回此类bean
Ex:
@Bean
public Car setCarBean(){
return new Car();
}
并且此返回的bean应该在@Configuration类内。
然后,如果您确实确定已完成此操作,则正确的@ComponentScan应该可以工作
编辑
@SpringBootApplication
@ComponentScan(basePackages = { "com.demo.xyz.A", "com.demo.xyz.B"})
public class Application {
答案 1 :(得分:0)
如果它是spring数据JPA存储库,则应从@Component
中删除@Repository
和CommunicationRepository
。
您应该在模块 A 和 B 中定义配置。
@Configuration
@EnableJpaRepositories(basePackages ={"com.demo.xyz.A"})
@EntityScan(basePackages = {"com.demo.xyz.A"})
@ComponentScan(basePackages = {"com.demo.xyz.A"})
public class ConfigA {
}
// If you have no spring managed beans in B this is not needed
// If Core should be a spring managed bean, add @Component on top of it
@Configuration
@ComponentScan(basePackages = {"com.demo.xyz.B"})
public class ConfigB {
}
然后在 C 中引导应用程序,应导入模块A和模块B的配置。此时,A和B中的所有bean都可以在C中自动装配
@Configuration
@Import(value = {ConfigA.class, ConfigB.class})
public class ConfigC {
}
答案 2 :(得分:0)
尝试在Application类中添加scanBasePackages。 默认扫描是针对Application类所在的包。
@SpringBootApplication(scanBasePackages = "com.demo.xyz")
public class Application {...}