여태까지 정신없이 배웠던 자바의 노가다 기능 및 코드들이
스프링을 이용하니 코드도 짧아지고,, 과정도 짧아지는 듯 하다 ?
신기함..
그래서 스프링을 꼭 배워야한다는 건가!?
정신없이 따라가고 있고, 아직도 어려운게 한가득이지만
뭐 재밌다. .. ..!!
[ spring 프레임워크 ]
- 스프링은 여러개의 모듈로 구성되어있고, 각 모듈은 하나 이상의 jar 파일로 구성되어있다.
이 몇개의 jar 파일로 개발과 실행이 모두 가능하다.
즉, 스프링을 이용해서 만들 애플리캐이션의 배포 또한 빠르고 쉽게 진행할 수 있다.
- 객체 생성을 자바코드로 직접 처리하는것이 아니라, 컨테이너가 대신 처리하고
객체와 객체사이의 의존관계도 컨테이너가 처리한다.
- 스프링 프레임워크에는 자신이 관리할 클래스들이 등록된 xml 설정 파일이 필요하다.
- 스프링 컨테이너 종류
1) BeanFactory : 스프링 설정파일에 등록된 <bean> 객체를 생성하고 관리하는 기본적인 컨테이너 기능만 제공
클라이언트의 요청에 의해서만 <bean>객체가 생성되는 지연로딩 방식
2) ApplicationContext : BeanFactory가 제공하는 <bean>객체관리 기능
컨테이너가 구동되는 시점에 <bean>에 등록된 클래스들을 객체가 생성되는 즉시 로딩 방식
- pplicationContext의 대표적인 클래스
1) GenericXmlApplicationContext
: 파일 시스템이나 클래스 경로에 있는 XML 설정 파일을 로딩하여 구동하는 컨테이너
2) XmlWebApplicationContext
: 웹 기반의 스프링 애플리케이션을 개발할때 사용하는 컨테이너
* 스프링 컨테이너는 xml파일에 등록된 클래스를 찾아서 객체를 생성할 경우
기본적으로 매개변수가 없는 기본 생성자를 호출하기때문에
컨테이너가 기본생성자 말고, 매개변수를 가지는 다른 생성자를 호출할 수 있도록 생성자 인젝션을 사용한다.
-> Constructor-arg (생성자) 의존객체주입
1) 클래스에 매개변수를 가지는 생성자를 만든다.
public class AirPlane {
private String kind;
private String company;
public AirPlane() {
super();
2) applicationContext.xml 파일에서 <bean> 설정을 해준다.
<bean id="ap" class="a01_diexp.vo.AirPlane">
<constructor-arg value="K104"/>
<constructor-arg value="대한항공"/>
</bean>
->Constructor-arg (생성자)의존객체주입
name 속성값이 호출하고자하는 메소드 이름이 된다..
<property name="호출하고자 하는 메소드 이름" ref="빈객체이름"></property>
**Constructor-arg (생성자) vs Constructor-arg (생성자) 이 둘의 차이점이나 사용법이 아직 익숙치않아서
강사님께 피드백 요청..
[ 1월 25일 과제 ]
1. property 의존성 객체 주입 예시로 설명
property 는 일반적으로 DTO 또는 VO 에서 볼 수 있다.
인스턴스 변수와 getter setter로 만들어진 형태이다.
1) vo객체 담을 class 생성
public class Fruit {
private String name;
private int price;
private String prodLoc; //생산지
public Fruit() {
2) xml 파일에 bean을 생성하는 코드를 추가하고 property 코드 작성
<bean id="f01" class="a01_diexp.vo.Fruit">
<property name="name" value="사과"></property>
<property name="price" value="2000"></property>
<property name="prodLoc" value="대구"></property>
</bean>
3) main메서드에 ApplicationContext 빈 객체를 만들고
tring path = "a01_diexp/di01.xml";
GenericXmlApplicationContext ctx = new GenericXmlApplicationContext(path);
xml 파일로부터 정보를 읽어와 객체를 생성하고 초기화 시킨다.
->GenericXmlApplicationContext 클래스는 작성된 스프링 설정 파일을 읽어와 로딩 시키고,
객체를 생성하며, 초기화하는 역할을 한다.
또한 getBean 메소드를 이용하여 스프링 컨테이너에 생성된 객체에 접근 가능할 수 있게 된다.
4) 생성한 class 의 bean을 가져온 후
Fruit f01 = ctx.getBean("f01", Fruit.class);
5) 객체를 닫는다
ctx.close();
2. 회원등록하는 요청(회원아이디, 패스워드, 회원명, 권한, 포인트)를 처리하는 spring controller의 기능메서드를 선언하고,
요청값을 처리하여, console창에 출력되게 하세요.
1) vo객체 Member 클래스 생성
public class Member {
private String id;
private String pw;
private String name;
private String auth;
private int point;
public Member() {
super();
...
( 기능메서드 선언 ) -? 이부분 뭔가 이상함.. 내일 피드백 요청함..
public void showM() {
System.out.println("회원 아이디 :"+id);
System.out.println("회원 비번 :"+pw);
System.out.println("회원 이름 :"+name);
System.out.println("회원 권한 :"+auth);
System.out.println("회원 포인트 :"+point);
}
2) DI03.xml bean으로 생성자에 순서대로 인자 전달
<bean id="mem" class="a01_diexp.vo.Member">
<constructor-arg value="hihi"/>
<constructor-arg value="7777"/>
<constructor-arg value="홍길동"/>
<constructor-arg value="일반사용자"/>
<constructor-arg value="3500"/>
</bean>
3) DIExp_03.exp 기능메서드 호출
Member mem = ctx.getBean("mem", Member.class);
mem.showM();
4) console. 출력
회원 아이디 :hihi
회원 비번 :7777
회원 이름 :홍길동
회원 권한 :일반사용자
회원 포인트 :3500
3. 스프링 컨테이너 환경을 설정하는 방법을 기술하라.
- src/main/java에는 일반적인 자바 소스를 등록한다.
- src/main/resources 에는 자바소스가 아닌 xml이나 프로퍼티 파일을 등록한다.
6. class에서 객체 vs 객체의 1:1 관계를 설정하기위한 처리 방법
- 연관관계는 a클래스가 b클래스을 알고 그 참조를 보유한다는 것을 나타낸다.
- 객체를 멤버객체(필드)로 사용한다.
7. 객체 vs 객체 연습
(1) Academy클래스
package a01_diexp.vo;
public class Academy {
private String name; //학원이름
private String team; //몇조인지?
public Academy() {
super();
// TODO Auto-generated constructor stub
}
public Academy(String name, String team) {
super();
this.name = name;
this.team = team;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTeam() {
return team;
}
public void setTeam(String team) {
this.team = team;
}
}
(2) Student 클래스 생성(Academy 객체 사용)
public class Student {
private String sname;
private Academy academy;
public Student() {
super();
// TODO Auto-generated constructor stub
}
public Student(String sname) {
super();
this.sname = sname;
}
public void info() {
System.out.println("수강생 이름 : "+sname);
if(academy!=null) {
System.out.println("학원 이름 : "+academy.getName());
System.out.println("조 이름 : "+academy.getTeam());
}else {
System.out.println("해당정보가 없습니다. ");
}
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public Academy getAcademy() {
return academy;
}
public void setAcademy(Academy academy) {
this.academy = academy;
}
}
(3) DI03.xml
<bean id="ssang" class="a01_diexp.vo.Academy">
<constructor-arg value="국비"/>
<constructor-arg value="n조"/>
</bean>
<bean id="student" class="a01_diexp.vo.Student">
<constructor-arg value="홍길동"/>
<property name="Academy" ref="ssang"/>
</bean>
(4) DIExp.03
Student student = ctx.getBean("student", Student.class);
student.info();
ctx.close();
}
수강생 이름 : 홍길동
학원 이름 : 국비
조 이름 : n조
'공부 > JAVA' 카테고리의 다른 글
2022.01.06 - ORACLE / JAVA / JSP 화면출력 (0) | 2022.01.07 |
---|---|
2022.01.06 - ORACLE / JAVA 조회처리 (0) | 2022.01.06 |
2022.01.06 - ORACLE / JAVA 연동 (0) | 2022.01.06 |
2021.12.30 - java 2회차.. 찐 답답.. (0) | 2021.12.30 |
2021.11.02 - 국비수업 java 4일차 (0) | 2021.11.07 |