spring
स्प्रिंग कोर
खोज…
स्प्रिंग कोर का परिचय
वसंत एक विशाल ढांचा है, इसलिए वसंत ढांचे को कई मॉड्यूलों में विभाजित किया गया है जो वसंत को हल्का बनाता है। कुछ महत्वपूर्ण मॉड्यूल हैं:
- स्प्रिंग कोर
- स्प्रिंग एओपी
- स्प्रिंग JDBC
- वसंत लेनदेन
- स्प्रिंग ओआरएम
- वसंत MVC
स्प्रिंग कोर को छोड़कर स्प्रिंग के सभी मॉड्यूल एक दूसरे से स्वतंत्र हैं। चूंकि स्प्रिंग कोर बेस मॉड्यूल है, इसलिए सभी मॉड्यूल में हमें स्प्रिंग कोर का उपयोग करना होगा
स्प्रिंग कोर
स्प्रिंग कोर सभी निर्भरता प्रबंधन के बारे में बात कर रहे हैं। इसका मतलब है कि यदि कोई भी मनमाना वर्ग वसंत को प्रदान करता है तो स्प्रिंग निर्भरता का प्रबंधन कर सकता है।
एक निर्भरता क्या है:
परियोजना के दृष्टिकोण से, एक परियोजना या अनुप्रयोग में कई कक्षाएं विभिन्न कार्यक्षमता के साथ होती हैं। और प्रत्येक वर्गों को अन्य वर्गों की कुछ कार्यक्षमता की आवश्यकता होती है।
उदाहरण:
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();
}
}
इसलिए हम इसके बजाय वर्गों वसंत कोर के बीच निर्भरता का प्रबंधन जिम्मेदारी निर्भरता प्रबंधन लेता है। लेकिन कुछ नियम हैं, कक्षाओं को कुछ डिज़ाइन तकनीक के साथ डिज़ाइन किया जाना चाहिए जो कि रणनीति डिज़ाइन पैटर्न है।
समझ कैसे वसंत निर्भरता का प्रबंधन?
मुझे कोड का एक टुकड़ा लिखने दें जो पूरी तरह से शिथिल कपल्स को दिखाता है, फिर आप आसानी से समझ सकते हैं कि स्प्रिंग कोर आंतरिक रूप से निर्भरता का प्रबंधन कैसे करता है। एक परिदृश्य पर विचार करें, ऑनलाइन व्यापार फ्लिपकार्ट है, यह कुछ समय डीटीडीसी या ब्लू डार्ट कूरियर सेवा का उपयोग करता है, इसलिए मुझे एक एप्लिकेशन डिज़ाइन करने दें जो पूर्ण शिथिल युग्मित दिखाता है। ग्रहण निर्देशिका के रूप में गिरती है:
//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;
}
}
// गुण फ़ाइल
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");
}
}
यदि हम इस कोड को लिखते हैं तो हम मैन्युअल रूप से ढीली युग्मन प्राप्त कर सकते हैं, यह लागू होता है यदि सभी वर्ग ब्लूडार्ट या डीटीडीसी चाहते हैं, लेकिन यदि कुछ वर्ग ब्लूडार्ट चाहते हैं और कुछ अन्य वर्ग डीटीडीसी चाहते हैं तो फिर से इसे कसकर युग्मित किया जाएगा, इसलिए हमारे बजाय निर्भरता इंजेक्शन बनाने और प्रबंधित करने के लिए स्प्रिंग कोर बीन्स को बनाने और प्रबंधित करने की ज़िम्मेदारी लेता है, आशा है कि यह मददगार होगा, अगले उदाहरण में हम आइल को देखेंगे!