스프링 컨테이너 종류 

- BeanFactory와 이를 상속한 ApplicationContext두가지 유형 컨테이너 제공

 

 BeanFactory

 - 스프링 설정파일에 등록된 <bean>객체를 생성하고 관리하는 가장 기본적인 컨테이너 기능만 제공

 - 컨테이너 구동될때 <bean>객체를 생성하는것이 아니라, 클라이언트 요청(Lookup)에 의해서만 <bean>객체가 생성되는 지연 로딩(Lazy Loading)방식을 사용. 일반적인 스프링 프로젝트에 BeanFactory를 사용할 일은 전혀 없음

 

ApplicationContext

 - BeanFactory가 제공하는 <bean>객체 관리 기능 외에, 트랜잭션 관리나 메시지 기반의 다국어 처리 등, 다양한 기능을 제공. 컨테이너가 구동되는 시점에 <bean>에 등록된 클래스들을 객체 생성하는 즉시 로딩(pre-loading) 방식으로 동작

- 웹 애플리케이션 개발도 지원하므로 대부분 스프링 프로젝트는 ApplicationContext 유형의 컨테이너를 이용

 

구현클래스

GenericXmlApplicationContext : 파일시스템이나 클래스 경로에 있는 XML설정 파일을 로딩하여 구동하는 컨테이너

XmlWebApplicationContext : 웹 기반의 스프링 애프리케이션을 개발할 때 사용하는  컨테이너

 

 

src/main/java/polymorphsim/TvUser.java

package polymorphsim;

import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;

public class TvUser {
	public static void main(String[] args) {
		/*
		BeanFactory factory = new BeanFactory();
		TV tv = (TV)factory.getBean(args[0]);
		*/
		
		//1. Spring 컨테이너를 구동
		AbstractApplicationContext factory = new GenericXmlApplicationContext("applicationContext.xml");
		
		//2. Spring 컨테이너로 부터 필요한 객체를 요청(Lookup)
		TV tv = (TV)factory.getBean("tv");
		tv.powerOn();
		tv.volumeUp();
		tv.volumeDown();
		tv.powerOff();
		
		// 3. Spring컨테이너를 종료
		factory.close();
	}
}

 

실행결과

더보기

INFO : org.springframework.beans.factory.xml.XmlBeanDefinitionReader - Loading XML bean definitions from class path resource [applicationContext.xml]
INFO : org.springframework.context.support.GenericXmlApplicationContext - Refreshing org.springframework.context.support.GenericXmlApplicationContext@69a10787: startup date [Sun Jan 02 15:34:48 KST 2022]; root of context hierarchy
===> SamsungTV() 객체생성
SamsungTv --전원 켠다.
SamsungTv --소리 올린다.
SamsungTv --소리 내린다
SamsungTv --전원 끈다.
INFO : org.springframework.context.support.GenericXmlApplicationContext - Closing org.springframework.context.support.GenericXmlApplicationContext@69a10787: startup date [Sun Jan 02 15:34:48 KST 2022]; root of context hierarchy

 

 

 

src/main/resources/applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

	<bean id ="tv" class="polymorphsim.SamsungTV"/>
</beans>

 

<bean>, <description>, <alias>, <import>등 네개 엘리먼트를 자식 엘리먼트로 사용가능
<bean>과 <import>정도가 실제 프로젝트에서 사용

 

<import> 엘리먼트

 - 스프링 설정파일 하나에 모든 클래스를 <bean>으로 등록/관리 할 수 있지만, bean이외에도 트랜잭션관리,예외처리, 다국어 처리등 다양한 설정 필요. 모든파일을 하나로 관리하지 않고 xml파일로 나눠서 사용하는게 효과적

 

<beans>
	<import resource="context-datasource.xml"/>
    <import resource="context-trransaction.xml"/>
</beans>

<bean> 엘리먼트

 - id와 class속성을 사용. id는 생략가능, class속성은 필수

 - id속성 : 자바 식별자 작성 규칙, CamelCase사용, id는 유일해야함

 - class속성 :  클래스 등록할 때는 정확한 경로와 클래스 이름 지정 필수

 - name속성 : id와 같은기능. 자바 식별자 규칙 따르지 않아도 됨. 특수문자 허용 

 

src/main/resources/applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

	<bean id ="tv" class="polymorphsim.SamsungTV" init-method="initMethod" destroy-method="destroyMethod" lazy-init="true" scope="singleton"/>
</beans>

 

속성 예시 설명 소스
init-method init-method="initMethod" 객체 생성후 멤버변수 초기화 작업 필요할때 사용
컨테이너 구동후 SamsungTV객체 생성직후 호출
SamsungTV에  메소드 추가
public void initMethod() {
System.out.println("객체 초기화 작업 처리..");
}
destroy-method destroy-method="destroyMethod" 스프링 컨테이너가 객체를 삭제하기 직전에 임의의 메소드 지정
컨테이너 종료직전 컨테이너 관리하는 모든객체 삭제
SamsungTV객체 삭제직전 호출
SamsungTV에  메소드 추가
public void destroyMethod() {
System.out.println("객체 삭제 전 처리할 로직 처리..");
}
lazy-init lazy-init="true" 컨테이너 구동시점이 아닌, 해당 bean이 구동되는 시점에 객체 생성
true : 클라이언트 요청시점에 생성 (메모리 효율적 관리)
-
scope scope="singleton"  (기본)
scope="prototype"
sigleton : 객체 단 하나만 생성되어 유지
prototype: 컨테이너는 bean이 요청될 때마다 새로운 객체 생성
TVUser에 객체 여러개 
TV tv1 = (TV)factory.getBean("tv");
TV tv2 = (TV)factory.getBean("tv");
TV tv3 = (TV)factory.getBean("tv");

 

 

'IT > SPRING' 카테고리의 다른 글

[SPRING] 어노테이션 설정  (0) 2022.01.05
[SPRING] 의존성 주입  (0) 2022.01.04
[SPRING] 프레임워크 개요  (0) 2022.01.02
[환경셋팅] 스프링 개발 환경 셋팅  (0) 2021.12.28
02_스프링 특징  (0) 2020.01.03

프레임워크 장점

 

1. 빠른 구현시간

 - 아키텍처 골격코드는 프레임워크에서 제공, 개발자는 비즈니스 로직만 구현하면 됨

 

2. 쉬운 관리

 - 같은 프레임워크에 적용된 애플리케이션은 아키텍쳐가 같으므로 관리하기 쉬움

 

3. 개발자들 역량 획일화

4. 검증된 아키텍쳐 재사용과 일관성 유지

 


 

EJB(Enterpirse Java Beans)

 

POJO(Plain Old Java Object)

 - 평범한 옛날 자바 객체

  <-> Not POJO : Servlet클래스 // 우리마음대로 만들수 없음, 반드시 Servlet에서 요구하는 규칙에 맞게 클래스 만들어야 실행할 수 있음)

 

 

Servlet 클래스 작성 규칙

 - java.servlet, javax.servlet.http 패키지 import

- public 클래스로 선언

- Servlet, GenericServlet, HttpServlet중 하나를 상속

- 기본 생성자가 있어야 함

- 생명주기에 해당하는 메소드 재정의(Overriding)

 


스프링 프레임워크 특징

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

 

1) 경량(Lightweight)

 - 크기측면에서 가벼움, 여러개의 모듈, 각모듈은 하나이상의 jar파일로 구성

 - 프레임워크가 POJO형태의 객체를 관리. 기존의 EJB객체 관리하는것 보다 훨씬 가볍고 빠름

 

2) 제어의 역행 (IoC : Inversion of Control)

 - 애플리케이션 구성하는 객체간 느슨한 결합, 낮은 결합도 유지

 - IoC가 적용되면 객체생성을 자바 코드로 직접생성하는것이 아니라, 컨테이너가 대신 처리

   객체와 객체 사이의 의존관계도 컨테이너가 처리
 - 소스에 의존관계가 명시되지 않으므로, 결합도가 떨어져서 유지보수 편리

 

3) 관점지향 프로그래밍(AOP : Aspect Oriented Programming)

 - 비즈니스 메소드 개발할때, 핵심 비즈니스 로직과 각 비즈니스 메소드마다 반복해서 등장하는 공통로직 분리함으로써 응집도가 높게 개발할 수 있도록 지원

 - 관점 지향 프로그래밍의 개념 : 공통으로 사용하는 기능들을 외부의 독립된 클래스로 분리하고, 해당 기능을 프로그램 코드에 직접 명시하지 않고 선언적으로 처리하여 적용하는것

- 응집도 높은 비즈니스 컴포넌트 만들수 있음 + 유지보수 혁신적 향상

 

4) 컨테이너(Container)

 - 특정 객체의 생성관리 담당, 객체 운용에 필요한 다양한 기능 제공

 - 대표 컨테이너 : Servlet컨테이너(톰캣 서버에 포함) , EJB컨테이너

- AP운용에 필요한 객체 생성, 객체간 의존관계 관리하는점에서 스프링도 일종의 컨테이너

 

 

'IT > SPRING' 카테고리의 다른 글

[SPRING] 의존성 주입  (0) 2022.01.04
[SPRING] 스프링 컨테이너, applicationContext 설정파일  (0) 2022.01.03
[환경셋팅] 스프링 개발 환경 셋팅  (0) 2021.12.28
02_스프링 특징  (0) 2020.01.03
01_개발환경 셋팅  (0) 2020.01.03

 

JAVA (11.0.12)

1. oracle에서 jdk 다운로드 

2. 시스템 > 시스템속성 > 고급 > 환경변수에 JAVA_HOME추가

 새로만들기 >>  JAVA설치파일의 bin경로로 

ㅇ 변수이름 : JAVA_HOME

ㅇ 변수값 : C:\Program Files\Java\jdk1.8.0_301\bin
              C:\Program Files\Java\jdk-11.0.12\bin
3. 기존 환경변수 Path 에 JAVA_HOME 추가

C:\Program Files\Common Files\Oracle\Java\javapath;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Samsung\SamsungLink\AllShare Framework DMS\bin\;%JAVA_HOME%

4. 윈도우 cmd창열고, java -version 설치확인

 

(8버전 삭제후 11로 재설치)


Eclipse (넘어가도됨... mars버전)

 

1. eclipse.org 사이트에서 다운로드

 - 다운로드 받은버전 : mars

2. 개발 폴더에 압축해제  

  - 경로 : C:\DEV\eclipse

3. 이클립스 실행 :: eclipse.exe

 >> 아래와 같이 오류발생

4. eclipse.ini 파일내에 jdk가 가진 javaw.exe 파일 위치 명시

-vm
C:\Program Files\Java\jdk1.8.0_301\bin\javaw.exe

5. 파일 저장후 닫기, 이클립스 실행 :: 성공

 


 (Tomcat) eclipse 서버 설정

 (Eclipse에서 설정안하고, 맨아래 sts에서 참고해서 설정하면됨)

 

1. tomcat.apache.org 에서 톰캣 다운로드
 - https://archive.apache.org/dist/tomcat/tomcat-8/v8.0.32/bin/

 - 다운로드 버전 : 8.0.32

2. 개발 경로에 압축해제

 - 나의 경로 : C:\DEV\apache-tomcat-8.0.32

 

3. 이클립스 실행후 Server 추가

 - Servers > ~Click this link~ > Apache Tomcat v8.0 > Next
 - Browse해서 설치된 tomcat링크 선택후 Finish

 

4. Server 구동

 - Server 옆 초록버튼(실행)  > Console창 확인

 


DB (MySQL) 8.0.26 

1. mysql사이트에서 다운로드

 - 다운로드 버전 : 8.0.26

 - https://dev.mysql.com/downloads/mysql/

 

2. 설치 과정 (생략)

 - 포트는 기본으로 설정함

 - root 계정 pass설정

 ** 주의 : 설치할때 컴퓨터이름이 한글로 되어있으면 오류남..

 

3. 환경변수설정

 > C:\Program Files\MySQL\MySQL Server 8.0\bin
 - cmd에서 mysql --version으로 확인

4. service.msc 실행

  - window + R키

 - MySQL80이 실행되어있는지 확인
    >>설치하다가 재설치해서 81로됨

4. mysql workbench 실행

 

5. db 확인

 

6. Schema생성 후 table생성, insert

- schema명 : board 

-- users테이블 생성
create table users(
id varchar(8) primary key,
password varchar(8),
name varchar(20),
role varchar(5)
);
-- users  insert
insert into users values('admin1','admin1','관리자','Admin');
insert into users values('user1','user1','홍길동','User');

-- board 테이블 생성
create table board(
seq int(5) primary key,
title varchar(200),
writer varchar(20),
content varchar(2000),
regdate timestamp default now(),
cnt int(5) default 0
);

-- board  insert
insert into board(seq, title, writer, content) values(1,'가입인사','관리자','안녕하세요 환영합니다.');

select * from board;
select * from users;

commit;

 


STS(Spring Tool Stuie) 설치 4.13.0

 

1. STS설치
ㅇ Help > Eclipse Marketplace

 --> Marketplace에서 3.7.3 버전이 보이지 않아서 

      수동설치 하려고했는데.. url이 유효하지 않음 http://dist.springsource.com/snapshot/TOOLS/nightly/e3.7

      sts 설치 https://spring.io/tools 

 -- 설치한 버전 : 4.13.0

(이클립스 설치 괜히함......)

 

2. 서버설정 (eclipse와 동일)
 - Servers > Tomcat 설정후 실행 

 - Console에서 Server startup 확인

 

3. Legacy 프로젝트 생성을 위한 추가 download

  3-1 오른쪽마우스 클릭 > New > Project... >  Spring Legacy 프로젝트가 없음

  3-2 Help > Eclipse Marketplace > sts 검색

       두번째 Spring Tools 3 Add-On Spring Tools 4 ~~를 install
       Confirm후 sts 자동 재시작

 

  3-3 Spring Legacy Project 생성가능


STS 프로젝트 생성 및 설정

 

1. Legacy 프로젝트 생성
  File > New > Spring Legacy Project

  - Project Name : BoardWeb

  - Templates : Spring MVC Project

** 생성시 오류발생 : 조치  https://gardentree.tistory.com/148

 

2. 패키지명 설정 후 저장

   정상생성!

 

3. 프로젝트 설정 변경

  - 생성한 프로젝트 선택 후 우클릭 > Properties > Project Facets

  - Java는 Version 설치한 버전에 맞게 변경 (11)
  - Runtimes에 Apache Tomcat 선택
  - Apply > Apply And Close

  - Java Build Path > Libraries에 정상변경 확인

'IT > SPRING' 카테고리의 다른 글

[SPRING] 스프링 컨테이너, applicationContext 설정파일  (0) 2022.01.03
[SPRING] 프레임워크 개요  (0) 2022.01.02
02_스프링 특징  (0) 2020.01.03
01_개발환경 셋팅  (0) 2020.01.03
spring sts mapper.xml 소스가 반영안될때..  (0) 2019.06.26

+ Recent posts