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 |