봄 콩 대상
대상 의 이름 은 일반적으로 설정 파일 에서 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()
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.