스프링 빈(Spring Bean)은 스프링 컨테이너에 의해 인스턴스화, 관리되고 조립되는 객체를 말한다. 스프링 빈은 스프링의 제어 역전 (IoC, Inversion of Control) 원칙에 의해 관리되며, 이를 통해 개발자는 직접 객체의 생명주기를 관리하는 대신 스프링 프레임워크가 그 역할을 대신 해준다.
인스턴스화 (Instantiation): 스프링 컨테이너는 빈 설정에 따라 객체를 생성한다.
초기화 (Initialization): 의존성 주입이 이루어진다.
사용 (Use): 애플리케이션의 실행 동안 빈은 사용된다.
소멸 (Destruction): 애플리케이션 종료 시 빈은 소멸된다.
스프링 빈은 여러 가지 스코프를 가질 수 있다!!!!!!!!!
스프링 빈은 주입될 수 있는 의존성을 가질 수 있다. 이 의존성은 주로 다른 빈이나 값이 될 수 있으며, 스프링 컨테이너는 빈이 생성될 때 이 의존성을 주입한다. 이를 통해 개발자는 객체 간의 관계를 설정하거나 구성 값을 제공할 수 있다.
특징
빈의 정의 방법
<bean>
태그를 사용하여 XML 파일 내에서 빈을 정의하고 구성한다. 이 방식은 스프링의 초기 버전에서 널리 사용되었으며, 명시적이고 세밀한 제어를 가능하게 함.<!-- applicationContext.xml -->
<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.MyClass">
<!-- 추가적인 속성 설정 -->
</bean>
</beans>
// MyClass.java
package com.example;
import org.springframework.stereotype.Component;
@Component
public class MyClass {
// 필드, 메소드 및 생성자
}
// AppConfig.java
package com.example;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AppConfig {
@Bean
public MyClass myBean() {
return new MyClass();
}
}
// DatabaseConfig.java
package com.example;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
@Configuration
@PropertySource("classpath:/com/example/database.properties")
public class DatabaseConfig {
@Bean
public DataSource dataSource(Environment env) {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setUrl(env.getProperty("database.url"));
dataSource.setUsername(env.getProperty("database.username"));
dataSource.setPassword(env.getProperty("database.password"));
return dataSource;
}
}
각 접근 방식은 특정 상황과 요구에 맞게 선택될 수 있으며, 때로는 하나의 애플리케이션 내에서 여러 가지 설정 방식이 혼합되어 사용되기도 한다.
@Component: 일반적인 컴포넌트와 동일한 역할을 하는 빈으로 선언한다.
@Service: 서비스 계층의 빈을 선언한다.
@Repository: 데이터 액세스 계층의 빈을 선언한다.
@Controller: 프레젠테이션 계층의 빈을 선언한다.
@Autowired: 의존성 주입을 위해 사용한다.
@Qualifier: 여러 빈 중에서 특정 빈을 주입하고자 할 때 사용한다.
스프링 빈은 스프링 프레임워크의 핵심으로, 객체의 생성과 관리를 통해 애플리케이션의 설정과 구성을 단순화합니다. 이를 통해 개발자는 비즈니스 로직에 더 집중할 수 있으며, 애플리케이션의 유지보수성과 확장성이 향상됩니다. 스프링 빈을 효과적으로 사용함으로써, 애플리케이션 컴포넌트 간의 결합도는 낮추고, 응집력은 높여, 더 견고하고 유연한 애플리케이션을 구축할 수 있다.