Spring 의 singleton 과 prototype 의 실현

spring bean 역할 영역 에 대해 서 는 용기 에 따라 다 를 수 있 습 니 다.예 를 들 어 BeanFactory 와 ApplicationContext 용기 가 다 릅 니 다.이 글 은 ApplicationContext 용기 에 기반 한 bean 역할 영역 을 설명 합 니 다.
bean 의 역할 영역 에 대해 서 는 spring 에서 주로 singleton,prototype,session,request,global 을 포함 합 니 다.이 글 은 주로 singleton 과 prototype 을 설명 합 니 다.
하나.  singleton
singleton 은 하나의 예 모드,즉 scope="singleton"의 bean 으로 용기 에서 한 번 만 예화 합 니 다.
dao 예제 코드:

package com.demo.dao;

public class UserDao {

  public UserDao(){
    System.out.println("UserDao          ");
  }
  //     
  public String getUserName(){
    //  dao 
    return "Alan_beijing";
  }
}
applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

  <bean class="com.demo.dao.UserDao" id="userDao" scope="singleton"/>
</beans>
test:

public class MyTest {

  @Test
  public void test(){
    //        
    ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");

    //       
    UserDao userDao = applicationContext.getBean(UserDao.class);
    System.out.println(userDao.getUserName());

    //       
    UserDao userDao2 = (UserDao) applicationContext.getBean("userDao");
    System.out.println(userDao2.getUserName());
    //                  
    System.out.println("     :"+userDao+"
"+" :"+userDao2); } }
테스트 결과:

분석:테스트 코드 에서 bean 을 singleton 으로 정의 하고 응용 프로그램 Context 의 getBean()방법 을 통 해 bean(userDao)을 얻 었 으 나 같은 인 스 턴 스 대상 인 com.demo.dao 를 되 돌려 줍 니 다.UserDao@27a5f880자세히 살 펴 보면 bean 을 두 번 가 져 왔 지만 UserDao 의 무 참 구조 함수 가 한 번 만 호출 되 었 다 는 것 도 용기 에 있다 는 것 을 증명 한다.singleton 은 실제 적 으로 한 번 만 예화 되 었 습 니 다.주의해 야 할 것 은 Singleton 모드 의 bean,applicationContext 에서 bean 을 불 러 올 때 bean 을 예화 합 니 다.
정의 bean:

테스트 결과:
다음 코드 는 bean 만 불 러 왔 을 뿐 getBean 방법 으로 bean 을 가 져 오지 않 았 으 나 UserDao 는 한 번 호출 되 었 습 니 다.즉,정례 화 되 었 습 니 다.

2 프로 토 타 입
prototype 은 원형 모드 로 bean 을 몇 번 호출 하면 몇 번 을 예화 합 니까?
singleton 코드 를 원형 으로 변경 합 니 다.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

  <bean class="com.demo.dao.UserDao" id="userDao" scope="prototype"/>
</beans>
테스트 코드 는 singleton 과 같 지만 결 과 는 다르다.

분석:테스트 결 과 를 통 해 두 번 의 bean 을 호출 하면 두 번 의 UserDao 대상 을 예화 하고 대상 이 다 릅 니 다.주의해 야 할 것 은 prototype 유형의 bean 은 bean 을 가 져 올 때 만 예화 대상 입 니 다.
삼 singleton 과 prototype 의 차이
(1)singleton 은 용기 에서 한 번 만 예화 되 고 prototype 은 용기 에서 몇 번 호출 되면 몇 번 예화 된다.
(2)Appplication Context 용기 에서 singleton 은 applicationContext.xml 로 딩 할 때 미리 예화 되 고 prototype 은 호출 할 때 만 예화 되 어야 합 니 다.
singleton:
정의 bean:

테스트:

prototype:
정의 bean:

테스트:호출 되 지 않 음

테스트:호출

4.singleton 은 prototype 보다 성능 을 소모 하고 웹 개발 에 서 는 singleton 모드 를 추천 하 며,app 개발 에 서 는 prototype 모드 를 추천 합 니 다.
Spring 의 singleton 과 prototype 의 실현 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.Spring singleton 과 prototype 에 관 한 더 많은 내용 은 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기