티스토리 뷰

프로그래밍/Web

Spring Bean

국윤창 2018. 1. 27. 01:33

1. Spring Bean이란

자주 사용하는 객체를 singleton으로 만들어 놓고 어디서든 불러쓸 수 있도록 한 것.

Java에서도 bean은 재사용이 가능하게 만들어진 component이다.


2. Spring boot에서 bean 쓰기

spring에서는 어떤 클래스를 bean으로 두려면 xml에서 아래와 같이 설정을 해야한다.

<bean id="className" class="com.example.demo.ClassName">
    <property ...>
</bean>

하지만 spring boot에서는 xml설정 대신 annotation을 이용하여 설정하므로 아래 코드와 같이 클래스를 작성한다.

@Configuration
public class ConfigClass
{
    @Bean
    public BeanClass beanClass()
    {
        return new BeanClass();
    }
}

위와 같이 작성하면 BeanClass라는 클래스가 bean으로 등록된다.


Autowired annotation은 @Component나 위와 같이 @Bean을 통해서 bean으로 된 객체를 classpath scanning을 할 때 자동으로 injection해준다.


그래서 아래 코드와 같이 사용하여 bean으로 등록한 클래스를 사용할  수 있다.


public class BeanClass
{
    public String getName() {
        return "BeanClass";
    }
}
@Controller
public class TestController {
    @Autowired
    private BeanClass beanClass;

    @RequestMapping(value="/beanTest", method=RequestMethod.GET)
    public String beanTest(Model model)
    {
        model.addAttribute("beanName", beanClass.getName());

        return "beanTest";
    }
}

그 다음 테스트를 위한 beanTest라는 이름의 view(html)을 작성한다.

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8"/>
    <title>Bean Test</title>
</head>
<body>
    <h1>Bean Test</h1>
    <!--/*@thymesVar id="beanName" type="String"*/-->
    <p th:text="'Bean Name: " + ${beanName}"/>
</body>
</html>

실행하고 localhost:8080/beanTest로 접속했을 때 아래 그림 1처럼 화면이 뜨면 성공이다.

Bean Test 결과[그림 1] Bean Test 결과

위의 @Autowired는 bean으로 등록된 클래스를 자동으로 주입해주는 spring의 annotation이다.


다음번엔 bean과 관련된 annotation에 관해서 알아봐야겠다.

'프로그래밍 > Web' 카테고리의 다른 글

DAO, DTO, Service  (4) 2018.01.28
Annotation과 Bean  (2) 2018.01.27
Spring Bean  (2) 2018.01.27
Spring MVC 맛보기  (0) 2018.01.21
IntelliJ로 Spring 프로젝트 생성  (0) 2018.01.21
Spring 특징  (0) 2018.01.21
댓글
  • 프로필사진 Jodu 좋은 자료 감사합니다.
    Spring에서 Bean을 Default로 Singleton으로 만들기는 하나 Prototype형태로 만들어 호출 시 새로운 객체를 만들어 내는 방법으로도 사용할 수 있는걸로 아는데요.
    Spring에서 Bean을 만들어서 사용하는 이유는 DI(의존성 주입)을 하기 위해서 사용합니다.
    앞에서 설명하신 "자주 사용하는 객체를 singleton으로 만들어 놓고 어디서든 불러쓸 수 있도록 한 것" 보다는 DI를 위해서 사용하는 것으로 설명 해주시는게 더 좋지 않을까요?ㅎㅎ
    2019.09.06 10:59 신고
  • 프로필사진 국윤창 안녕하세요 Jodu님 ㅎㅎ
    맞습니다. 저도 스프링이 Bean을 사용하는 이유가 DI를 위한 컨텍스트를 관리하기 위해서라고 생각합니다. 그리고 싱글톤 외에 말씀해주신 프로토타입같은 Bean 스코프를 제공해주고 있구요.
    그리고 덧 붙이자면 DI를 사용하는 이유는 관심사를 분리하고 객체지향적인 설계를 할 수 있도록 도와주는 것이라고 생각합니다.

    제가 웹을 처음 공부할 때 작성한 글이라 잘 모르고 쓴 정보가 많아보이네요... 시간 나는대로 곧 수정 해야겠습니다 ㅎㅎ
    댓글 감사합니다 좋은 하루 보내세요^^
    2019.09.06 14:10 신고
댓글쓰기 폼