Spring - CoreContainer
IOC
Inversion OF Control
의존성 역전의 구조 - 의존성 생성의 권한이 프레임워크로 넘어갔을 때
마이배티스 썼을때 꼭 마이배티스가 써라는대로 했어야했음 대부분의 파일은 설정파일이있는데 설정파일이 명하는대로 해야함 주도권이 나한테 없음 .( 프레임워크)
반면에 라이브러리(lang3)은 주도권이 나한테있다 java안에서 라이브러리가 돌아가고 설정파일이없음 내맘대로 쓸수있음!
프레임워크와 라이브러리의 차이점** 알기
-의존성역전의구조가 제공이 되냐 안되냐이다.
– Framwork 와 Library 의 차이
• Framework : 소프트웨어의 특정 문제를 해결하기 위해 상호협력하는 클래스와 인터페이스의 집합.
1. 특정 개념들의 추상화를 제공하는 클래스나 컴포넌트들로 구성
2. 상기의 추상적 개념들이 문제를 해결하기 위해 협업하는 방법을 정의함.
3. 재사용 가능한 컴포넌트들의 집합
4. 보다 수준 높은 패턴들로 조직화된 구조.
• Library : 소프트웨어에서 호출할수 있는 함수와 루틴들로 구성
Spring Framework
– Spring이라는 이름의 기원은 전통적인 J2EE를 "겨울"에 빗대어 "겨울" 후의 "봄"으로 새로운 시작을 의미함
– EJB가 제공했던 대부분의 기능을 일반 POJO(Plain Old Java Object)를 사용하여 개발할 수 있도록 지원함
– 엔터프라이즈 어플리케이션 개발의 복잡성을 줄이기 위한 목적으로 개발됨
Introduction
– JavaEE 기반의 어플리케이션 개발을 쉽게 해주는 오픈 소스 어플리케이션 프레임워크
– 전체 애플리케이션을 체계적으로 엮어낼(wire up) 수 있는 프레임워크
– POJO기반의 개발을 통해 의존적인 코드 없이 빈들에 대한 생명주기를 관리 //결합력이 없다는 뜻
– 트랜잭션 관리를 위한 일관된 방법을 제공
– O/R mapping : Hibernate, iBatis, JDO등과의 연동 시의 필요 작업 최소화
– Lightweight Container 로 시작 시 부하가 적음
– 다양한 3rd 파티 제품과의 연동
– 테스트의 용이성
dao의 Interface만 설계해주면된다 -> dao 대신 만들어주니깐 ( dao의 proxy를 만들어준다. )
proxyMapper 어플리케이션 전체에서 사용하도록 확장된 거
messaging -STOMP
https://docs.spring.io/spring-framework/docs/4.3.x/spring-framework-reference/htmlsingle/
Spring Framework Reference Documentation
Authors Rod Johnson , Juergen Hoeller , Keith Donald , Colin Sampaleanu , Rob Harrop , Thomas Risberg , Alef Arendsen , Darren Davison , Dmitriy Kopylenko , Mark Pollack , Thierry Templier , Erwin Vervaet , Portia Tung , Ben Hale , Adrian Colyer , John Lew
docs.spring.io
https://www.egovframe.go.kr/wiki/doku.php?id=egovframework:rtea3.9
egovframework:rtea3.9 [eGovFrame]
www.egovframe.go.kr
**읽어보기
CoreContainer
어제까지 사용한게 Web구조이다.
Messaging을 연결하면 실시간 서비스가 가능한다. ( 양방형형태 = 완전하다!)
Core Container
– Core and Beans
• Spring 프레임워크의 근간이 되는 IoC/DI 기능을 지원하는 영역을 담당하고 있다.
• BeanFactory를 기반으로 Bean 클래스들을 제어할 수 있는 기능을 지원한다.
– Context
• Core and Beans를 견고히(solid)한 모듈이다. JNDI 처럼, 프레임워크 방식으로 객체에 접근하는 방법을 제공
• Beans 모듈에 더하여 국제화, 이벤트 전파, 리소스 로딩, 투명한 context 생성 등을 제공한다.
– Expression Language(SpEL)
• 객체 탐색을 실행 시에 구하거나(querying) 조작할 수 있도록 강력한 표현언어를 제공한다.(SpringEL/SpEL)
• 객체 속성에 대한 값 읽기 및 설정, 메서드 호출, 배열에 접근, collection and indexers, 논리 및 수리 연산,
named variables, Spring의 IoC container로부터 이름에 의한 객체 검색 등을 제공한다.
AOP and Instrumentation
– AOP(Aspect-oriented programming)
• AOP Alliance 기반의 Aspect Oriented Programming을 지원한다.
• 업무로직에서 부가적인 기능들을 method-interceptors, pointcuts 을 이용하여 분리(module)하여 작성할 수
있다.
– Instrumentation
• 어플리케이션 서버에서 사용되도록 클래스 구현의 지원이나 클래스 로더의 구현을 제공한다.
• 단어 : instrument (네이버)
장치나 도구를 말하며, 기능을 확대하기 위한 보조 장치나 보조 기구를 뜻하는데 측정 기기, 사진 기기
등이 포함된다.www.ddit.or.kr
Spring Framework
Data Access/Integration
– JDBC
• JDBC 기반하의 DAO개발을 좀 더 쉽고, 일관된 방법으로 개발하는 것이 가능하도록 추상화된 레이어를 제공.
– ORM
• Object Relation Mapping 프레임워크인 Hibernate, iBatis, JDO, JPA와의 통합을 지원.
– OXM
• Object/XML Mapping 은 Object와 XML간의 변환을 위한 추상 계층을 제공한다. (JAXB, Castor, XMLBeans,
JiBX, XStream 등)
– JMS
• Java Message Service, 메시징 처리를 위한 모듈을 제공한다.
– Transaction
• 직접적인 트랜잭션 관리나 선언적인 트랜잭션 관리에 있어 일관된 추상화를 제공.
Web
– Web
• 기본적인 웹 기반을 위한 기능을 제공한다.
• 다중 FileUpload 처리, 리스너 와 웹 기반 application context를 위한 IoC컨테이너 초기화
– Web-Servlet
• 웹 어플리케이션 구현을 위한 Spring MVC(Model-View-Controller) 제공
• Struts, Webwork와 같은 프레임워크의 통합을 지원
– Web-WebSocket
• JSR-356 스펙에 따라 구현된 WebSocket 프로그래밍 지원 모듈
– Web-Portlet
• 포털기반의 MVC 구현을 위한 모듈 제공.
Messaging
– Messaging
• Spring-Integration 모듈에서 Message, MessageChannel, MessageHandler 등 endpoint에서 메시지 매핑을
지원하는 API 들을 스프링 기본 모듈로 이관.
Test
– Test
• JUnit이나 TestNG와 같이 Spring Componets 를 테스트하는 모듈 제공한다.
• Mock object를 통하여 독립된 환경에서 코드를 테스트 할 수 있도록 제공한다.
**스프링의 장점은 쪼개져있고 필요한걸 쓸수있다.
**그럴려면 구조를 잘알아야한다.
--> 의존성이야기
의존관계 잘 파악해야함
https://mvnrepository.com/artifact/org.springframework/spring-context/4.3.22.RELEASE
Maven Repository: org.springframework » spring-context » 4.3.22.RELEASE
org.springframework spring-context 4.3.22.RELEASE // https://mvnrepository.com/artifact/org.springframework/spring-context implementation group: 'org.springframework', name: 'spring-context', version: '4.3.22.RELEASE' // https://mvnrepository.com/artifact/
mvnrepository.com
스프링 컨테이너 다른말은 = bean container
이안에는 빈들이있고 빈 하나하나가 객체가 된다.
이제 Spring 하나가 주입자가 되는거
ApplicationContext
ClassPathXmlApplicaitionContext
싱글톤패턴은 클래스 기준으로 하는거고
여기서의 (Spring)에서 말하는 싱글톤의 대상은 Bean이다 Bean하나가 싱글톤 구조를 이루고있음
같은 클래스 객체라도 bean에따라서 하나씩 클래스가 생성되기때문에 false값일 뜬거임
//protype으로 줘야지 매번 필요할때마다 새로운객체를 생성함 , 경우에따라 싱글톤을 써지말아야할경우 (상태를 유지해야할 경우) 서비스나 다오가 상태변수를 가지고있을경우 싱글톤으로 유지하면 문제가 발생할수있음 ** 객체의 특성에따라 single일수도있고 proto일수도있음
이건 c: 써을ㅇ때 마리아 생성 - > service 생성함
setter - p
service -> maria
c, p 써서 생성순서 잘 만들 수 있어야한다.
default일때 생성순서
14:04:00.962 [main] INFO k.o.d.s.d.SampleDAO_Maria - class kr.or.ddit.sample.dao.SampleDAO_Maria 객체생성
14:04:00.971 [main] INFO k.o.d.s.d.SampleDAO_Oracle - class kr.or.ddit.sample.dao.SampleDAO_Oracle 객체생성
14:04:00.971 [main] INFO k.o.d.s.s.SampleServiceImpl - class kr.or.ddit.sample.service.SampleServiceImpl 객체생성_기본생성자
마리아 - 오라클 - 서비스
14:04:33.405 [main] INFO k.o.d.s.d.SampleDAO_Oracle - class kr.or.ddit.sample.dao.SampleDAO_Oracle 객체생성
14:04:33.413 [main] INFO k.o.d.s.s.SampleServiceImpl - class kr.or.ddit.sample.service.SampleServiceImpl 객체생성_기본생성자
14:04:33.414 [main] INFO k.o.d.s.d.SampleDAO_Maria - class kr.or.ddit.sample.dao.SampleDAO_Maria 객체생성
다시 c로 바꾸면
오라클 마리아 서비스
마리아가 만들어지고 서비스를 넘길수있음 (?)
14:06:22.985 [main] INFO k.o.d.s.d.SampleDAO_Oracle - class kr.or.ddit.sample.dao.SampleDAO_Oracle 객체생성
14:06:22.995 [main] INFO k.o.d.s.d.SampleDAO_Maria - class kr.or.ddit.sample.dao.SampleDAO_Maria 객체생성
14:06:23.002 [main] INFO k.o.d.s.s.SampleServiceImpl - class kr.or.ddit.sample.service.SampleServiceImpl 객체생성_dao 주입생성자
주입할때 전까지 객체 생성 ( 프로토타입) = lazy-init이 포함된거나 마찬가지
14:07:40.672 [main] INFO k.o.d.s.d.SampleDAO_Oracle - class kr.or.ddit.sample.dao.SampleDAO_Oracle 객체생성
14:07:40.680 [main] INFO k.o.d.s.s.SampleServiceImpl - class kr.or.ddit.sample.service.SampleServiceImpl 객체생성_기본생성자
14:07:40.681 [main] INFO k.o.d.s.d.SampleDAO_Maria - class kr.or.ddit.sample.dao.SampleDAO_Maria 객체생성
default-lazy-init="true" //기본레이지 설정이 true
객체가 하나도생성안됨
lazy-init="false" 객체를 미리만들겠다
]
마리아 오라클 서비스
p를 ->c로바꾸면 ( c가 생성자)
마리아 서비스 오라클 (객체생성순서)
마리아은 매번 객체가생성되도록
컨테이너 = 리소스 로더
프로펄티 읽는거 하기