생성자 인젝션
의존성 : 객체와 객체의 결합 -> Spring이 관리하게되면, 결합도가 낮아짐 -> 유지보수 용이
의존성 주입(Dependency Injection, DI) : Spring IoC 컨테이너가 관리
 1) 생성자 인젝션
 2) Setter 인젝션
사용방법 1
기존 클래스 private 변수 set설정
-> applicationContext.xml의 객체 매핑을 하고 private 변수의 내용은 태그바디 안에
<property name ="변수명" value ="값">
<property name ="변수명" ref ="객체">
사용방법 2
nameSpaces에 p 추가
<bean class = "객체명" id ="객체를 부를 이름" p:클래스명-ref "beanId" p:변수명="변수">

수행순서
부모 bean 객체생성 -> setter 메소드 모두 수행 -> 다음 bean 수행
주의사항
기본생성자가 필수로 있어야 한다! 그리고 setter가 있어야 한다!
가지고 있는 setter 메소드와 수를 맞춰야 한다.

Collection Bean
사용방법 : 해당하는 객체를 만든다.
applicationContext.xml에서 객체 매핑후 각각의 컬렉션에 따라 사용함
List

 

<bean>
		<property name ="list">
			<list>
				<value>값1</value>
				<value>값2</value>
				<value>값3</value>
			</list>
		</property>
	</bean> 
	Map
	<bean>
		<property name ="map">
			<map>
				<entry>
					<key>
						<value>키1</value>
					</key>
					<value>값1</value>
				</entry>
				<entry>
					<key>
						<value>키1</value>
					</key>
					<value>값2</value>
				</entry>
				<entry>
					<key>
						<value>키1</value>
					</key>
					<value>값3</value>
				</entry>
			</map>
		</property>
	</bean>

 

'Spring' 카테고리의 다른 글

applicationContext.xml 의 역할  (0) 2021.12.05
Spring 설치, 적용, 사용  (0) 2021.09.28
SpringFramework BeanFactory  (0) 2021.09.27

IoC 지원 스프링 컨테이너의 설정파일
 -> 객체 결합관리·생성

form.xml 의 역할
spring을 사용할때 사용하는 jar 파일 관리

applicationContext.xml
 class는 필수속성 나머지는 선택속성
 - class : 어떤 객체를 사용할것인가
 - id : class 객체를 어떻게 부를것인가
 - init-method : 객체를 생성하고 바로 수행하는 함수
 - destroy-method : 객체를 지울때 수행하는 함수
 - lazy-init : true면 초기 객체생성 X, false면 초기 객체생성 O
 - scope : singleton(defalut) 으로하면 하나의 객체를 프로젝트에서 계속 유지, prototype 으로 하면 객체를 새로 만들어줌
 개발자가 객체를 관리하게 되면 모르는 사이에 객체가 쌓인다
 => 하나만 생성해서 써도 괜찮은 객체들
 컨테이너가 객체를 관리해주는 IoC를 사용하는 것 = 싱글톤 패턴
 
<bean>의 태그 바디에 <constructor-arg ref="객체이름"> 또는 <constructor-arg value="값"> 으로 생성자에 필요한 요소들을 넣어줄수 있다.
 ==>DI 의존성 주입 Dependency Injection
 ===> Setter Injection 세터주입
 ===> Constructor Injection 생성자 주입


'Spring' 카테고리의 다른 글

생성자 인젝션  (0) 2021.12.05
Spring 설치, 적용, 사용  (0) 2021.09.28
SpringFramework BeanFactory  (0) 2021.09.27

* Spring 설치 (플러그인 설치) *

help -> Eclipse Marketplace -> Spring 검색 -> Spring tools 3 3.9.14 install

install new software -> add -> name: STS Location: https://dist.springsource.com/snapshot/TOOLS/nightly/e4.18 add -> select all -> next

이클립스를 재시작하라는 안내문구 -> 재시작

 

 

* 설치확인 *

1. window - preference 메뉴에 Spring 있으면 설치완료

2. explorer 우클릭 - new 메뉴에Spring legacy Project 있는지 확인

 => 없을경우 Marketplace에서 Spring Tools 3 Add-On for Spring Tools 설치

 

 

* 적용 *

SpringLagacyProject - next - ProjectName입력 - Spring MVCproject선택후 -next - level설정 (보통 3단계 ex> com.kim.app) - 기본적으로 controller를 제공

 

cmd창에서 java -version  명령어로 자바 버전 확인 -

프로젝트 우클릭 properties - ProjectFacets 에서 자바 버전 설정, Runtimes들어가서 서버 연결 하고 Apply - Apply and Close

 

 

src/main/resources 에는 log4.xml만 있도록

webapp - WEBINF web.xml있는지확인

           Spring, View 제거

 

web.xml

wep-app 루트 엘리먼트를 제외한 나머지 요소 삭제

 

pom.xml

 

<org.springframework-version>4.2.4.RELEASE</org.springframework-version>

 

로 변경 후 - Project 우클릭 - maven -  updateProject -

완료후 Libraries에서 Maven Dependency - spring~4.2.4로 변경되었는지 확인

 

스프링
 IoC 컨테이너
 -> 객체를 어떻게 관리할지에 대한 설정파일(.xml)이 필요
 -> Servlet컨테이너도 IoC컨테이너
1. 서블릿 클래스 -- 인스턴스화 new --> 객체화
2. web.xml


 * 사용법 *
 src/main/resources - 우클릭 - new - other - Spring Bean Configuration File : applicationContext.xml - next - finish
-> 스프링 컨테이너가 관리할 클래스를 등록 (매핑) - <bean></bean> 사용
 applicationContext.xml - 하단 탭 Namespaces - 사용할때마다 추가


 * 사용*
 test.Test 생성 - syso("기본생성자 호출됨") 
 <bean class="test.Test" id = "test" /> <!-- 클래스에 파란색 S 가 추가되는데 이건 스프링 컨테이너에 관리되고있다는 뜻! -->
 <!-- Test test = new Test(); 와 같다 -->

 test.Client
AbstractApplicationContext factory = new GenericXmlApplicationContext("applicationContext.xml");

 1. 스프링 컨테이너 동작
 2. 객체를 요청(Look up)하면, 해당 객체를 준다.
 - 현재 bean에 등록된 모든 클래스에 대한 객체를 미리 만들어 놓는다!
 - pre-loading 즉시 로딩!
 - 즉시 로딩 사용 안함 설정가능 (lazy loading : 지연 로딩)
Test t = (Test)factory.getBean("test");
t.print();
 3. 스프링 컨테이너 종료
factory.close();

'Spring' 카테고리의 다른 글

생성자 인젝션  (0) 2021.12.05
applicationContext.xml 의 역할  (0) 2021.12.05
SpringFramework BeanFactory  (0) 2021.09.27

스프링 프레임워크
 -> 설정사항이 많음
순서를 중요하게 기억!

프레임워크
 -> SW관점에서 어플리케이션의 전반적인 구조, 코드를 제공해주는 것
 -> 유지보수 과정에서 일관성이 망가짐

 장점 : 유지보수에 들어가는 비용이 절감
 유지보수 과정에서 아키텍처의 변형이 발생하지 않음 == 일관성 유지
 개발자는 비즈니스 로직만 구현하면됨 -> 개발 시간 감소
 개발자의 역량이 획일화



 스프링 프레임워크
  별도의 비용 XXX
다른 프레임워크와 연동이 용이

IoC와 AOP를 지원하는 경량(POJO)의 컨테이너 프레임워크

 장점 :
 - 경량(간단함)
   POJO를 사용

 - 컨테이너
   객체의 생성 및 객체 관리를 담당
   Servlet 컨테이너를 지금까지 사용해왔었음 -> 톰캣, 일반적으로 서번안에 포함되어 배포함
   => 스프링도 일종의 컨테이너! 객체간의 의존관계를 관리

 - IoC (제어의 역행 Inversion of Control)
   지금까지는 객체간의 결합을 개발자가 관리 -> 높은 결합도
   "낮은 결합도" 유지를 위해 컨테이너가 대신처리하게함!
의존관계를 변경해야 할때, 자바코드를 수정 ex) DAO의 메소드 인자를 VO로 사용
IoC가 적용되면 컨테이너가 객체를 생성하므로, 자바코드가 변경 XX

 - AOP(Aspect Oriented Programming 관점지향 프로그래밍) 방법론
   지금까지는 객체지향 프로그래밍(OOP)으로, 로직을 프로그래밍하고 있었음!
   주 업무 + 부가적인 업무
   핵심로직 계좌이체 입출금 이자계산
   부가적 로직 로직----------------------------
보안----------------------------
트랜잭션------------------------
  협업불리, 유지보수 어려움, 재사용 불리
  모든 로직을 핵심로직, 공통 로직으로 분리 == 응집도가 높아짐!


  사용자 -- web.xml --> 톰캣 <-> 디스패처, Controller -- 포워딩 --> View
  Controller 변경될때, 변경될 코드를 줄여나가는 것 == 결합도를 낮추는것 => 스프링을 사용하는 목표!
  설정파일로 조작할 수 있다! -> 의존성 주입(DI)

  [ IoC 컨테이너 ]
  서블릿은 자바로 구성된 클래스
  객체화 == 인스턴스화
  1. 서블릿 객체를 누가 만들어줬을까?
  2. doGet() 메소드를 어떻게 호출함?
  => Servlet Container
  개발자 : 서블릿 클래스 제작, web.xml 설정파일 작성
  1) web.xml 설정파일들을 loading(적재)
  2) Servlet Container 준비
  3) Client -- *.do GET --> 서블릿컨테이너
  4) 설정파일을 보고, 매핑된 서블릿 클래스를 찾아서 객체를 생성
  5) doGet() 메소드를 호출, 결과를 다시 전송(response)


 [ 낮은 결합도 ]
1. 높은 결합도의 코드
결합도 coupling -> 유지보수가 어려움
2. 결합도를 낮춰보자 -> 1
설계를 통한 상속관계 정의 (인터페이스)
형변환 -> 다형성(Polymorpism)
: 객체를 교체하는데에 용이
3. 결합도를 낮춰보자 -> 2
BeanFactory를 이용
: 디자인 패턴의 일종
클라이언트가 사용할 객체 생성 코드를 캡슐화
Person - Phone의 결합을 낮춰줌
-> 클라이언트는 필요한 객체를 BeanFactory에 요청
클라이언트가 사용할 객체를 생성하여 반환해주는것은 BeanFactory!











'Spring' 카테고리의 다른 글

생성자 인젝션  (0) 2021.12.05
applicationContext.xml 의 역할  (0) 2021.12.05
Spring 설치, 적용, 사용  (0) 2021.09.28

+ Recent posts