Spring Bean 초기화 시간을 계산할 수 있습니까?

Vikas Chowdhury

Spring Bean 초기화 중에 포인트 컷 / 내부 (point cut / within)를 넣어 비즈니스에 필요한 통계를 계산할 수있는 Spring AOP 기능을 개발하고 싶습니다. 스프링 AOP 모듈을 사용할 수 있는지 알고 싶습니다.

Kosbr

이 구성 요소를 사용하여 초기화 시간을 측정 할 수 있습니다.

@Component
public class MyBeanPostProcessor implements BeanPostProcessor, Ordered {

    private Map<String, Long> start;

    private Map<String, Long> end;

    public MyBeanPostProcessor() {
        start = new HashMap<>();
        end = new HashMap<>();
    }

    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        start.put(beanName, System.currentTimeMillis());
        return bean;
    }

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        end.put(beanName, System.currentTimeMillis());
        return bean;
    }

    @Override
    public int getOrder() {
        return Integer.MAX_VALUE;
    }

    //this method returns initialization time of the bean.
    public long initializationTime(String beanName) {
       return end.get(beanName) - start.get(beanName);
    }
}

그러나 이번에는 생성자를 실행하는 시간을 포함하지 않습니다.

그러나 모든 빈 생성자가 실행되기 전에 빈 정의를 읽은 후 잠시 기록 할 수 있습니다. BeanFactoryPostProccessor를 사용하십시오.

@Component
public class MyBeanFactoryPostProcessor implements BeanFactoryPostProcessor {

    private long launchTime;

    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException {
        launchTime = System.currentTimeMillis();
    }

    public long getLaunchTime() {
        return launchTime;
    }
}

lauchTime은 스프링이 구성 (예 : xml 파일) 읽기를 마쳤고 빈을 만들 준비가 된 순간입니다.

따라서 전체 초기화 시간은 max (end)-launchTime과 같은 두 가지 구성 요소를 사용하여 계산할 수 있습니다. (마지막 빈 초기화 시간과 빈 설정을 읽은 시간의 차이)

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Spring은 "dev"프로필에서 Bean을 초기화 할 수 없습니다.

Spring Newbie : 다양한 멤버 초기화로 Bean 인스턴스를 어떻게 주입 할 수 있습니까?

초기화에 산술 연산을 할 수 있습니까?

Spring Bean을 프록시 해제 할 수 있습니까?

Skype 화상 통화 시간을 어떻게 계산할 수 있습니까?

Spring에서 Bean 클래스를 초기화 할 수 없습니다.

Spring @bean을 @Repository 또는 @Service로 정의 할 수 있습니까?

Java Spring Bean Factory가 Bean 목록을 반환 할 수 있습니까?

CDI, 다형성 : A의 @PostConstruct 중에 초기화 된 필드를 기반으로 Bean B의 구현을 Bean A에 주입 할 수 있습니까?

Liquibase로 Spring Batch 메타 데이터 테이블을 초기화 할 수 있습니까?

대화 형 클라이언트 측에 걸리는 시간을 어떻게 계산할 수 있습니까?

True로 부울을 초기화 할 수 있습니까?

git 하위 모듈을 "초기화"할 수 있습니까?

const Eigen 행렬을 초기화 할 수 있습니까?

Guice가 빈을 초기화 할 수 있습니까?

조건부로 배열을 초기화 할 수 있습니까?

새 pyqt 창을 어떻게 초기화 할 수 있습니까?

기호 열을 어떻게 계산할 수 있습니까?

같은 날의 기간을 어떻게 계산할 수 있습니까?

XML 설정으로 Spring MVC에서 기본 Bean 구현을 어떻게 제공 할 수 있습니까?

R에서 주어진 시점에 대한 기간을 어떻게 계산할 수 있습니까?

Soft Normal 계산 기능을 어떻게 최적화 할 수 있습니까?

MySQL이 시계열에서 평균 시간을 계산할 수 있습니까?

Spring에서 Bean에 직접 값을 할당 할 수 있습니까?

Lombok의 @RequiredArgsConstructor가 Spring-Webflux WebClient를 초기화할 수 있습니까?

새 매핑 생성시지도의 값을 초기화 할 수 있습니까?

JSR 303 Bean Validation을 Spring Data Rest와 함께 사용할 수 있습니까?

Spring에서 Bean의 모든 impl의 Map을 주입 할 수 있습니까?

Spring Bean에서 간단한 클래스 이름을 어떻게 사용할 수 있습니까?