POJO -> Spring boot(starter: 의존관계 전이, 자동화 -> 신입개발자 부담↓) -> Spring 5.0 -> 레거시(Spring 4.0초반)
추상클래스와 인터페이스 중심의 코드를 전개할 것
프레임워크이다
결합도 낮춘다
독립적이다
단위테스트가 가능, 통합테스트도 가능해짐
실력의 평준화
프레임워크 사용 - 생산성, 팀워크, 일관성, 타팀에 지원도 가능함
다른 팀에 지원시 가장 문제되는 것은 구조가 다름
예전에 EJB (Enterprise Java Beans) -> 현재 Spring
spring-web.jar
spring-webMVC.jar
이런 jar파일들이 모여있는 것 - Sping
jar들 사이에도 의존 관계가 있다
의존관계를 개발자가 버전관리, 트러블 관리 책임이 부담
spring부트에서는 스타터 지원으로 자동화, 의존관계 전이까지도 관리
컨테이너=엔진
ApplicationContext - 자손(하위 클래스가 더 많은 메소드를 누릴 수 있다) - 이른 인스턴스화 지원
BeanFactory - 상위 - 게으른 인스턴스화
톰캣 - 서블릿 컨테이너이다
서블릿은 표준이지만 MVC를 지원하지 않음 - 순수 - 강제성이 없다 - 자유롭다
제어권 없으면- 라이브러리/ 있으면- 스프링
의존성 주입
A a = new A ( ); 결합도 강하다, 직접 인스턴스화 했잖아, 메소드의 리턴 타입으로 객체 주입이 되도록 하라
다형성
Duck myDuck(추상클래스, 인터페이스) = new MallardDuck( );
Map map = HashMap ( );
코드를 최소한으로 수정하여 처리가 가능하다
수평적인 관점에서 클래스를 설계하는 것, 관계를 맺는것, 유지보수에 유리하다
개발에도 유리하다(예: 트랜잭션처리 - 자동화, 일관성있게 처리 가능함, 안정감)
영속성(오라클 포함, DB서버)
오픈소스가 다양하다 (힘들다)
spring - core.jar - 설계적인 관점: IoC지원 - 느슨한 결합 ( 상속으로 처리하지 않음) - 더이상 서블릿이 아니어도 괜찮다
HttpServlet 을 상속받아야 서블릿이 되어 req, res 주입받을 수 있다
@Configuration지원 - xml방식에서 java코드를 이용한 환경설정 옮겨옴
spring - aop.jar - 공통된 관심사를 분리해서 개발자가 일일히 코딩하지 않고 자동으로 처리하도록 지원
spring - orm.jar - Hibernate 지원, JAP API 지원
spring - dao.jar - myBatis 같은 라이브러리 지원, DAO계층 지원하고 있다.
XXXLogic 클래스에서 여러 XXXDao클래스의 메소드를 호출할 수도 있다. (업무적인 복잡도가 높다)
spring - context.jar는 IoC를 지원하는 ApplicationContext 제공함 - AC가 빈 관리에 관여 - 라이프 사이클 관리함
inti() - service() - destroy()