사용하지 않는 봄 콩 검출
간절한(느리지 않은) 싱글톤 콩을 독점적으로 포함하는 스프링 구성(기본값)을 고려할 때, 해당 콩이 아무 곳에도 주입되지 않은 경우 스프링이 예외를 던지는 것이 가능합니까?저는 근본적으로 Spring beans 형태의 데드 코드를 감지하는 방법을 찾고 있습니다.
제 질문은 이것들과 다소 유사합니다.
- http://forum.spring.io/forum/spring-projects/container/116494-any-tools-or-method-to-identify-unused-spring-beans
- 봄 인스턴스화와 '사용하지 않는 콩'
- Spring에서 사용되지 않는 특성을 감지하는 방법
하지만,
- 그래프를 수동으로 검사하거나 로그 데이터를 구문 분석하는 데는 관심이 없습니다.
- 나는 여러 컨텍스트 파일의 추가 복잡성, 빈, 빈 후 처리 또는 xml을 재정의하지 않습니다.단순하고 간단한 주석 기반 구성입니다.
- 저는 Spring Boot 1.2.6을 사용하고 있는데, 이는 이러한 질문들보다 몇 년 더 새로운 것입니다(아마도 새로운 기능이 존재할 것입니다).
필요한 콩이 빠진다면 봄은 분명히 예외를 던질 것입니다.콩이 발견되었지만 필요 없는 반대 시나리오에서도 예외를 던질 수 있습니까?
필요한 콩이 빠진다면 봄은 분명히 예외를 던질 것입니다.콩이 발견되었지만 필요 없는 반대 시나리오에서도 예외를 던질 수 있습니까?
TL/DR:
봄은 이것을 지지하지 않습니다 (그리고 아마도 절대 그럴 것입니다).
긴 버전:
콩이 사용되는지 여부를 감지하는 것은 정말 어려울 수 있습니다.
먼저 봄이 "잃어버린 콩" 예외를 던지는 시기를 정의해 보겠습니다.
스프링 컨텍스트의 초기화 중에 스프링은 모든 종속성이 충족되는 순서대로 콩을 생성합니다(가능한 경우).콩에 의존성이 없으면 봄은 예외를 던질 것입니다(당신이 말한 것처럼).따라서 스프링 컨텍스트 초기화 프로세스 중에 예외가 발생합니다.
이제, 우리는 이 과정을 관찰하고 다른 콩들에서 의존성으로 사용되지 않은 콩을 찾을 수 있다고 말할 수 있습니다.문제는 스프링 컨텍스트 초기화 프로세스 중에 모든 빈 종속성이 정의되지 않는다는 것입니다.
다음 예를 살펴보겠습니다.
먼저, 우리는 간단한 인터페이스를 가지고 있습니다.DataService
public interface DataService {
String getData();
}
이제 이 인터페이스를 구현하는 2개의 스프링 원두가 있습니다.
@Service("firstDataService")
public class FirstDataService implements DataService {
@Override
public String getData() {
return "FIRST DATA SERVICE";
}
}
@Service("secondDataService")
public class SecondDataService implements DataService {
@Override
public String getData() {
return "SECOND DATA SERVICE";
}
}
자, 이 두 개의 콩에 직접적으로 의존하는 콩이 없다고 상상해 보세요.직접적으로 말하면, 이 콩에 의존하는 콩은 없다는 뜻입니다.constructor-based
,setter-based
또는field-based
부양 가족 주사
그 때문에 스프링은 콘텍스트 초기화 과정 중에 다른 콩 내부에 이러한 콩을 주입하지 않습니다.
이제 다음 콩을 생각해 보십시오.
@Service
public class DataCollector {
@Autowired
ApplicationContext applicationContext;
String getDataFromService(String beanName) {
DataService ds = (DataService) applicationContext.getBean(beanName);
return ds.getData();
}
}
내가 전화를 걸면getDataFromService
의 방법DataCollector
의 "first DataService" 값을 사용합니다.beanName
매개 변수, 메소드는 결과적으로 "FIRST DATA SERVICE"를 반환합니다."Second DataService"로 메서드를 호출하면 "Second Data SERVICE"를 반환합니다.
이제, 봄이 정의를 볼 때DataController
컨텍스트 초기화 중에 어떤 콩에 대해 결정할 방법이 없습니다.DataCollector
에 따라 다릅니다.이 모든 것은 애플리케이션 로직과 NAT이 사용하는 가치에 따라 달라집니다.beanName
우리가 호출할 때의 매개 변수getDataFromService
방법.
그 때문에 스프링은 사용하지 않는 콩이 있는지 여부를 판단할 수 없습니다(위의 경우처럼 콩 사용이 동적일 수 있기 때문입니다).
언급URL : https://stackoverflow.com/questions/36048471/detecting-unused-spring-beans
'programing' 카테고리의 다른 글
mongo.exe가 버전 6.0.0에 설치되지 않음 (0) | 2023.06.30 |
---|---|
int {DefaultValueBinder} 유형의 값에서 어레이 오프셋에 액세스하려고 합니다.php line 82 } (0) | 2023.06.30 |
복합 기본 키와 추가 "ID" 열? (0) | 2023.06.25 |
GitHub 커밋이 '귀하의 기여' 일정에 기록되지 않습니다. (0) | 2023.06.25 |
중첩된 객체 값별 MongoDB 정렬 (0) | 2023.06.25 |