on
자바 MVC 프로젝트 기초 2번째
자바 MVC 프로젝트 기초 2번째
반응형
자바 MVC
지난 시간에 이어 진행하겠습니다
2.XML을 이용하는 방법
1)Spring bean configuration 파일을 추가
2)객체를 생성하는 태그를 설정
클래스 경로에 해당하는 객체를 생성해서 리턴 - 싱글톤
3)사용
GenericXmlApplicationContext 변수명 = new GenericXmlApplicationContext(xml파일 경로);
인스턴스 이름 = 변수명.getBean('아이디", 메소드가 리턴하는 클래스이름.class);
4)실습
=>main 메소드 수정 public class SpringMain { public static void main(String[] args) { //SpringContainer 클래스 객체 만들기 /* AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(factory.class); */ //XML을 이용하는 방법 GenericXmlApplicationContext context = new GenericXmlApplicationContext( "classpath:applicationcontext.xml"); //Bean 생성 메소드를 호출해서 Bean을 생성 //Factory 클래스의 create 라는 메소드를 이용해서 인스턴스를 생성하고 리턴 //xml 파일을 이용할 때는 id를 기제 Item item1 = context.getBean("item", Item.class); item1.setNum(1); item1.setName("사과"); System.out.println(item1); //해시코드 출력 System.out.println(item1.hashCode()); Item item2 = context.getBean("create", Item.class); item2.setNum(2); item2.setName("한라봉"); System.out.println(item2); //해시코드 출력 System.out.println(item2.hashCode()); //*이것이 바로 Singleton Pattern } }
3.bean 태그의 속성
1)class : 생성할 인스턴스의 class - 패키지 이름까지 포함시켜야 함
2)id 외부에서 인스턴스를 가져다가 사용하기 위한 이름
=>생략하면 클래스이름 뒤에 #0을 붙입니다.
3)init-method: 인스턴스를 생성할 때 호출되는 메소드
4)destroy-method: 인스턴스가 소멸될 때 호출되는 메소드
5)lazy-init(지연 생성) : true를 설정하면 처음부터 만들어지지 않고 처음 사용할 때 만들어 집니다.
=>클라이언트 프로그램을 제작할 때 사용
=>lazy-init이 false 이면 프로그램이 실행될 때 전부 만들어두고 실행
6)scope: web에서만 설정하는 것으로 기본은 Singleton이고 호출할 때마다 생성하는 prototype이나
request, session 등의 scope를 설정할 수 있다.
**DI(Dependency Injection - 의존성 주입)
=>의존성: 객체 내부에서 다른 클래스의 객체를 사용하는 것
=>주입: 클래스 안에서 사용하는 객체를 내부에서 만들지 않고 외부에서 만든것을 대입받는것.
주입을 받는 방법은 생성자에서 받는 방법이 있고 setter를 이용해서 주입 받는 방법이 있다.
spring에서의 DI는 생성자나 setter를 이용하여 직접 받는게 아니고,
설정파일을 이용하여 주입받는것.
1.spring에서의 의존성 주입
=>생성자(constructor)를 이용한 주입
=>프로퍼티(property - setter)를 이용한 주입
2.생성자를 이용한 주입
=>constructor의 매개변수가 여러개인 경우에는 index속성을 이용해서 인덱스(순서)를 설정
3.생성자를 이용한 의존성 주입을 위한 실습
1)프로퍼티 1개를 갖는 클래스 생성
=>프로퍼티(property): 변수와 접근자 메소드를 모두 가진것
변수만 존재하는 경우 멤버변수
2)main/src -> src/main/resources 디렉토리에 Spring Bean Configuration 파일을 생성
=>diconfig.xml
3)di 패키지에 main 메소드를 소유한 클래스를 만들고 앞에서 만든 bean을 가져다 사용
public class DIMain { public static void main(String[] args) { //스프링 설정 파일의 경로 설정 //classpath: src 또는 src/main/java, src/main/resources GenericXmlApplicationContext context = new GenericXmlApplicationContext("classpath:diconfig.xml"); //bean 찾아오기 //주입받는 코드가 없지만 DTO dto = context.getBean("dto", DTO.class); //diconfig.xml 파일에서 설정한 내용이 출력 System.out.println(dto.getName()); context.close(); } }
4.property를 이용한 주입
1)diconfig.xml 파일에 property를 이용한 주입 코드 작성
2)main 메소드에 추가
DTO dto1 = context.getBean("dto1", DTO.class);
System.out.println(dto1.getName());
5.다른 bean을 주입
=>value는 직접 값을 설정하는 형식
=>이미 만들어진 다른 bean을 주입하는 것이 가능
1)diconfig.xml 파일에 추가
=>property가 여러개면 property 태그를 추가해서 해결
=>property name은 변수 이름이 아니고
setter 메소드에서 set을 제외한 부분의 첫 글자만 소문자로 변경한 문자열
어느 언어에서든지 property라고 부를때는 변수명이 아니고 getter 나 setter 메소드에서
get과 set을 제외한 부분의 첫글자만 소문자로 변경한 것.
2)main 메소드에서 확인
DTO dto2 = context.getBean("dto2", DTO.class);
System.out.println(dto2.getName());
6.Maven Project를 만들고 이전 실행이 잘 됐는데 git hub에 업로드 한 후 제대로 실행이 안되면
프로젝트를 선택하고 마우스 우클릭 후 [Maven] - [Update Project]를 한 후 실행
7.c 와 p 네임스페이스를 이용하는 방법
1)c 네임스페이스를 설정파일에 추가하면 생성자를 이용한 주입을 bean 태그의 속성으로 가능
c: 이름= 값을 추가하는 것이 가능
2)p 네임스페이스를 추가하면 프로퍼티를 이용한 주입을 bean 태그의 속성으로 가능
p:이름=값
p:이름-reg="다른 bean의 아디"
8.집단 자료형의 주입
=>list, set, map, properties
1)List 타입의 데이터를 주입하고자 하는 경우
값
값
...
=>value-type을 생략하면 자료형을 유추합니다.
=>다른 bean의 참조를 대입할 때는 대신에
=>배열과 List의 차이
배열은 크기가 고정, 중간에 데이터를 삽입하거나 삭제를 하려면 배열을 복사 해두고 작업해야함
, 메모리 낭비가 없음
List는 크기 변경 가능, 여분의 메모리를 가지고 있어야 하므로 메모리 낭비가 발생
2)Map
=>key 와 value를 쌍으로 저장하는 자료구조
key의 값
value의 값
3)Properties
=>key 와 value를 쌍으로 저장하는 자료구조
=>Map 과 다른 점은 Map 은 Key 와 value 에 모든 자료형이 가능하지만 Properties는 key 와 value에
java.lang.String만 됩니다.
value
4)Set
=>데이터를 중복없이, 순서와 상관없이 저장
=>설정 방법은 list 동일한데 태그의 이름만 set으로 설정
9.XML 설정과 어노테이션 설정을 같이 사용
context 네임스페이스 annotation-config 태그를 xml 설정 파일에 추가해주어야 합니다.
클래스의 bean 생성 bean에 다른 bean 또는 값을 주입 - DI
----------------
MySQL 버전
포트폴리오 - 5.x 버전 사용
직장에서 일할 시 - 8.x 버전 사용
----------------
반응형
from http://bucheoneduc.tistory.com/29 by ccl(A) rewrite - 2021-12-23 22:27:21