Spring 과 SpringBoot 의 @ Component 와 @ Component Scan 주해 용법 소개 및 주의사항
9301 단어 자바 기술
Component Scan
는 무엇 입 니까?ComponentScan
가 중요 합 니까?Spring Boot
어떤 가방 에 대해 자동 으로 스 캔 Component Scan
을 실행 합 니까?Spring Boot
에 대한 흔 한 오류 Component Scan
이해 했다 면
@ComponentScan
이해 했다 ComponentScan
Spring
는 주입 Spring
에 의존 하 는 프레임 이다.모든 내용 은 dependency injection
에 대한 정의 와 의존 관계 이다.정의
bean
의 첫 번 째 단 계 는 정확 한 주석 사용 Spring Beans
또는 @Component
또는 @Service
하지만 @Repository
이 걸 어디서 찾 을 수 있 는 지 모 르 는 한 Spring
bean
하 는 일 은 바로 bean
어디서 찾 았 는 지 알려 주 는 것 이다 ComponentScan
어떤 가방 이 스 캔 되 어야 하 는 지 정의 하 세 요.지정 하면 Spring 은 지 정 된 가방 과 하급 가방 Spring
에서 찾 습 니 다 bean
.다음은
sub packages
프로젝트 와 비 bean
프로젝트 (예 를 들 어 간단 한 Spring Boot
또는 Spring Boot
응용) 에서 어떻게 정의 하 는 지 소개 한다 JSP/Servlet
.Spring MVC
프로젝트 총화:Component Scan
주석 Spring Boot
이 있 는 가방 과 그 하급 가방 을 사용 하고 있다 면 당신 은 아무것도 하지 않 아 도 됩 니 다. @SpringBootApplication
자동 으로 다른 가방 을 모두 스 캔 해 줄 것 입 니 다 main
있 는 가방 이 있 고 app
SpringBoot
없 는 가방 과 그 하급 가방 이 있다 면 수 동 으로 bean
주 해 를 달 고 그 main
있 는 가방 예 를 들 어 아래 에 정 의 된 종 류 를 보 세 요.
package com.demo.springboot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ConfigurableApplicationContext;
@SpringBootApplication
public class SpringbootApplication {
public static void main(String[] args) {
ApplicationContext applicationContext =
SpringApplication.run(SpringbootApplication .class, args);
for (String name : applicationContext.getBeanDefinitionNames()) {
System.out.println(name);
}
}
}
클래스
app
는 @ComponentScan
가방 에서 이 종 류 는 bean
주 해 를 사 용 했 습 니 다. 이 주 해 는 SpringbootApplication
자동 스 캔 가방 com.demo.springboot
과 그 하위 가방 @SpringBootApplication
을 정의 합 니 다.프로젝트 의 모든 클래스 가
Spring
가방 과 그 하위 가방 에 정의 된다 면 아무것도 할 필요 가 없습니다.그러나 만약 에 가방
com.demo.springboot
에 정 의 를 내린다 면 이 새 가방 도 스 캔 의 범위 에 포함 시 켜 야 한다. 두 가지 방안 이 이 목적 을 달성 할 수 있다.프로젝트 1 정의
bean
이렇게 스 캔 하 는 범 위 는 전체 부모 가방 com.demo.springboot
으로 확대 된다.@ComponentScan(“com.demo”)
@SpringBootApplication
public class SpringbootApplication {
방안 2 정의 각각 두 개의 가방 스 캔
com.demo.somethingelse
@ComponentScan({"com.demo.springboot","com.demo.somethingelse"})
@SpringBootApplication
public class SpringbootApplication {
특히 주의: 프로젝트 2 를 사용 하면
@CoponentScan(“com.demo”)
만 쓰 면 com.demo
가방 에 있 는 클래스 를 검색 할 수 없습니다. (프레임 워 크 원본 의 기본 스 캔 효과 가 잘못 되 었 습 니 다)비
@ComponentScan({“com.demo.springboot”,”com.demo.somethingelse”})
프로젝트 는 비 @ComponentScan({"com.demo.somethingelse"})
프로젝트 에서 스 캔 된 패 키 지 를 명시 적 으로 사용 해 야 합 니 다. com.demo.springboot
파일 을 통 해 응용 컨 텍스트 에서 정의 하거나 Spring Boot
코드 에서 응용 컨 텍스트 를 정의 할 수 있 습 니 다.자바 코드 방식
@ComponentScan({"com.demo.package1","com.demo.package2"})
@Configuration
public class SpringConfiguration {
XML 파일 방식
<context:component-scan base-package="com.demo.package1, com.demo.package2"/>
프로젝트 에서 흔히 볼 수 있 는 오류
Spring Boot
에 대한 오 류 는 프로젝트 시작 과정 에서 이러한 오 류 를 만난 적 이 있 습 니까?WARNING: No mapping found for HTTP request with URI [/spring-mvc/login] in DispatcherServlet with name ‘dispatcher’
WARNING: No mapping found for HTTP request with URI [/list-todos] in DispatcherServlet with name ‘dispatcher’
또는:
ERROR:No qualifying bean of type [com.demo.springboot.jpa.UserRepository] found for dependency [com.demo.springboot.jpa.UserRepository]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}…
잘못된 원인 은 모두 bean 이 Spring 에 의 해 발견 되 지 않 았 기 때 문 입 니 다. 이러한 오 류 를 만나면 검사 해 야 합 니 다.
당신 은 클래스 에 정확 한 주석
@ComponentScan
, XML
, Java
또는 Component Scan
을 붙 였 습 니까?어떤 클래스 에
@Controller
주 해 를 사용 하면 클래스 를 만들어 야 할 때 이 주 해 된 클래스 는 후보 클래스 임 을 나타 낸다.마치 손 을 드 는 것 같다.@Repository
지정 한 가방 의 종 류 를 스 캔 하 는 데 사 용 됩 니 다.어떤 손 들 었 는 지 보 는 것 처럼.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
자바 읽 기 쓰기 바 이 너 리 파일 작업텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.