spring
ApplicationContext-Konfiguration
Suche…
Bemerkungen
Spring hat es so gemacht, dass die Konfiguration eines ApplicationContext
extrem flexibel ist. Es gibt zahlreiche Möglichkeiten, jede Art von Konfiguration anzuwenden, und alle können gut gemischt und zusammengefügt werden.
Java-Konfiguration ist eine Form der expliziten Konfiguration. Eine mit @Configuration
versehene Klasse @Configuration
wird verwendet, um die Beans anzugeben, die Bestandteil des ApplicationContext
, und um die Abhängigkeiten der einzelnen Beans zu definieren und zu verbinden.
Die XML-Konfiguration ist eine Form der expliziten Konfiguration. Ein bestimmtes XML-Schema wird verwendet, um die Beans zu definieren, die Bestandteil des ApplicationContext
. Das gleiche Schema wird verwendet, um die Abhängigkeiten der einzelnen Bean zu definieren und zu verknüpfen.
Autowiring ist eine Form der automatischen Konfiguration. In Klassendefinitionen werden bestimmte Annotationen verwendet, um festzulegen, welche Beans Teil des ApplicationContext
, und andere Annotationen werden verwendet, um die Abhängigkeiten dieser Beans zu verknüpfen.
Java-Konfiguration
Die Java-Konfiguration wird normalerweise durch Anwenden der Annotation @Configuration
auf eine Klasse ausgeführt, um @Configuration
, dass eine Klasse Bean-Definitionen enthält. Die Bean-Definitionen werden durch Anwenden der @Bean
Annotation auf eine Methode angegeben, die ein Objekt zurückgibt.
@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-Konfiguration
Die XML-Konfiguration wird normalerweise durch Definieren von Beans in einer XML-Datei unter Verwendung des speziellen beans
Schemas von Spring durchgeführt. Unter dem Root- beans
Element würde eine typische Bean-Definition mit dem bean
Subelement ausgeführt.
<?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;
}
}
Autowerbung
Die automatische Einstellung wird mithilfe einer Sterotyp- Annotation durchgeführt, um anzugeben, welche Klassen Beans im ApplicationContext
, und mithilfe der Annotationen Autowired
und Value
, um Bean-Abhängigkeiten anzugeben. Das Besondere an der automatischen Einstellung ist, dass es keine externe ApplicationContext
Definition gibt, da dies alles innerhalb der Klassen erfolgt, die die Beans selbst sind.
@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; }
}
Starten Sie den ApplicationContext
Java Config
Die Konfigurationsklasse muss nur eine Klasse sein, die sich im Klassenpfad Ihrer Anwendung befindet und für die Hauptklasse Ihrer Anwendung sichtbar ist.
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-Konfig
Die Konfigurations-XML-Datei muss sich nur im Klassenpfad Ihrer Anwendung befinden.
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>
Autowerbung
Autowiring muss wissen, welche Basispakete nach kommentierten Beans ( @Component
) @Component
. Dies wird über die Methode #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...
}