10. 초기화 및 cleanup 작업 처리
https://docs.spring.io/spring-framework/docs/5.2.25.RELEASE/spring-framework-reference/core.html#beans-factory-lifecycle
1> 개요
- 빈(bean)이 생성되고 의존성 주입(DI) 이후의 초기화 작업 및 자원반납(cleanup)작업처리가 가능하도록 지원.
2> @PostConstruct 와 @PreDestroy 이용
ex>
@PostConstruct
public void init() {
// 초기화 작업
}
@PreDestroy
public void clean() {
// cleanup 작업
}
package com.exam;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import com.exam.service.DeptServiceImpl;
@SpringBootApplication
public class Application implements CommandLineRunner {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
// IoC Container 참조
Logger logger = LoggerFactory.getLogger(getClass());
ApplicationContext ctx;
// 생성자 주입
public Application(ApplicationContext ctx) {
logger.info("logger:ApplicationContext:{}", "Application 생성");
this.ctx = ctx;
}
@Override
public void run(String... args) throws Exception {
// TODO Auto-generated method stub
logger.info("logger:ApplicationContext:{}", ctx);
// 빈참조
DeptServiceImpl service = ctx.getBean("xxx",DeptServiceImpl.class);
List<String> list = service.list();
logger.info("list:{}", list);
}
}
package com.exam.dao;
import java.util.Arrays;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;
// Spring Bean
// @Configuration // 생성됨
// @Component // 생성됨
// @Repository // 생성됨
//@Service // 생성됨
// @Controller // 생성됨
//@Repository
//DeptDAO 변수명 = new DeptDAO();
//@Component("dao")
@Repository("dao")
public class DeptDAO {
Logger logger = LoggerFactory.getLogger(getClass());
public DeptDAO() {
logger.info("logger: {}", "DeptDAO 생성자");
}
public List<String> list() {
return Arrays.asList("홍길동","이순신");
}
}
package com.exam.service;
import java.util.List;
public interface DeptService {
public List<String> list();
}
package com.exam.service;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import com.exam.dao.DeptDAO;
@Service("xxx")
public class DeptServiceImpl implements DeptService {
Logger logger = LoggerFactory.getLogger(getClass());
DeptDAO deptDAO;
// 생성자 주입(의존성 주입)
public DeptServiceImpl(DeptDAO deptDAO) {
logger.info("logger: {}", "DeptServiceImpl 생성 및 의존성 주입");
this.deptDAO = deptDAO;
}
@Override
public List<String> list() {
// TODO Auto-generated method stub
return deptDAO.list();
}
@PostConstruct
public void init() {
logger.info("logger: {}", "@PostConstruct 생성자");
}
@PreDestroy
public void clean() {
logger.info("logger: {}", "@PreDestroy 생성자");
}
}
# application.properties
logging.level.org.springframework=info
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.18</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.exam</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>11</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
'[study]이론정리 > Spring Boot' 카테고리의 다른 글
AOP(Aspect Oriented Programming: 관점 지향 프로그래밍) (1) | 2024.07.02 |
---|---|
프로파일(Profile) (0) | 2024.07.02 |
빈의 scope (0) | 2024.07.02 |
생성된 빈 접근방법 (0) | 2024.07.02 |
의존성 설정 (0) | 2024.07.02 |