자바 의 SSM 중 bean 관련 지식 집계 사례 설명

6196 단어 JavaSSMBean
bean 의 생명주기
在这里插入图片描述
대상 생 성
  • 실례 화 된 Bean 대상 은 기본적으로 무 참 구조 방법 을 선택 합 니 다.만약 에 하나의 인삼 구조 만 있 으 면 인삼 구 조 를 호출 합 니 다.만약 에 여러 개의 인삼 구조 만 있 으 면 오 류 를 보고 합 니 다.그 중 하 나 는 인삼 구조 가@AutoWired 주 해 를 추가 하지 않 는 한.
  • Bean 의 속성 설정 하기;
  • 의존 주입 및 Aware 관련 인터페이스 실현 여부 판단(BeanNameAware,BeanFactory Aware,ApplicationContextAware)
  • 이 Bean 이 BeanPostProcessor 인터페이스 와 연결 되면 BeanPostProcessor.postProcessor BeforeInitialization()
  • 을 호출 합 니 다.
  • InitalizingBean 인 터 페 이 스 를 실 현 했 는 지 판단 하여 InitalizingBean.after PropertiesSet()방법
  • 을 실 현 했 습 니 다.
  • 만약 Bean 이 설정 파일 에 init-method 속성 을 포함 하거나@PostConstruct 주 해 를 추가 하면 지정 한 방법 을 실행 합 니 다.
  • 실행 방법 BeanPostProcessor.postProcessor AfterInitialization():예 를 들 어 AOP
  • 이 실현 되 었 는 지 판단 합 니 다.
  • 창설 대상 완료;
  • 대상 소각
  • Bean 을 없 애 려 고 할 때 Bean 이 DisposableBean 인 터 페 이 스 를 실현 하면 destroy()방법 을 실행 합 니 다.
  • Bean 을 없 애 려 고 할 때 Bean 이 설정 파일 에 destroy-method 속성 을 포함 하거나@PreDestroy 주 해 를 추가 하면 지정 한 방법
  • 을 실행 합 니 다.
  • 소각 대상 완료
  • Bean 의 역할 영역
    spring 은 5 가지 역할 영역 을 지원 합 니 다.다음 과 같 습 니 다.
    request:HTTP 요청 마다 새로운 bean 이 생 성 됩 니 다.이 bean 은 현재 HTTP request 에서 만 유효 합 니 다.
  • singleton:단일 모드,Spring IoC 용기 에는 공 유 된 Bean 인 스 턴 스 만 존재 합 니 다.몇 개의 Bean 이 이 를 인용 하 든 항상 같은 대상 을 가리 키 고 있 습 니 다.이 모드 는 다 중 스 레 드 에서 안전 하지 않다.Singleton 역할 영역 은 Spring 의 기본 역할 영역
  • 입 니 다.
  • prototype:Spring 용 기 를 통 해 prototype 이 정의 하 는 bean 을 가 져 올 때마다 용 기 는 새로운 Bean 인 스 턴 스 를 만 듭 니 다.모든 Bean 인 스 턴 스 는 자신의 속성 과 상 태 를 가지 고 있 으 며,singleton 은 전체 적 으로 하나의 대상 만 있 습 니 다.경험 에 따 르 면 상태 가 있 는 bean 은 prototype 역할 도 메 인 을 사용 하고 상태 가 없 는 bean 은 singleton 역할 도 메 인 을 사용 합 니 다.
  • 데이터베이스 와 상호작용 을 하 는 데 사용 되 는 데 이 터 를 저장 하 는 bean 등 은 모두 상태 가 있 는 bean 이다.
  • 다른 자원 을 조작 하 는 bean,예 를 들 어 service contrller 는 상태 가 없 는 bean 입 니 다.
  • 물론 spring 은 ThreadLocal 을 사용 하여 다 중 스 레 드 처 리 를 하기 때문에 절대 다수의 bean 은 singleton 역할 영역 이 라 고 설명 할 수 있 습 니 다.이것 은 뒷말 이다.
  • session:Http Session 에서 용 기 는 이 Bean 의 같은 인 스 턴 스 를 되 돌려 줍 니 다.다른 Session 요청 에 대해 서 는 새로운 인 스 턴 스 를 만 듭 니 다.이 bean 인 스 턴 스 는 현재 Session 에서 만 유효 합 니 다.Http 요청 과 마찬가지 로 세 션 마다 새로운 인 스 턴 스 를 만 들 기 를 요청 합 니 다.다른 인 스 턴 스 간 에 속성 을 공유 하지 않 고 인 스 턴 스 는 자신의 session 요청 에서 만 유효 하 며 요청 이 끝나 면 인 스 턴 스 가 삭 제 됩 니 다.예 를 들 어 사용자 카 트
  • global-session:전역 session 역할 영역 은 Portlet 기반 웹 응용 에서 만 의미 가 있 고 Spring 5 에 서 는 이미 없습니다.Portlet 은 의미 코드(예 를 들 어 HTML)세 션 을 만 들 수 있 는 작은 자바 웹 플러그 인 입 니 다.포트 렛 용 기 를 기반 으로 서버 렛 처럼 HTTP 요청 을 처리 할 수 있 습 니 다.하지만 Servlet 과 달리 Portlet 마다 세 션 이 다 릅 니 다.
  • bean 의 순환 의존
    순환 의존 이란 무엇 인가
    한 AService 에 서 는 BService 의 한 대상 을 인 용 했 고,BService 에 서 는 AService 의 한 대상 을 인용 했다.
    그러면 AService 의 bean 을 구성 할 때 속성 을 채 우 고 의존 도 를 주입 합 니 다.그러면 BService 의 bean 을 주입 해 야 합 니 다.spring 은 BService 의 bean 이 아직 만 들 지 않 았 고 BService 의 bean 을 구성 해 야 합 니 다.마찬가지 로 BService 의 bean 은 AService 의 bean 이 필요 하 다.이때 AService 의 bean 이 아직 구축 되 지 않 았 기 때문에 그 도 AService 의 bean 을 만 들 것 이다.계속 순환
    在这里插入图片描述
    어떻게 해결:2 급 캐 시 사용
  • singleton Objects:1 급 캐 시,그 안에 실례 화 된 단일 대상 이 설치 되 어 있 습 니 다.이것 은 항상 존재 하 는
  • 입 니 다.
  • early Singleton Objects:2 급 캐 시 는 미리 노출 된 단일 대상 을 저장 합 니 다.바로 아래 그림 의 캐 시
  • 입 니 다.
    在这里插入图片描述
    무슨 문제 가 있 습 니까?
    위의 bean 에 AOP 가 존재 하지 않 는 다 면 문제 가 없 지만 AOP 가 존재 한다 면 구 조 된 bean 대상 은 원시 대상 이 아니 라 AOP 가 생 성 한 대리 대상 이다.2 급 캐 시 를 사용한다 면 B 는 캐 시 에서 A 의 원본 대상 을 가 져 옵 니 다.구 조 된 A 의 bean 대상 이 아 닙 니 다.
    어떻게
    캐 시 를 추가 합 니 다.singleton Factory:세 번 째 캐 시 는 실례 화 될 대상 공장 에 저 장 됩 니 다.
    주요 코드 는 다음 과 같 습 니 다.
    
    protected Object getSingleton(String beanName, boolean allowEarlyReference) {
        Object singletonObject = this.singletonObjects.get(beanName);
        if (singletonObject == null && isSingletonCurrentlyInCreation(beanName)) {
            synchronized (this.singletonObjects) {
                singletonObject = this.earlySingletonObjects.get(beanName);
                if (singletonObject == null && allowEarlyReference) {
                    ObjectFactory<?> singletonFactory = this.singletonFactories.get(beanName);
                    if (singletonFactory != null) {
                        singletonObject = singletonFactory.getObject();
                        this.earlySingletonObjects.put(beanName, singletonObject);
                        this.singletonFactories.remove(beanName);
                    }
                }
            }
        }
        return (singletonObject != NULL_OBJECT ? singletonObject : null);
    }
    
    getSingleton()의 전체 과정 을 분석 하면 Spring 은 먼저 1 급 캐 시 singleton Objects 에서 가 져 옵 니 다.가 져 오지 못 하고 대상 이 만 들 고 있 으 면 2 급 캐 시 early Singleton Objects 에서 가 져 옵 니 다.가 져 오지 못 하고 singleton Factory 가 getObject()를 통 해 가 져 올 수 있 도록 허용 한다 면 3 급 캐 시 singleton Factory.getObject()(3 급 캐 시)에서 가 져 오고 가 져 오 면 singleton Factory 에서 제거 하여 early Singleton Objects 에 넣 습 니 다.3 급 캐 시 에서 2 급 캐 시 로 이동 한 것 이다.
    절 차 를 정리 하 다.
  • A 는 첫 번 째 정례 화 대상 이후 singleton Factory 에 자신 을 미리 노출 시 켰 다.
  • 속성 을 채 울 때 자신 이 의존 하 는 대상 B 를 발견 합 니 다.이때 get(B)을 시도 해 보 니 B 가 아직 create 되 지 않 았 기 때문에 create 프로 세 스
  • 을 갑 니 다.
  • B 는 속성 을 채 울 때 자신 이 대상 A 에 의존 한 것 을 발견 하고 get(A)을 시도 합 니 다.1 급 캐 시 singletonObjects(없 을 것 입 니 다.A 의 bean 이 아직 구성 되 지 않 았 기 때 문 입 니 다)를 시도 하고 2 급 캐 시 early SingletonObjects(없 음)를 시도 합 니 다.3 급 느 린 저장 singletonFactory 를 시도 합 니 다.A 는 ObjectFactory 를 통 해 자신 을 미리 노출 시 켰 기 때 문 입 니 다.그래서 B 는 ObjectFactory.getObject 를 통 해 A 대상
  • 을 받 을 수 있 습 니 다.
  • 미리 인용 하여 A 의 동적 프 록 시 대상 을 직접 만 듭 니 다.즉,예화 된 A 의 bean 을 두 번 째 캐 시 에 넣 으 면 B 의 bean 은 직접 예화 되 어 1 급 캐 시 에 들 어 갑 니 다.
  • 이때 A 로 되 돌 렸 습 니 다.A 충전 속성 은 계속 아래로 실 행 됩 니 다.bean 은 하나의 예 이기 때문에 A 는 동적 대 리 를 호출 하여 bean 을 만 들 지 않 고 두 번 째 캐 시 에서 실례 화 된 bean 을 꺼 내 서 1 급 캐 시 에 직접 넣 습 니 다.
  • 자바 의 SSM 에서 bean 에 관 한 지식 을 모 아 사례 를 설명 하 는 이 글 은 여기까지 소개 되 었 습 니 다.자바 의 SSM 에서 bean 에 관 한 지식 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

    좋은 웹페이지 즐겨찾기