Bean Scope
빈의 범위
객체를 만들때 컨테이너가 객체를 한번만 호출하는지, 객체를 호출받을때마다 생성하는지를 정의
singleton, prototype을 주로 많이 쓰임
Singleton : 객체를 한번만 생성 (동일성을 보장)
<bean id="A" class="kr.co.fastcampus.cli.A" scope="singleton"></bean>
prototype : 객체를 계속 새로 만듬
<bean id="A" class="kr.co.fastcampus.cli.A" scope="prototype"></bean>
Scope Description
singleton (Default) Scopes a single bean definition to a single object instance for each Spring IoC container.
prototype Scopes a single bean definition to any number of object instances.
request Scopes a single bean definition to the lifecycle of a single HTTP request. That is, each HTTP request has its own instance of a bean created off the back of a single bean definition. Only valid in the context of a web-aware Spring ApplicationContext.
session Scopes a single bean definition to the lifecycle of an HTTP Session. Only valid in the context of a web-aware Spring ApplicationContext.
application Scopes a single bean definition to the lifecycle of a ServletContext. Only valid in the context of a web-aware Spring ApplicationContext.
websocket Scopes a single bean definition to the lifecycle of a WebSocket. Only valid in the context of a web-aware Spring ApplicationContext.
동일성과 동등성
동일성 : 객체 주소가 같다.
동등성 : 객체의 값이 같다.
동일성
@Test
public void testIdentity(){
//동일성 (identity) : 객체 주소 가 같다. (object1==object2==object3) 는 동일한 주소 값을 가질 수 있다.
//동등성 (eqauls) : 객체의 값이 같다. (object1.equals(object2) ==true )
A a1 = new A();
A a2 = new A();
Assert.assertFalse(a1==a2); //a1과 a2의 주소값이 같은지 ? 다르다
A a3 = a1;
Assert.assertTrue(a3==a1);
}
class A{
}
동등성
Object 의 equals 는 아래와 같이 동일성 체크를 한다.
public boolean equals(Object obj) {
return (this == obj);
}
@Test
public void testEquals(){
A a1 = new A(10,"Hello world");
A a2 = new A(10,"Hello world");
A a3 = new A(5,"Hello world");
Assert.assertTrue(a1.equals(a2));
Assert.assertFalse(a1.equals(a3));
}
코드
class A{
private int a1 ;
private String a2;
public A(int a1, String a2) {
this.a1 = a1;
this.a2 = a2;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof A)) return false;
A a = (A) o;
return a1 == a.a1 &&
Objects.equals(a2, a.a2);
}
@Override
public int hashCode() {
return Objects.hash(a1,a2);
}
}
lombok을 응용하여 사용하면 아래와 같이 쉽게 만들 수 있다.
@EqualsAndHashCode
@AllArgsConstructor
class A{
private int a1 ;
private String a2;
}
TestCode
https://junit.org/junit5/docs/current/user-guide/#running-tests
https://junit.org/junit5/docs/current/user-guide/#running-tests-build-maven
'BackEnd > Spring' 카테고리의 다른 글
[Spring] 다른 타입들을 리스트로 받아오기( Jackson Library) (0) | 2020.02.28 |
---|---|
ClassPath Scanning and Managed Components (0) | 2020.02.22 |
ClassPath Scanning and Managed Components (0) | 2020.02.08 |
Customizing the Nature of a Bean (0) | 2020.02.01 |
DI (Dependency Injection) (0) | 2020.02.01 |