웹 & 프레임워크

Spring 싱글톤 설계

늘근이 2014. 6. 27. 14:19

prototype - 요청할때마다 새로운놈

request - 같은 리퀘스트면 똑같은 빈, 다르면 다른빈

session - 이건 세션!, 근데 이 두개는 웹환겨에서만 됨

singletone - default값임! 싱글톤

 

                                   //spring컨테이너는 항상 bean 하나만 만든다!싱글톤으로 굳이 설정하지 않아도

                                   //객체하나로 관리한다멀티쓰레딩시 공유에 의한 문제가 없는지 체크는 해봐야함

                                   //밑에건 true 만약 새로 객체를 만들어서 받고싶다면 bean scope 준다

 

                                   System.out.println(bean == bean2);

 

<bean id="greeting" class="com.gorakgarak.sample3.autowire.GreetingServiceImpl"

autowire="byType" scope="prototype"/>


이렇게 주면


                                   System.out.println(bean == bean2);

 

이건 false값이 뜰것이다


//이런식으로 주면 됨!

//근데 보면 out은 또 싱글톤이라고 될수있다..(주입된 녀석 출력도우미는 싱글톤이다 ! 무슨문제가 ???)

//주입을 아무데나 해주는게 아님. 내가 필요한 의존객체가 있어야 일하니까 일하기 전에 준다.

//setter가 두번 호출된건 greeting service가 겟빈할때마다 두번 줄어줌!

//getbean한번 더하면 새로운 그리팅 서비스 하나 더 만들고 출력도우미 해주는데 출력도우미는 하나이기 때문에

//같은놈이 두번뜸!




//총코드는 다음과 같다

public class GreetingTest {

                  public static void main(String[] args) {

                                  

                                  

                                   //팩토리 기능및 의존성 관리  등등등을 제공하는 놈임

                                   //단순공장이 아님

                                   //컨테이너는 클래스패쓰부터 찾음.. 아니면 filesystem.. 써서 경로에 맞게 찾덩가

                                   //클래스의 시작은 src라고 할수있다

                                   ClassPathXmlApplicationContext context

                                   = new ClassPathXmlApplicationContext("beans3.xml");

                                   GreetingService bean = (GreetingService)context.getBean("greeting");

                                   GreetingService bean2 = (GreetingService)context.getBean("greeting");

 

                                  

                                   //spring컨테이너는 항상 bean 하나만 만든다!싱글톤으로 굳이 설정하지 않아도

                                   //객체하나로 관리한다멀티쓰레딩시 공유에 의한 문제가 없는지 체크는 해봐야함

                                   //밑에건 true 만약 새로 객체를 만들어서 받고싶다면 bean scope 준다

                                   System.out.println(bean);

                                   System.out.println(bean2);

                                  

                                  

                  }

 

}

 

결과는 다음과같다

 

set.... : com.gorakgarak.sample3.autowire.OutputServiceImplFile@57e9bb

set.... : com.gorakgarak.sample3.autowire.OutputServiceImplFile@57e9bb

com.gorakgarak.sample3.autowire.GreetingServiceImpl@1b212f0

com.gorakgarak.sample3.autowire.GreetingServiceImpl@1f96306