- SPRING
- 원하는 부분만 가져다 사용할 수 있도록 모듈화가 잘 되어있다.
- IOC컨테이너다(제어의 역전) : 개발자가 제어하지 않고 남에 의해 제어되는 경우
- DI와 인터페이스 지향을 통한 느슨한 결합도
- 선언적으로 트랜잭션을 관리할 수 있다.
- 완전한 기능을 갖춘 MVC Framework를 제공한다.
- AOP와 공통 규약을 통한 선언적 프로그래밍
- 템플릿을 통한 상투적인 코드 축소
- 스프링은 도메인 논리 코드와 쉽게 분리될 수 있는 구조를 가지고 있다.
- POJO를 이용한 가볍고 non-invasive(비 침투적) 개발
- POJO : 다른 라이브러리 및 소스에 의존적이지 않은 CLASS
- 트랜잭션을 관리할 수 있다.
- AOP와 공통 규약을 통한 선언적 프로그래밍
- 원스-스탑-숍(One-Stop-Shop): 모든 과정을 한꺼번에 해결하는 상점
- EJB : 생성, 관리, 컨테이너
- Bean : 인스턴스생성, 관리 , 컨테이너에 의해 관리되는 객체(개발자가 직접 생성하는 객체는 Bean이 아니다)
- Spring Container
- 인스턴스의 생명주기를 관리한다.
- 생성된 인스턴스들에게 추가적인 기능을 제공한다.
- IOC 컨테이너(중요함!!!)
- BeanFactory <- ApplicationContext <- WebApplicationContext
- BeanFactory
- 빈 객체에 대한 생성과 제공을 담당
- 단일 유형의 객체를 생성하는 것이 아니라, 여러 유형의 빈을 생성,제공
- 객체 간의 연관 관계를 설정, 클라이언트의 요청 시 빈을 생성
- 빈의 라이플 사이클을 관리
- 필요할때 마다 빈 정보를 메모리에 로딩함
- ApplicationContext
- BeanFactory가 제공하는 모든 기능 제공
- 엔터프라이즈 애플리케이션을 개발하는데 필요한 여러 기능을 추가함
- L18N, 리소스 로딩, 이벤트 발생 및 통지
- 컨테이너 생성시 모든 빈 정보를 메모리에 로딩함
- WebApplicationContext
- 웹 환경에서 사용할 때 필요한 기능이 추가된 애플리케이션 컨텍스트
- 가장 많이 사용하며, 특히 XmlWebApplicationCOntext를 가장 많이 사용
- POJO
- Plain Old Java Object(다른 클래스에게 종속적이지 않은 클래스)
- DI
- 의존성 주입(A가 B를 가진다)
- 클래스 사이의 의존 관계를 빈설정 정보를 바탕으로 컨테이너가 자동으로 연결해주는 것
- ApplicationContext
- AnnotationConfigApplicationContext - 하나 이상의 Java Config 클래스에서 스프링 애플리케이션 컨텍스트를 로딩(최신프로젝트에 사용 추천)
- AnnotationConfigWebAlicationContext - 하나 이상의 Java Config 클래스에서 웹 애플리케이션 컨텍스트를 로딩(기존프로젝트들이 많이 되어있음)
- ClassPathXmlApplcationContext - 클래스패스에 위치한 xml파일에서 컨텍스트를 로딩
- FileSystemXmlApplicationContext - 파일 시스템에서 지정된 xml파일에서 컨텍스트를 로딩
- XmlWebApplcationContext - 웹 애플리케이션에 포함된 xml파일에서 컨텍스트를 로딩
- BEAN
- 기본 scope는 싱글톤인데 메모리가 올라갈때 생성한다.(하나의 객체)
- scope="prototype" 가 있으면 필요 할때 마다 생성된다.(매번 새로운 객체가 생성)
- XML
- Data를 표현한다.
- 문서의 형식을 지정하는 방법
- 자주쓰는 네임스페이스는 생략 가능하다.
- xml문서를 읽어들이는 파서는 네임스페이스(ns)에 따라서 스키마에 맞는지 검사를 한다.
<상품:상품 xmlns:상품="url주소" xmlns:회사="url주소">
<상품:이름>맥북프로</상품:이름>
<상품:가격>200</상품:가격>
<회사:회사>
<회사:이름>apple</회사:이름>
<회사:가격>30</회사:가격>
</회사:회사>
</상품:상품>
- schemaLocation에 설정된 주소에 설정된 정보에 따라서 파서가 작동한다.
- JUNIT Annotation
- @RULE
- System.out.println(값) 으로 출력한 결과를 가질 수 있는 객체
- @RunWith(SpringJUnit4ClassRunner.class)
- junit이 실행하면서 @Test할때 내부적으로 ApplicationContext를 생성한다.
- Spring Annotation
- @ContextConfiguration
- ApplicationContext가 생성할때 '클래스이름-context-xml'파일을 설정파일로하여 읽어들이도록한다. ex) 클래스명-context.xml
- @Autowried
- 자동으로 DI (의존성 주입)
- ApplicationContext가 관리하는 Bean중에서 해당 타입의 객체를 주입
- @RunWith(SpringJUnit4ClassRunner.class) 와 @ContextConfiguration을 설정을 CNamespaceReferenceTest class에 선언되어 있다면 ApplicationContext가 context = new ClassPathXmlApplicationContext("CNamespaceReferenceTest-context.xml") 와 같다.
- Bean xml 설정
- bean설정에서 위치는 상관이없다. 스프링이 자동적으로 필요한 인스턴스를 만들어 준다
- -ref : 참조하는 래퍼런스(객체)를 참조한다. / _0 : 1번째 파라미터
<!-- bean설정에서 위치는 상관이없다. 스프링이 자동적으로 필요한 인스턴스를 만들어 준다. -->
<!--
BlankDisc compactDisc = new(BlankDisc("Sgt. Pepper's Lonely Hearts Club Band", "The Beatles");
c:_0 : 1번재 파라미터 , c:_1 : 2번째 파라미터
-->
<bean id="compactDisc" class="soundsystem.BlankDisc"
c:_0="Sgt. Pepper's Lonely Hearts Club Band"
c:_1="The Beatles" />
<!--
CDPlayer cdPlayer = new CDPlayer();
c:
-->
<bean id="cdPlayer" class="soundsystem.CDPlayer"
c:_-ref="compactDisc" />
- <constructor-arg> 태그는 생성자에 값을 넣는다.(자동으로 선언한 순서대로 파라미터에 순서에 맞게 값을 넣어준다)
- <constructor-arg> 안에 <list> 태그는 자동으로 array를 만들어준다.
<constructor-arg>
<list>
<value>Sgt. Pepper's Lonely Hearts Club Band</value>
<value>With a Little Help from My Friends</value>
</list>
</constructor-arg>
- p:파라미터명 은 property name="파라미터명" 을 사용한것과 같다.
- setTitle , setArtist 메소드에 값이 적용된다.
p:title="Sgt. Pepper's Lonely Hearts Club Band"
p:artist="The Beatles">
<property name="title" value="Sgt. Pepper's Lonely Hearts Club Band" />
<property name="artist" value="The Beatles" />
- Util을 통해 간편하게 사용 가능하다.
- schemaLocation은 에디터가 자동완성기능등 인식을 잘하게 하기 위함이다.
- xsi:schemaLocation 의 뜻은 'http://www.springframework.org/schema/beans' 는 'http://www.springframework.org/schema/beans/spring-beans.xsd' 에 매핑되고 'http://www.springframework.org/schema/util' 는 ' http://www.springframework.org/schema/util/spring-util.xsd' 에 매핑된다는 뜻이다.
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util.xsd">
<!--
List<String> trackList = new ArrayList<>();
tracklist.add("Sgt. Pepper's Lonely Hearts Club Band");
-->
<util:list id="trackList">
<value>Sgt. Pepper's Lonely Hearts Club Band</value>
<value>With a Little Help from My Friends</value>
<value>Lucy in the Sky with Diamonds</value>
<value>Getting Better</value>
<value>Fixing a Hole</value>
<value>She's Leaving Home</value>
<value>Being for the Benefit of Mr. Kite!</value>
<value>Within You Without You</value>
<value>When I'm Sixty-Four</value>
<value>Lovely Rita</value>
<value>Good Morning Good Morning</value>
<value>Sgt. Pepper's Lonely Hearts Club Band (Reprise)</value>
<value>A Day in the Life</value>
</util:list>
- 스프링과 강력한 관계를 맺고 작동시킬려고 할때 스프링에서 제공 해주는 기능을 사용
- implements BeanNameAware
- implements BeanFactoryAware
- BeanFactory에서 bean을 가지고오려고 할때 사용
0 개의 댓글:
댓글 쓰기