봄 콩 대상

Spring Bean 대상 의 이름 및 초기 화
대상 의 이름 은 일반적으로 설정 파일 에서 id 나 name 속성 을 통 해 이름 을 지정 합 니 다.대상 의 초기 화 는 일반적으로 대상 의 구축 을 가리 키 며, 일반적으로 세 가지 방식 이 있다
1) 클래스 를 직접 통과 하 는 구조 방법 (class = ") 2) 클래스 를 직접 통과 하 는 정적 방법 - 정적 공장 (factory - method =" getInstance ") 3 클래스 를 직접 통과 하 는 인 스 턴 스 방법 - 인 스 턴 스 공장 (factory - bean =" factory - method = ")
Spring Bean 대상 의 역할 영역
Spring 에서 Bean 대상 의 역할 영역 은 보통 Scope 속성 설정 을 통 해 이 루어 집 니 다. 그 값 은 두 개 로 가장 많이 사 용 됩 니 다. (이 두 개 에 국한 되 지 않 습 니 다)
1) singleton 단일 예: 메모리 에 있 는 이러한 인 스 턴 스 는 1 부 2) prototyoe 여러 예 입 니 다. 용기 에서 가 져 올 때마다 새로운 종류의 인 스 턴 스 를 만 듭 니 다.
       
       

설명: spring 의 대상 이 단일 디자인 일 때 이 대상 의 내부 인 스 턴 스 변 수 는 반드시 원자 조작 이 어야 합 니 다. 그렇지 않 으 면 스 레 드 가 안전 하지 않 은 문제 가 발생 할 수 있 습 니 다.
무엇이 라인 이 안전 하지 않 습 니까?
여러 스 레 드 가 같은 공유 데이터 세트 에 동시에 접근 할 때 나타 나 는 데이터 가 일치 하지 않 는 현상 을 스 레 드 가 안전 하지 않다 고 합 니 다.예 를 들 어 여러 스 레 드 가 공 통 된 100 장의 표를 팔 때 중복 되 거나 마이너스 가 생 겼 을 때 이 를 스 레 드 가 안전 하지 않다 고 한다.
라인 이 안전 하지 않 은 장면 이 나타 납 니 다:
1. 여러 스 레 드 가 동시에 실 행 됩 니 다. 2. 공유 데이터 세트 가 있 습 니 다. 3 공유 데이터 세트 에서 의 작업 은 원자 작업 이 아 닙 니 다.
Servlet 의 디자인 은 기본적으로 단일 예 입 니 다.
그래서 Servlet 에 스 레 드 보안 문제 가 있 을 수 있 습 니 다.Servlet 응용 프로그램 에서 어떤 장면 이 라인 안전 문제 가 발생 할 수 있 습 니까?servlet 에서 구성원 변수 (인 스 턴 스 변수 나 정적 (클래스) 변 수 를 정의 하면 이 변 수 는 원자 조작 도 아니 고 스 레 드 가 안전 하지 않 습 니 다.
Spring Bean 대상 의 생명주기
Spring 에서 bean 요소 의 역할 영역 이 singleton 일 때 대상 의 생명 주 기 는 spring 에서 관리 합 니 다. 대상 은 init - method 속성 을 통 해 설정 하 는 방법 을 초기 화하 고 대상 이 소각 할 때 destroy - method 속성 을 통 해 설정 하 는 방법 을 사용 합 니 다.역할 영역 이 prototype 일 경우, bean 대상 의 생 성 은 spring 이 책임 지고 init - method 속성 설정 을 통 해 호출 할 수 있 으 나, 대상 의 관리 및 소각 spring 은 더 이상 참여 하지 않 습 니 다.대상 이 초기 화 되 어 있 으 면 소각 할 때 동작 을 실행 해 야 합 니 다. bean 요소 에서 init - method 와 destroy - method 속성 을 통 해 호출 할 구체 적 인 방법 을 지정 할 수 있 습 니 다.
       

Spring Bean 대상 의 지연 로드
대상 의 지연 은 일반적으로 언제 불 러 와 야 하 는 지 를 말 하 는데 이것 은 시스템 운행 성능 을 향상 시 키 는 수단 이다.
       

설명: spring 은 시작 할 때 모든 bean 대상 을 기본적으로 초기 화 합 니 다. 만약 에 일부 bean 대상 이 이 대상 을 만 드 는 데 시간 이 오래 걸 리 지 않 을 수도 있 습 니 다. 그러면 일부 시스템 자원 은 낭비 되 고 해결 방안 은 이 대상 의 로드 체제 설정 이 로드 지연 되 는 것 을 말 합 니 다.모든 대상 이 지연 로드 정책 을 사용 하 기 를 원한 다 면 설정 파일 의 루트 요소 beans 에 속성 default - lazy - init = "true" 설정 을 추가 하면 됩 니 다.
전체 설정
package beans;

public class People {
    private int count;
    
    public People() {
        System.out.println("People.People()");
    }
    public void init(){
        System.out.println("init()");
    }
    public void eat(){
        System.out.println("eating");
    }
    public void destroy(){
        System.out.println("destroy()");
    }
    public synchronized void add(){
        count++;
        System.out.println(count);
    }
}

package beans;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext ct=new ClassPathXmlApplicationContext("spring-configs.xml");
        People p = ct.getBean("people",People.class);
        p.eat();
        p.add();
        p.add();
        ct.close();
    }
}


  4.0.0
  com.spoon
  spring-ioc
  0.0.1-SNAPSHOT
  
    
        org.springframework
        spring-context
        4.3.10.RELEASE
    
  



       


실행 결과
org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
  : Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@54d81cda: startup date [Sun Nov 18 17:39:48 CST 2018]; root of context hierarchy
org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
  : Loading XML bean definitions from class path resource [spring-configs.xml]
People.People()
init()
eating
1
2
org.springframework.context.support.ClassPathXmlApplicationContext doClose
  : Closing org.springframework.context.support.ClassPathXmlApplicationContext@54d81cda: startup date [Sun Nov 18 17:39:48 CST 2018]; root of context hierarchy
destroy()

좋은 웹페이지 즐겨찾기