수색…
스프링 코어 소개
Spring은 방대한 프레임 워크이므로 Spring 프레임 워크는 스프링을 경량화하는 여러 모듈로 나뉘어져있다. 몇 가지 중요한 모듈은 다음과 같습니다.
- 스프링 코어
- 봄의 AOP
- Spring JDBC
- 봄 거래
- 봄 ORM
- 스프링 MVC
Spring의 모든 모듈은 Spring Core를 제외하고는 서로 독립적입니다. 스프링 코어가 기본 모듈이므로 모든 모듈에서 스프링 코어를 사용해야합니다.
스프링 코어
Spring Core는 의존성 관리에 관한 모든 것을 이야기합니다. 즉, Spring에 제공된 임의의 클래스가 Spring에 제공되면 종속성을 관리 할 수 있습니다.
의존성이란?
프로젝트 관점에서 볼 때 프로젝트 또는 애플리케이션에는 여러 기능이있는 여러 클래스가 있습니다. 각 클래스에는 다른 클래스의 일부 기능이 필요했습니다.
예:
class Engine {
public void start() {
System.out.println("Engine started");
}
}
class Car {
public void move() {
// For moving start() method of engine class is required
}
}
여기 클래스 엔진은 클래스 엔진이 필요하기 때문에 클래스 엔진은 클래스 카에 종속적이라고 말할 수 있습니다. 따라서 우리는 상속으로 종속성을 관리하거나 휴지 상태로 객체를 생성하는 대신
상속에 의한 :
class Engine {
public void start() {
System.out.println("Engine started");
}
}
class Car extends Engine {
public void move() {
start(); //Calling super class start method,
}
}
종속 클래스의 객체 생성 :
class Engine {
public void start() {
System.out.println("Engine started");
}
}
class Car {
Engine eng = new Engine();
public void move() {
eng.start();
}
}
따라서 클래스 간의 종속성을 관리하는 대신 스프링 코어가 책임 종속성 관리를 담당합니다. 하지만 몇 가지 규칙이 있습니다. 수업은 전략 디자인 패턴 인 디자인 기법으로 디자인되어야합니다.
스프링이 의존성을 관리하는 방법 이해하기
완전하게 느슨하게 결합 된 코드를 작성하겠습니다. 그러면 스프링 코어가 내부적으로 의존성을 관리하는 방법을 쉽게 이해할 수 있습니다. 시나리오를 생각해 보겠습니다. 온라인 비즈니스 Flipkart가 있습니다. DTDC 또는 Blue Dart 택배 서비스를 몇 번 사용합니다. 따라서 느슨하게 결합 된 애플리케이션을 디자인 해 보겠습니다. 이클립스 디렉토리가 죽었다 :
//Interface
package com.sdp.component;
public interface Courier {
public String deliver(String iteams,String address);
}
// 구현 클래스
package com.sdp.component;
public class BlueDart implements Courier {
public String deliver(String iteams, String address) {
return iteams+ "Shiped to Address "+address +"Through BlueDart";
}
}
package com.sdp.component;
public class Dtdc implements Courier {
public String deliver(String iteams, String address) {
return iteams+ "Shiped to Address "+address +"Through Dtdc"; }
}
// 컴포넌트 클래스
package com.sdp.service;
import com.sdp.component.Courier;
public class FlipKart {
private Courier courier;
public void setCourier(Courier courier) {
this.courier = courier;
}
public void shopping(String iteams,String address)
{
String status=courier.deliver(iteams, address);
System.out.println(status);
}
}
// 오브젝트를 작성해 돌려주는 팩토리 클래스
package com.sdp.util;
import java.io.IOException;
import java.util.Properties;
import com.sdp.component.Courier;
public class ObjectFactory {
private static Properties props;
static{
props=new Properties();
try {
props.load(ObjectFactory.class.getClassLoader().getResourceAsStream("com//sdp//common//app.properties"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static Object getInstance(String logicalclassName)
{
Object obj = null;
String originalclassName=props.getProperty(logicalclassName);
try {
obj=Class.forName(originalclassName).newInstance();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return obj;
}
}
// properties file
BlueDart.class=com.sdp.component.BlueDart
Dtdc.class=com.sdp.component.Dtdc
FlipKart.class=com.sdp.service.FlipKart
// 테스트 클래스
package com.sdp.test;
import com.sdp.component.Courier;
import com.sdp.service.FlipKart;
import com.sdp.util.ObjectFactory;
public class FlipKartTest {
public static void main(String[] args) {
Courier courier=(Courier)ObjectFactory.getInstance("Dtdc.class");
FlipKart flipkart=(FlipKart)ObjectFactory.getInstance("FlipKart.class");
flipkart.setCourier(courier);
flipkart.shopping("Hp Laptop", "SR Nagar,Hyderabad");
}
}
이 코드를 작성하면 느슨한 결합을 수동으로 수행 할 수 있습니다. 모든 클래스가 BlueDart 또는 Dtdc를 원할 경우 적용 할 수 있습니다. 그러나 BlueDart 클래스와 다른 클래스가 Dtdc를 원한다면 다시 강하게 결합됩니다. 의존성 삽입 생성 및 관리하기 스프링 코어는 빈을 생성하고 관리하는 책임이있다. 다음 예제에서 우리는 스프링 코어에!