일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- linux
- IntelliJ
- tool
- devops
- Spring
- Spring Batch
- Design Patterns
- Spring Boot
- db
- 요리
- php
- jsp
- Oracle
- JVM
- jenkins
- Web Server
- 맛집
- javascript
- Gradle
- ReactJS
- it
- AWS
- ubuntu
- MySQL
- java
- elasticsearch
- laravel
- springboot
- redis
- Git
Archives
- Today
- Total
아무거나
[spring] 생명주기(life cycle)와 범위 본문
반응형
[spring] 생명주기(life cycle)와 범위
1. 스프링 컨테이너 생명 주기
[ex]
public class MainClass {
public static void main(String[] args) {
// 스프링 컨테이너 생성
GenericXmlApplicationContext ctx = new GenericXmlApplicationContext();
// 스프링 컨테이너 설정
ctx.load("classpath:applicationCTX.xml");
ctx.refresh(); // load메서드를 사용할경우 refresh메서드를 사용하여 반드시 설정이 다 되도록 하여야 한다.
// 스프링 컨테이너 사용
Student student = ctx.getBean("student", Student.class);
System.out.println("이름 : " + student.getName());
System.out.println("나이 : " + student.getAge());
// 스프링 컨테이너 종료
ctx.close();
}
}
2. 스프링 빈 생명 주기
# 인터페이스를 이용해서 하는 경우
public static void main(String[] args) {
GenericXmlApplicationContext ctx = new GenericXmlApplicationContext(); // 컨테이너생성
ctx.load("classpath:applicationCTX.xml"); // 로드
ctx.refresh(); // 빈 생성(즉, 빈이 초기화 과정에서 호출된다. interface:InitializingBean, method:afterPropertiesSet() )
ctx.close(); // 빈 소멸(빈 소멸 과정에서 생성 된다. interface:DisposableBean , method:destroy() )
}
# 어노테이션을 이용해서 하는 경우
// 어노테이션을 이용해서 하는 경우
public static void main(String[] args) {
GenericXmlApplicationContext ctx = new GenericXmlApplicationContext(); // 컨테이너생성
ctx.load("classpath:applicationCTX.xml"); // 로드
// 개발자가 임의로 만들어놓은 method 활용
ctx.refresh(); // 빈 생성(빈이 초기화 과정에서 호출된다. @PostConstruct, method:initMethod())
ctx.close(); // 빈 소멸(빈 소멸 과정에서 생성 된다. @PreDestroy, method:destroyMethod())
}
# 결과
afterPropertiesSet() // 인터페이스 빈 생성
initMethod() // 어노테이션 빈 생성
destroyMethod() // 어노테이션 빈 소멸
destroy() // 인터페이스 빈 소멸
3. 스프링 빈 범위(scope)
- 스프링 컨테이너가 생성되고, 스프링 빈이 생성 될 때, 생성된 스프링 빈은 scope을 가지고 있다.( = 범위 )
scope(범위)란 해당하는 객체가 어디까지 영향을 미치는지 결정하는 것
[MainClass.java]
public class MainClass {
public static void main(String[] args) {
AbstractApplicationContext ctx = new GenericXmlApplicationContext("classpath:applicationCTX.xml");
Student student1 = ctx.getBean("student", Student.class);
System.out.println("이름 : " + student1.getName());
System.out.println("나이 : " + student1.getAge());
System.out.println("==============================");
Student student2 = ctx.getBean("student", Student.class);
student2.setName("홀길자");
student2.setAge(100);
System.out.println("이름 : " + student1.getName());
System.out.println("나이 : " + student1.getAge());
System.out.println("==============================");
if(student1.equals(student2)) {
System.out.println("student1 == student2");
} else {
System.out.println("student1 != student2");
}
ctx.close();
}
}
[applicationCTX.xml]
<?xml version="1.0" encoding="UTF-8"?>
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 id="student" class="com.javalec.ex.Student" scope="singleton">
<constructor-arg value="홍길순"></constructor-arg>
<constructor-arg value="30"></constructor-arg>
</bean>
</beans>
* 위의 xml에서 스프링 컨테이너가 생성을 했기때문에 java에서 사용이 가능하다.
반응형
'Java & Kotlin > Spring' 카테고리의 다른 글
[spring] AOP(Aspect Oriented Programming) - 1 (0) | 2019.12.25 |
---|---|
[spring] 외부 파일을 이용한 설정 (0) | 2019.12.25 |
[spring] DI 설정 방법 (0) | 2019.12.25 |
[spring] DI(Dependency Injection) 활용 (0) | 2019.12.25 |
[spring] DI(Dependency Injection) - 2 (0) | 2019.12.25 |
Comments