从另一个模块自动启动Spring Boot

时间:2018-09-26 11:09:54

标签: java spring spring-boot

我正在尝试在项目中的3个模块之间建立连接。当我尝试使用@Autowired错误到达我的对象时,出现错误。我会稍微解释一下我的情况。

模块

enter image description here

所有这些模块都已连接到pom.xml内部。让我们谈谈我的问题。

C-> ROUTE.JAVA

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);
    }

B->核心

.
.
.
@Autowired
public CommuniticationRepository;

@Autowired
public Core core;
.
.
.

错误

  

现场通讯com.demo.xyz.A.RestControllers中的存储库。需要路由   类型为“ com.demo.xyz.A.CommunicationRepository”的bean,不能为   找到。

     

操作:

     

考虑在其中定义类型为“ com.demo.xyz.A.CommunicationRepository”的bean   您的配置。

A-> REPOSITORY.JAVA

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;
    }
}

3 个答案:

答案 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类内。

please refer

然后,如果您确实确定已完成此操作,则正确的@ComponentScan应该可以工作

编辑

@SpringBootApplication 
@ComponentScan(basePackages = { "com.demo.xyz.A", "com.demo.xyz.B"}) 
public class Application {

答案 1 :(得分:0)

如果它是spring数据JPA存储库,则应从@Component中删除@RepositoryCommunicationRepository

您应该在模块 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 {...}