스프링 부트에서의 개별적인 bean 설정
-기존 스프링에서 xml로 설정했던 bean은 스프링 부트에서 java로 생성하게 된다.
-웹 설정은 WebMvcConfigurer인터페이스를 구현한다.
-이때, 스프링부트 버전에 따라 다르므로 사용이 가능한지 한번 확인해야한다. 2버전대에선 가능
-이 java파일은 필요하지 않으면 생성하지 않을 수도 있다.
@Configuration : 스프링 설정 파일임을 의미
@Bean : 빈으로 등록
@PropertySource : Application.properties를 참조 가능
@Value : Application.properties에 값을 직접 참조
=>이 둘은 자바코드로 읽을 때.
@Bean
public void test() {
System.out.println("실행됨");
}
서버실행하면 콘솔창에 실행됨 이 나옴.
=>@Bean이 있는 메서드에
return new 생성클래스();를 하면 빈으로 등록된다.
@Bean //해당 메서드 실행하게됨
public TestBean testBean() {
System.out.println("테스트 빈 실행됨2");
return new TestBean();//빈으로 등록
}
여기서도, 의존성주입이 이루질 수 있다.
ApplicationContext
-springframework에 있는 걸로 import
@Autowired
ApplicationContext는 영속성을 가진 IOC컨테이너.
-빈을 보관하고 있는 장소.
getBean메서드를 가지고 있다.
생성한 빈, 컨트롤러, 서비스, 레파지토리 등등을 다 가져올 수 있음.
@Value는 application.properties에 있는 값을 바로 참조해서 사용할 수 있게 해준다.
@Value("${application.properties에 있는 키}")로 사용
마찬가지로 springframework에 있는 걸로 사용
WebConfig.java
package com.simple.basic.config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import com.simple.basic.controller.HomeController;
@Configuration //개별적인 스프링 빈 설정 파일
public class WebConfig implements WebMvcConfigurer{
//빈을 보관하고 있는 장소(스프링 컨테이너)
@Autowired
ApplicationContext applicationContext;
//properties파일에 선언된 변수를 바로 참조
@Value("${server.port}")
String port;
@Bean //해당 메서드 실행하게됨.
public void test() {
//생성한 빈
TestBean t = applicationContext.getBean(TestBean.class);
System.out.println(t);
t.hello();
//컨트롤러
HomeController h = applicationContext.getBean(HomeController.class);
System.out.println(h);
//가지고 있는 빈의 갯수
int c=applicationContext.getBeanDefinitionCount();
System.out.println("빈의 개수:"+c);
//application.properties파일에 선언된 값
System.out.println("properties파일에 선언된 값: "+port);
}
@Bean //해당 메서드 실행하게됨
public TestBean testBean() {
System.out.println("테스트 빈 실행됨2");
return new TestBean();//빈으로 등록
}
}
TestBean.java
package com.simple.basic.config;
public class TestBean {
public void hello() {
System.out.println("hello");
}
}
콘솔출력문
테스트 빈 실행됨2
com.simple.basic.config.TestBean@4b2d8c2b
hello
com.simple.basic.controller.HomeController@53a62046
빈의 개수:164
properties파일에 선언된 값: 8383
테스트코드 작성
TDD개발과 테스트코드
TDD : Test Driven Development
작은 단위별로 테스트코드를 작성하고, 해당 테스트를 통과하기 위한 코드를 작성해나가는 것.
스프링부트는 보다 쉬운 테스트코드를 제공한다.
@SpringBootTest(스프링 테스트 클래스)
@Test(해당 메서드를 테스트로 실행)
src/test/java아래에
베이스패키지 하위에 생성.
gradle에 테스트용 모듈이 있다.
testImplementation 'org.springframework.boot:spring-boot-starter-test'
어떻게 생성해야하는지 예시파일도 만들어져있다.
->BootBasicApplicationTests.java
+)테스트코드를 실행하면, 스프링 빈 설정파일의 메서드가 먼저 실행되고 이후에 테스트코드가 실행된다.
BootTest.java
package com.simple.basic;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import com.simple.basic.controller.HomeController;
@SpringBootTest //스프링부트 테스트 클래스
public class BootTest {
@Autowired
HomeController homeController;
@Test
public void testCode01() {
System.out.println(homeController.home());
}
}
JUnit으로 실행.
콘솔출력문
테스트 빈 실행됨2
com.simple.basic.config.TestBean@6c42f2a1
hello
com.simple.basic.controller.HomeController@17a703f5
빈의 개수:147
properties파일에 선언된 값: 8383
2023-02-10 19:52:32.209 INFO 27748 --- [ main] com.simple.basic.BootTest : Started BootTest in 3.306 seconds (JVM running for 5.245)
home
'Spring Boot' 카테고리의 다른 글
230213 Spring Boot Lombok으로 Builder패턴 만들기 (1) | 2023.02.13 |
---|---|
230210 Spring Boot Builder패턴(디자인패턴) (0) | 2023.02.10 |
230210 Spring Boot 뷰 선택-Thymleaf (0) | 2023.02.10 |
230210 Spring Boot 뷰 선택-JSP/JSTL (0) | 2023.02.10 |
230210 Spring Boot 설치, 프로젝트 생성, DB연결 (0) | 2023.02.10 |