본문으로 바로가기

스프링(Spring)의 특징과 의존성 주입(DI)

category Java/java 2020. 10. 20. 22:56

Spring Framework 사용

 : 스프링 프레임워크를 적용하면 자바코드 작성 부분을 줄일 수 있는 효과를 얻을 수 있다.

 : 하지만, 초기 프로젝트 셋팅이 다소 복잡하므로 충분한 연습이 필요하다

 : 스프링 프레임워크 사용은 xml을 이용하는 방법과 자바 어노테이션을 이용하는 방법 두가지로 구분할 수 있다.

 

스프링의 주요 특징

 : POJO 기반의 구성

 : 의존성 주입을통한 객체 간의 관계 구성

 : AOP(Aspect-Oriented-Programming) 지원

 : 편리한 MVC 구조

 : WAS의 종속적이지 않은 개발 환경

 

Maven

 : 자바 프로젝트의 빌드를 자동으로 해주는 도구

 : 개발자가 xml에 작성한 프로젝트 정보를 토대로 컴파일하고 라이브러리를 연결하는 등의 작업을 해주는 도구

 : Maven 서버를 통해 라이브러리를 다운받아 설정하는 작업도 수행한다.

 

POJO (Plain Old Java Object)

 : 자바 모델이나 기능, 프레임워크 등에 따르지 않고 홀로 독립적이며 단순한 기능만을 가진 객체들을의미한다.

 : 자바에서는 이러한 객체들을 Bean이라고 부른다.

 

 : POPO(PHP), POCO(닷넷 프레임워크), PODS(C++), POD(Perl) 등

 

 : 일반적인 JAVA코드를 이용해서 객체를 구성하는 방식을 그대로 스프링에서 사용할 수 있다.

 

 

의존성 주입(Dependency Injection)

 : 의존성 주입은 Spring에서 아주 중요한 개념이자 장점이다.

 : Bean 객체를 생성할 때 Bean 객체가 관리할 값이나 객체를 주입하는 것을 의미한다.

 : Bean 객체 생성 후 Bean 객체가 가질 기본값을 자바코드로 설정하는 것이 아닌

   Bean을 정의하는 XML 코드에서 정의하는 개념이다.

 

Setter 메서드를 통한 주입

 : Bean을 정의할 때 Bean 객체가 가지고 있을 기본 값을 생성자가 아닌 setter메서드를 통해 주입할 수 있다.

<bean id="빈즈" class="패키지.빈즈">

<bean id="아이디" class="패키지.클래스명">
	<!-- 데이터 타입 setter -->
	<property name="필드명1" value="값1">
    <property name="필드명2">
    	<value>값2</value>
    </property>
    
    <!-- 클래스 타입 setter -->
    <property name="필드명">
	    <ref bean="빈즈"/>
    </property>
</bean>

 

 

생성자를 통한 주입

 : Bean을 정의할 때 Constructor-arg태그를 이용해 주입하게 되면 생성자를 통해 주입할 수 있다.

<bean id="빈즈" class="패키지.빈즈">

<bean id="아이디" class="패키지.클래스명">
	<!-- 생성자의 매개변수가 기본 데이터 타입일 경우 -->
    <constructor-arg value="값" type="int" index="0"/>
    
    <!-- 생성자의 매개변수가 클래스(bean)일 경우 -->
    <constructor-arg>
    	<ref bean="빈즈"/>
    </constructor-arg>
</bean>

 : constructor-arg 속성

   - value = 기본 자료형 값과 문자열 값을 설정한다.

   - ref = 객체를 설정한다.

   - type = 저장할 타입을 설정한다.

               String은 java.lang.String으로 설정하며 생략 가능하다.

               String이 최우선 순위, int보다 double이 우선순위

   - index = 지정된 값을 주입할 생성자의 매개변수 인덱스 번호를 설정한다.( 0이 첫 번째)

 

 

컬렉션 주입

 : Bean을 정의할 때 주입해야 하는 멤버가 컬렉션인 경우 컬렉션이 관리할 객체를 초기에 설정할 수 있다.

 : 여기서는 List, Map, Set, Property를 사용하도록 한다.

 

 : set 계열은 중복된 값을 넣지 못함

 : 객체는 클래스 타입이 같은게 아니라 객체의 주소값이 같은것

   즉, 같은 객체의 주소값이 들어갈 수 없다.

 : ID가 똑같은 Bean을 두 개 이상 주입할 수 없게끔 되어있다.

   (Bean 태그로 해야한다. 중복X)

 

 : Map은 매개체하나의 정보를 저장하기 위해 사용된다.

 

 : Properties는 문자열로만 나온다.

<property name="이름">
	<props>
    	<prop key="키">내용</prop>
    </props>
</property>

 

자동 주입

 : Bean을 정의할 때 주입할 객체는 생성자를 통한 주입이나 setter를 통한 주입을 사용했다.

 : Spring에서는 객체를 주입할 때 자동으로 주입될 수 있도록 설정할 수 있다.

 : 자동주입은 이름, 타입, 생성자를 통해 할 수 있으며 autowire라는 용어로 부른다.

 

이름을 통한 주입

 : byName - 빈 객체의 프로퍼티 이름과 정의된 빈의 이름이 같은 것을 찾아 자동으로 주입한다.

 : 객체 타입만 가능(클래스 타입)

 : 정수형, 문자열은 직접 지정

타입을 통한 주입

 : byType - Bean 객체의 프로퍼티 타입과 정의된 Bean의 타입이 일치할 경우 주입된다.

 : 이때, 동일 타입의 빈이 두 개 이상 정의되어 있으면 오류가 발생한다.

 

생성자를 통한 주입

 : constructor - 생성자의 매개변수 타입과 정의된 Bean의 타입이 일치할 경우 주입된다.

 : 이때, 동일 타입의 빈이 두 개 이상 정의되어 있으면 오류가 발생한다.

 

기본 자동주입 타입 설정

<beans xmlns="
		...
        http://www.springframework.org/schema/context/spring-context.xsd"
default-autowire="타입"> <!-- xml에 beans에 설정 -->

	<bean id="" class="" autowire="no" /> <!-- default-autowire의 영향을 받지 않음 -->
</beans>

 : default-autowire로 현재 xml 파일에 기본 자동주입 타입을 정해줄 수 있다.

 : bean에 autowire="no"를 설정해주면 기본 자동주입 타입의 영향을 받지 않는다.

 

 

NameSpace 사용하기

 

: beans태그에 다음과 같은 xmlns를 추가해 주어야 함

 

 : 저 주소를 외워서 작성하기는 힘들기 때문에 이클리스에서 지원해주는 NameSpaces 를 이용합니다.

 

 : 자체적으로 지원해주는 NameSpcae 중 필요한 것을 체크하면 됩니다.

 : c와 p를 체크해 주었습니다.

 

 : 코드를 다음과 같이 바꿀 수 있습니다.

 : C - Constructor

 : P - Property

<bean id="" class="" c:필드명="값" p:필드명="값" />

 

 : Bean(클래스)를 받는 객체도 필드명-ref로 사용 가능합니다.

반응형

'Java > java' 카테고리의 다른 글

AOP (Aspect Oriented Programming)  (0) 2020.10.26
빈 xml 객체 생성 정리  (0) 2020.10.21
EL문, JSTL  (0) 2020.10.20
Model2 (MVC2)  (0) 2020.09.23
파일 업로드  (0) 2020.09.23