스프링 빈, 자바 빈 이란?

Jae Hun Lee·2023년 2월 15일
0

스프링 빈, 자바 빈 이란?

자바 빈

  • 자바 빈은 자바 객체를 만드는 규약입니다. 자바 빈은 다른 클래스에서 재사용 가능한 자바 객체를 만들기 위한 규약이며, 이를 만족하는 자바 객체를 "자바 빈"이라고 부릅니다.
  • 자바 빈은 일반적으로 기본 생성자를 생성하고, 멤버 변수를 private로 선언하고, getter와 setter 메서드를 통해서만 접근 가능합니다
  • DTO, VO와 비슷한 역할을 합니다.

예시

public class Person {
    private String name;
    private int age;

    public Person() {}

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

스프링 빈

  • "빈"은 객체를 말합니다. 스프링 빈은 스프링 프레임워크에서 생성되고, 관리되는 객체를 의미합니다.
  • 스프링 빈은 스프링 컨테이너에서 관리됩니다. 스프링 컨테이너는 스프링 빈을 생성하고, 필요에 따라 의존성 주입을 수행하고, 스코프에 따라 관리합니다. 또한, 스프링 빈은 싱글톤으로 생성되는 것이 기본적입니다.
  • 스프링 빈은 싱글톤으로 생성되기 때문에, 여러 개의 인스턴스를 생성하지 않고, 한 번 생성한 빈을 재사용합니다..
  • 스프링 빈을 사용하면 다른 클래스에서 빈을 쉽게 주입받아 사용할 수 있습니다. 스프링은 의존성 주입(Dependency Injection)을 통해 빈을 주입하며, 이를 통해 코드의 유연성과 확장성을 높일 수 있습니다.

스프링 빈 등록방법

  • xml을 통한 빈 등록
  • @Component 에노테이션을 통한 빈 등록
  • @Controller, @Service, @Repository 에노테이션을 통한 빈 등록
  • @Configuration, @Bean 에노테이션을 통한 빈 등록

xml을 통한 빈 등록

  • applicationContext.xml 파일에서 myBean이라는 id를 가지는 MyBean 클래스의 인스턴스를 생성하고, name 속성을 "myBean"으로 설정합니다.
<beans xmlns="http://www.springframework.org/schema/beans"
       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="myBean" class="com.example.MyBean">
    <property name="name" value="myBean"/>
  </bean>
  
</beans>

JAVA 코드를 통한 빈 등록

@Configuration
public class AppConfig {
  
  @Bean
  public MyBean myBean() {
    MyBean bean = new MyBean();
    bean.setName("myBean");
    return bean;
  }
  
}
@Service
public class UserService {
  @Autowired
  private UserRepository userRepository;
  
  public User createUser(String name, int age) {
    User user = new User();
    user.setName(name);
    user.setAge(age);
    return userRepository.save(user);
  }
  
}
profile
기록을 남깁니다

0개의 댓글