Jam's story
[Spring] 뉴렉처강의_DI 본문
결합력이 낮은 느슨한 코드를 사용하자
DI(의존성주입) ->객체를 조립해준다
일체형과 조립형에 대해 알아보자
조립형으로 하게되면 , setter를 이용하여 부품을 꽂아줄 수 있다.
조립형의 방법-> setter과 생성자주입
LOC 컨테이너
부품들을 담고 있는 것
예제 )Dependecy Injection - 우선 자바코드로
Program.java
package spring.di;
import spring.di.entity.Exam;
import spring.di.entity.GridExamConsole;
import spring.di.entity.NewlecExam;
import spring.di.ui.ExamConsole;
import spring.di.ui.InlineExamConsole;
public class Program {
public static void main(String[] args) {
// TODO Auto-generated method stub
//Exam은 인터페이스 , NewlecExam 구현 클래스
Exam exam=new NewlecExam();
//이렇게 조립하는 것이 DI
//ExamConsole은 인터페이스 , InlineExamConsole구현 클래스
//ExamConsole console=new InlineExamConsole(exam);
ExamConsole console=new GridExamConsole(exam);
console.print();
}
}
Exam.java
package spring.di.entity;
public interface Exam {
int total();
float avg();
}
NewLecExam.java
Exam인터페이스의 구현클래스
package spring.di.entity;
public class NewlecExam implements Exam {
private int kor;
private int eng;
private int math;
private int com;
@Override
public int total() {
// TODO Auto-generated method stub
return kor+eng+math+com;
}
@Override
public float avg() {
// TODO Auto-generated method stub
return total()/4.0f;
}
}
ExamConsole.java 인터페이스
package spring.di.ui;
public interface ExamConsole {
void print();
}
InlineExamConsole.java
ExamConsole인터페이스의 구현클래스
- 생성자를 통해서 인터페이스를 물려받기때문에, 물려받을 인터페이스 객체를 생성
package spring.di.ui;
import spring.di.entity.Exam;
public class InlineExamConsole implements ExamConsole {
//물려받기 때문에 생성자추가
private Exam exam;
public InlineExamConsole(Exam exam) {
super();
this.exam = exam;
}
public void print() {
System.out.printf("total is %d ,avg is %f\n", exam.total(), exam.avg() );
}
}
GridExamConsole.java()
package spring.di.entity;
import spring.di.ui.ExamConsole;
public class GridExamConsole implements ExamConsole {
private Exam exam;
public GridExamConsole(Exam exam) {
super();
this.exam = exam;
}
@Override
public void print() {
// TODO Auto-generated method stub
System.out.printf("Grid: total: %d ,avg:%3.2f ",exam.total(), exam.avg());
}
}
이제 스프링을 통해서 DI
Spring Di 지시서 작성하기
setting.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-3.0.xsd">
<!-- Exam exam =new NewlecExam(); -->
<!-- id= 변수명 , class=어떤 클래스를 요청할것인지 -->
<bean id="exam" class="spring.di.entity.NewlecExam">
</bean>
<!-- ExamConsole console=new GridExamConsole(); -->
<bean id="console" class="spring.di.entity.GridExamConsole"/>
<!-- console2.setExam(exam); -->
<bean id="console2" class="spring.di.entity.GridExamConsole">
<!-- set을 빼고 첫문자는 소문자로 -->
<!-- <property name="exam" value="" ref=""></property> -->
<!--s pring.di.entity.GridExamConsole에 setter가 있어야함 -->
<property name="exam" ref="exam"></property>
</bean>
</beans>
Program.java
package spring.di;
import spring.di.ui.ExamConsole;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Program {
public static void main(String[] args) {
// TODO Auto-generated method stub
//Exam은 인터페이스 , NewlecExam 구현 클래스
//Exam exam=new NewlecExam();
//이렇게 조립하는 것이 DI
//ExamConsole console=new InlineExamConsole(exam);
//ExamConsole console=new GridExamConsole(exam);
//setter
/*
* ExamConsole console=new GridExamConsole(); console.setexam(exam);
* console.print();
*/
ApplicationContext context=new ClassPathXmlApplicationContext("spring/di/setting.xml");
// console 이름에 담긴 것을 ,가져와라
// 이름에 대한 객체의 형식을 알 수 없기때문에 형식변환을 해야한다.
ExamConsole console=(ExamConsole)context.getBean("console");
ExamConsole console2=context.getBean(ExamConsole.class);
console.print();
}
}
'Spring' 카테고리의 다른 글
[Spring] MVC2 모델을 이용한 게시판 구현 (0) | 2022.07.14 |
---|---|
[Spring] 다이나믹웹프로젝트생성과 MVC2패턴 (0) | 2022.07.13 |
[Spring] days03- @Aspect 애노테이션을 이용한 AOP (0) | 2022.07.13 |
[Spring] days02 - AOP (0) | 2022.07.12 |
[Spring] days1 (0) | 2022.07.11 |
Comments