공부내용 목차 정리
1. 의존관계 주입의 조건
2. 스프링 Ioc 용어
3. Bean 객체설정방법
--xml , 자바클래스로 설정
4. Bean 객체 사용법
1. 의존관계 주입의 조건
클래스모델이나 코드에는 런타임 시전의 의존관계가 드러나지 않는다. 인터페이스에만 의존하고 있어야한다.
런타임시전의 의존관계는 컨테이너나 팩토리 같은 제 3의 존재가 결정해야한다. = xml파일
의존관계는 사용할 오브젝트에 대한 래퍼런스들 외부에서 제공해줌으로써 만들어진다.
어플리케이션 컨텍스트 = IOC Container, Bean Factory , Spring
DI 를 적용하려면 각 객체들을 생성 및 관리할 조립기가 필요하다. 개발자가 직접만들수도 있지만, 조립할 객체가 증가하고 의존관계가 복잡해 질수록 조합기를 만드는일 또한 어렵다. DI패턴을 지원해 주는 프레임워크를 사용하는 것을 권장한다.
getBean 메서드로 조회를 해서 xml 에서 객체를 반환한다.
2. 스프링 Ioc 용어
Inversion of Control (IoC)
Component dependecncy resolution, configuration 및 lifecycle 을 해결하기 위한 디자인 패턴
특정작업을 수행하기 위해 필요한 다른 컴포넌트를 직접 생성하거나 획득하기보다는 의존성들을 외부에 정의하고 컨테이너에 의해 공급받는 방법으로 동작한다.
장점
- 클래스/컴포넌트의 재사용성 증가
- 단위테스트 용이
- Assemble과 Configure 를 통한 시스템구축용이
빈(bean) : 스프링이 Ioc 방식으로 관리하는 오브젝트를 말함
빈팩토리 (Bean factory) : 빈을 등록, 생성, 조회, 반환등 빈을 관리하는 기능을 담당한다. 보통은 이 빈 팩토리를 바로 사용하지 않고 이를 확장한 애플리케이션 컨텍스트를 이용한다. 기본 인터페이스명은 (Bean factory)
Application Context
스프링 컨테이너가 빈을 관리한다. 다양한 추가 기능을 제공한다. 일반적인 경우에는 빈팩토리 (Bean factory) 보다 확장시킨 Application Context를 사용한다. ClassPathxmlApplication Context 을 사용하면 스프링 컨테이너가 만들어진다.
이것을 더 확장시킨 것은 webApplicationcContext 이다. 스프링을 이용하여 웹프로젝트를 할때 스프링 mvc 패턴을 사용할 때 사용한다. 컨테이너가 일반 애플리케이션. 웹애플리케이션이 있다.
객체를 관리하는 컨테이너
4. Bean 객체설정방법
- xml설정파일의 Bean 의 기본속성으로 설정
id, name 속성을 둘 중하나 적어준다.
class 필수요소로 빈객체의 실제 타입이다.
scope : 빈객체의 life scope 를 지정한다. default 속성이 싱글톤이다.
singleton : 컨테이너는 하나의 빈객체만 생성
prototype : 요청할때 마다 빈객체를 생성한다.
ruquest : HTTP request시 마다 빈객체를 생성한다.
session : HTTPSession 단우로 빈객체를 생성한다.
- 클래스 설정에 필요한 어노테이션
@Configuration : 설정용 클래스에 선언
@Bean : 빈객체용 메서드에 선언
@autowired :
어노테이션적용필수여부를 지정해서 해당빈이 없으면 자동설정 안하도록 한다. @Autowired(required=fasle)
@Qualifier: 동일 타입의 빈들 중에서 name에 해당하는 특정 빈을 주입한다.
@Required
- 반드시 의존 주입되어야 하는 프로퍼티용 setter 메서드에 사용한다.
@Component
-xml 에 <bean> 을 설정하지 않아도 자동검색되어 빈으로 등록될 클래스에 선언한다.
단, xml <context:component-scan base-package="자동검색할 패키지명"/> 을 지정한다.
빈의 name을 지정하려면 어노테이션 속성값을 지정한다.
어노테이션 기반 설정방법
@Autowired 어노테이션
어노테이션을 사용하기 위해서 태그 추가 하기
<context:annotation-config/>
xml 파일에 Bean에 id와 class 추가
<bean id="pDAO" class="com.my.product.dao.ProductDAOOracle"></bean>
<bean id="pService" class="com.my.product.service.ProductService">
ProductService 클래스에 @Autowired 어노테이션을 추가
public class ProductService {
@Autowired
private ProductDAOInterface dao;
// 클래스 의 관계(클래스 다이어그램)에서는 인터페이스를 의존한다.
// 객체들의 관계(객체다이어그램) 에서는 ProductDAOInterface가 아닌 ProductDAOOracle 을 의존한다.
public ProductService() { // 생성자
// dao = new ProductDAOOracle(); //1.서비스가 dao를 의존하는 방식 has a 관계
}
SpringApplicationWithXml 파일에 service 에 대한 getBean을 하여 가져오기
public class SpringApplicationWithXml {
public static void main(String[] args) {
ProductService service = context.getBean("pService", ProductService.class);
"pService", ProductService.class 는 첫번째 참조하고 있는 pService가 두번째 인자로 설정한 클래스 타입인가? 를 나타낸다. 그것을 service 변수에 참조한다.
@Required
- 반드시 의존 주입되어야 하는 프로퍼티용 setter 메서드에 사용한다.
product.java
public class Product {
private String prodNo;
private String prodName = "상품이름";
private int prodPrice;
}
config.xml
<bean id = "ppp" class="com.my.poduct.vo.Product" >
<property name = "prodName" value = "커피 9"></property>
</bean>
SpringApplicationWithXml
Product p3 = context.getBean("PPP", Product.class);
System.out.println("p3=" + p3);
product.java 에는 proNo, prodName 은 null과 0으로 나타난다. 반드시 나올 수 있게 하기 위해서 product.java 에@required 를 사용한다.
product.java ( 스프링4버전까지는 사용가능)
@Required
public void setProdName(String prodName) {
this.prodName = prodName;
}
@Required
- 반드시 의존 주입되어야 하는 프로퍼티용 setter 메서드에 사용한다.
@Component
기존의 bean 태그를 사용하지 않는다.
<bean id="pService" class="com.my.product.service.ProductService">
대신에 아래의 태그를 추가 한다.
<context:component-scan base-package="com.my.product.service"/>
Component 어노테이션을 사용한다.
@Component
public class ProductService {
특정값을 지정하기 위해서는 아래와 같이 사용한다.
@Component("pService")
서비스에 관한 것이기 때문에 상위 @Component 를 사용하여도 되지만 service를 사용하여 가독성을 높일 수 있다.
@service 로 등록해도 된다.
@Service("pService")
컨테이너를 구동시키는 방법
public static void main(String[] args) {
//String configLocation = "config.xml";
// ApplicationContext 객체생성 - 스프링컨테이너 구동된다.
// 그러면 cinfih.xml 에 있는 객체가 만들어지고 관리가 된다. ,
// pDOA를 인자로 생성함
//ApplicationContext context = new ClassPathXmlApplicationContext(configLocation);
//경로가 config 파일안에있는 config.xml로 바꾸기
String configLocation = "D:\\230\\myWeb\\di\\config\\config.xml";
ApplicationContext context = new FileSystemXmlApplicationContext(configLocation);
위의 예제는 config.xml 파일을 만들었을 때와 경로를 config.xml폴더를 만들고 그 안에 config.xml 을 넣어둔 것의 방법을 나타내었다.
주석처리한 부분에 ApplicationContext context = new ClassPathXmlApplicationContext(configLocation); 을 하게 되면 기본적으로 config.xml 파일에서 그 안에 있는 객체가 관리 된다.
파일안에 xml파일을 넣어두고 관리하고자 할 때에는 경로를 표기해두고 ApplicationContext context = new FileSystemXmlApplicationContext(configLocation); 로써 사용한다.
컨테이너를 구동시키는 방법은 아래의 Bean 객체 사용법에서 설명한다.
5. Bean 객체 사용법
'스프링' 카테고리의 다른 글
[22.01.06] 스프링 어노테이션 등록 (0) | 2022.01.06 |
---|---|
[서블릿과 JSP ] 3. URL 패턴 , EL표기 (0) | 2021.12.04 |
[서블릿과 JSP ] 2 . 유효범위와 속성 (0) | 2021.12.01 |
서블릿과 JSP (변환과정, JSP기본객체) (0) | 2021.12.01 |
[스프링] Http 요청과 응답 (HttpServletRequest , HttpServletResponse) (0) | 2021.10.16 |