programing

다른 모듈의 스프링 부트 자동 배선

testmans 2023. 7. 29. 08:16
반응형

다른 모듈의 스프링 부트 자동 배선

저는 제 프로젝트에서 3개 모듈 간의 연결을 시도하고 있습니다.@Autowired 오류와 함께 내 객체에 도달하려고 하면 표시됩니다.제 시나리오를 조금 설명하겠습니다.

모듈

enter image description here

이 모든 모듈은 pom.xml 내부에 연결되어 있습니다.저의 고민에 대해 이야기해 보겠습니다.

C -> ROUTE.JAVA

.
.
.
@Autowired
public CommuniticationRepository;

@Autowired
public Core core;
.
.
.

B -> CORE

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

오류

com.demo.xyz에 있는 필드 통신 리포지토리입니다.A.휴게기 컨트롤러.경로에 'com.demo.xyz' 유형의 빈이 필요합니다.A.'통신 리포지토리'를 찾을 수 없습니다.

작업:

'com.demo.xyz' 유형의 빈을 정의합니다.A. 구성에서 '통신 리포지토리'를 선택합니다.

A - > 저장소.JAVA

@Component
@Repository
public interface CommunicationRepository extends CrudRepository<Communication, Date> {

    List<Communication> findByDate(Date date);

    void countByDate(Date date);
}

제거해야 합니다.@Component그리고.@Repository부터CommunicationRepository스프링 데이터 JPA 저장소인 경우.

모듈 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의 모든 콩은 C에서 자동 배선에 사용할 수 있습니다.

@Configuration
@Import(value = {ConfigA.class, ConfigB.class})
public class ConfigC {

}

기본적으로 속성 위에 @Autowired 주석을 사용하고 사용하려면 스프링 컨텍스트에 초기화된 빈이 있어야 합니다.그래서 여기서 여러분의 문제는 여러분의 봄 맥락에 있습니다. 자동 배선할 수 있는 그런 콩이 없습니다.그래서 해결책은 여러분이 봄의 배경 안에 콩을 가지고 있어야 한다는 것입니다. 이것을 완성하는 데는 여러 가지 방법이 있습니다.

봄 컨텍스트 내에서 @Component로 자동 초기화되는 콩이 필요한 클래스

예:

@Component
public class Car{

또는 수동으로 이러한 콩을 반환하는 구성 파일을 가질 수 있습니다.

예:

@Bean
public Car setCarBean(){
    return new Car();
}

그리고 이 빈 반환은 @Configuration 클래스 안에 있어야 합니다.

참고하시기 바랍니다

그런 다음 이 작업을 완료한 것이 확실하다면 올바른 @ComponentScan이 작동해야 합니다.

편집

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

응용 프로그램 클래스에 scanBasePackages를 추가합니다.기본 검색은 응용 프로그램 클래스가 있는 패키지에 대한 것입니다.

@SpringBootApplication(scanBasePackages = "com.demo.xyz")
public class Application {...}

언급URL : https://stackoverflow.com/questions/52516360/spring-boot-autowiring-from-another-module

반응형