spring
ApplicationContext कॉन्फ़िगरेशन
खोज…
टिप्पणियों
स्प्रिंग ने इसे ऐसा बनाया है कि ApplicationContext
को कॉन्फ़िगर करना बेहद लचीला है। प्रत्येक प्रकार के कॉन्फ़िगरेशन को लागू करने के कई तरीके हैं, और वे सभी को अच्छी तरह से एक साथ मिलाया जा सकता है।
जावा कॉन्फ़िगरेशन स्पष्ट कॉन्फ़िगरेशन का एक रूप है। एक @Configuration
एनोटेट वर्ग का उपयोग सेम को निर्दिष्ट करने के लिए किया जाता है जो ApplicationContext
का एक हिस्सा होगा, साथ ही प्रत्येक बीन की निर्भरता को परिभाषित और तार करेगा।
Xml कॉन्फ़िगरेशन स्पष्ट कॉन्फ़िगरेशन का एक रूप है। सेम को परिभाषित करने के लिए एक विशिष्ट xml स्कीमा का उपयोग किया जाता है जो ApplicationContext
का एक हिस्सा होगा। प्रत्येक सेम की निर्भरता को परिभाषित करने और तार करने के लिए इसी स्कीमा का उपयोग किया जाता है।
स्वतः - भरण स्वचालित कॉन्फ़िगरेशन का एक रूप है। कुछ एनोटेशन का उपयोग वर्ग परिभाषाओं में किया जाता है ताकि यह स्थापित किया जा सके कि बीन्स ApplicationContext
का एक हिस्सा क्या होगा, और अन्य एनोटेशन का उपयोग इन बीन्स की निर्भरता को तार करने के लिए किया जाता है।
जावा कॉन्फ़िगरेशन
जावा कॉन्फिगरेशन आमतौर पर यह @Configuration
लिए किया जाता है कि क्लास में @Configuration
एनोटेशन लागू करने से पता चलता है कि क्लास में बीन की परिभाषा है। बीन की परिभाषा @Bean
एनोटेशन को एक विधि पर लागू करके निर्दिष्ट की जाती है जो एक वस्तु लौटाता है।
@Configuration // This annotation tells the ApplicationContext that this class
// contains bean definitions.
class AppConfig {
/**
* An Author created with the default constructor
* setting no properties
*/
@Bean // This annotation marks a method that defines a bean
Author author1() {
return new Author();
}
/**
* An Author created with the constructor that initializes the
* name fields
*/
@Bean
Author author2() {
return new Author("Steven", "King");
}
/**
* An Author created with the default constructor, but
* then uses the property setters to specify name fields
*/
@Bean
Author author3() {
Author author = new Author();
author.setFirstName("George");
author.setLastName("Martin");
return author;
}
/**
* A Book created referring to author2 (created above) via
* a constructor argument. The dependency is fulfilled by
* invoking the method as plain Java.
*/
@Bean
Book book1() {
return new Book(author2(), "It");
}
/**
* A Book created referring to author3 (created above) via
* a property setter. The dependency is fulfilled by
* invoking the method as plain Java.
*/
@Bean
Book book2() {
Book book = new Book();
book.setAuthor(author3());
book.setTitle("A Game of Thrones");
return book;
}
}
// The classes that are being initialized and wired above...
class Book { // assume package org.springframework.example
Author author;
String title;
Book() {} // default constructor
Book(Author author, String title) {
this.author = author;
this.title= title;
}
Author getAuthor() { return author; }
String getTitle() { return title; }
void setAuthor(Author author) {
this.author = author;
}
void setTitle(String title) {
this.title= title;
}
}
class Author { // assume package org.springframework.example
String firstName;
String lastName;
Author() {} // default constructor
Author(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
String getFirstName() { return firstName; }
String getLastName() { return lastName; }
void setFirstName(String firstName) {
this.firstName = firstName;
}
void setLastName(String lastName) {
this.lastName = lastName;
}
}
Xml कॉन्फ़िगरेशन
Xml कॉन्फ़िगरेशन आमतौर पर स्प्रिंग की विशिष्ट beans
स्कीमा का उपयोग करके एक xml फ़ाइल के भीतर बीन्स को परिभाषित करके किया जाता है। रूट beans
तत्व के तहत, bean
सबलेमेंट का उपयोग करके विशिष्ट बीन परिभाषा की जाएगी।
<?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.xsd">
<!-- An Author created with the default constructor
setting no properties -->
<bean id="author1" class="org.springframework.example.Author" />
<!-- An Author created with the constructor that initializes the
name fields -->
<bean id="author2" class="org.springframework.example.Author">
<constructor-arg index="0" value="Steven" />
<constructor-arg index="1" value="King" />
</bean>
<!-- An Author created with the default constructor, but
then uses the property setters to specify name fields -->
<bean id="author3" class="org.springframework.example.Author">
<property name="firstName" value="George" />
<property name="lastName" value="Martin" />
</bean>
<!-- A Book created referring to author2 (created above) via
a constructor argument -->
<bean id="book1" class="org.springframework.example.Book">
<constructor-arg index="0" ref="author2" />
<constructor-arg index="1" value="It" />
</bean>
<!-- A Book created referring to author3 (created above) via
a property setter -->
<bean id="book1" class="org.springframework.example.Book">
<property name="author" ref="author3" />
<property name="title" value="A Game of Thrones" />
</bean>
</beans>
// The classes that are being initialized and wired above...
class Book { // assume package org.springframework.example
Author author;
String title;
Book() {} // default constructor
Book(Author author, String title) {
this.author = author;
this.title= title;
}
Author getAuthor() { return author; }
String getTitle() { return title; }
void setAuthor(Author author) {
this.author = author;
}
void setTitle(String title) {
this.title= title;
}
}
class Author { // assume package org.springframework.example
String firstName;
String lastName;
Author() {} // default constructor
Author(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
String getFirstName() { return firstName; }
String getLastName() { return lastName; }
void setFirstName(String firstName) {
this.firstName = firstName;
}
void setLastName(String lastName) {
this.lastName = lastName;
}
}
Autowiring
ऑटोकायरिंग एक स्टीरियोटाइप एनोटेशन का उपयोग करके यह निर्दिष्ट करने के लिए किया जाता है कि ApplicationContext
कोनटेक्स्ट में कौन सी कक्षाएं सेम होने जा रही हैं, और बीन निर्भरता को निर्दिष्ट करने के लिए Autowired
और Value
एनोटेशन का उपयोग करें। ऑटोवॉइरिंग का अनूठा हिस्सा यह है कि कोई बाहरी ApplicationContext
परिभाषा नहीं है, क्योंकि यह उन सभी वर्गों के भीतर किया जाता है जो स्वयं सेम हैं।
@Component // The annotation that specifies to include this as a bean
// in the ApplicationContext
class Book {
@Autowired // The annotation that wires the below defined Author
// instance into this bean
Author author;
String title = "It";
Author getAuthor() { return author; }
String getTitle() { return title; }
}
@Component // The annotation that specifies to include
// this as a bean in the ApplicationContext
class Author {
String firstName = "Steven";
String lastName = "King";
String getFirstName() { return firstName; }
String getLastName() { return lastName; }
}
ApplicationContext बूटस्ट्रैपिंग
जावा विन्यास
कॉन्फ़िगरेशन वर्ग को केवल एक वर्ग होना चाहिए जो आपके एप्लिकेशन के क्लासपाथ पर हो और आपके एप्लिकेशन मुख्य वर्ग को दिखाई दे।
class MyApp {
public static void main(String[] args) throws Exception {
AnnotationConfigApplicationContext appContext =
new AnnotationConfigApplicationContext(MyConfig.class);
// ready to retrieve beans from appContext, such as myObject.
}
}
@Configuration
class MyConfig {
@Bean
MyObject myObject() {
// ...configure myObject...
}
// ...define more beans...
}
Xml विन्यास
कॉन्फ़िगरेशन xml फ़ाइल को केवल आपके एप्लिकेशन के क्लासपाथ पर होना चाहिए।
class MyApp {
public static void main(String[] args) throws Exception {
ClassPathXmlApplicationContext appContext =
new ClassPathXmlApplicationContext("applicationContext.xml");
// ready to retrieve beans from appContext, such as myObject.
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!-- applicationContext.xml -->
<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.xsd">
<bean id="myObject" class="com.example.MyObject">
<!-- ...configure myObject... -->
</bean>
<!-- ...define more beans... -->
</beans>
Autowiring
Autowiring को यह जानने की जरूरत है कि एनोटेटेड बीन्स ( @Component
) के लिए कौन से बेस पैकेज को स्कैन करना है। यह #scan(String...)
विधि के माध्यम से निर्दिष्ट किया गया है।
class MyApp {
public static void main(String[] args) throws Exception {
AnnotationConfigApplicationContext appContext =
new AnnotationConfigApplicationContext();
appContext.scan("com.example");
appContext.refresh();
// ready to retrieve beans from appContext, such as myObject.
}
}
// assume this class is in the com.example package.
@Component
class MyObject {
// ...myObject definition...
}