Spring má dva hlavní způsoby konfigurace (XML a Javu), ale tři hlavní přístupy ke konfiguraci a každý z těchto přístupů má několik názvů.
- Konfigurace využívající XML (XML based configuration)
- XML konfigurační soubor a XML konfigurace (XML config and XML-driven/based configuration)
- XML konfigurační soubor a konfigurace anotacemi (XML config and annotation-driven/based configuration)
- Konfigurace využívající Javu
- Java konfigurační soubor a konfigurace anotacemi (Java config and annotation-driven/based configuration | Java based configuration | JavaConfig)
XML konfigurační soubor a XML konfigurace
V tomto příspěvku se podíváme na XML konfigurační soubor a XML konfigurace. V tomto případě se používá pro konfiguraci XML soubor (beans.xml), ve kterém jsou definovány beany.
Naše jednoduchá aplikace bude mít dvě rozhraní MessageService a SecurityService. Rozhraní MessageService bude mít metodu String getMessage() a SecurityService String encode(String text). Funkčnost aplikace je tato: nejdříve získá řetězec (metoda getMessage()) a ten potom zašifruje (metoda encode()). Vlastní způsob šifrování, implementovaný v SecurityServiceImpl, bude triviální. Všechny písmena e v textu změníme za € a všechna písmena s za §.
Struktura projektu
project ├───src │ ├───main │ │ ├───java │ │ │ └───cz │ │ │ └───vitfo │ │ │ │ Main.java │ │ │ │ MyApplication.java │ │ │ │ │ │ │ └───service │ │ │ │ MessageService.java │ │ │ │ SecurityService.java │ │ │ │ │ │ │ └───impl │ │ │ MessageServiceImpl.java │ │ │ SecurityServiceImpl.java │ │ │ │ │ └───resources │ │ beans.xml
Vytvoříme si třídu Main.java, ve které vytvoříme kontext Springu. Ve třídě Main.java budeme mít logiku naší aplikace.
beans.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="messageService" class="cz.vitfo.service.impl.MessageServiceImpl" />
<bean id="securityService" class="cz.vitfo.service.impl.SecurityServiceImpl" />
<bean id="myApplication" class="cz.vitfo.MyApplication">
<constructor-arg ref="messageService" />
<constructor-arg ref="securityService" />
</bean>
</beans>
Main.java
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main {
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
MyApplication application = context.getBean("myApplication", MyApplication.class);
application.start();
context.close();
}
}
MyApplication.java
import cz.vitfo.service.MessageService;
import cz.vitfo.service.SecurityService;
public class MyApplication {
private MessageService messageService;
private SecurityService securityService;
public MyApplication(MessageService messageService, SecurityService securityService) {
this.messageService = messageService;
this.securityService = securityService;
}
public void start() {
String message = messageService.getMessage();
String encoded = securityService.encode(message);
System.out.println(message);
System.out.println(encoded);
}
public MessageService getMessageService() {
return messageService;
}
public void setMessageService(MessageService messageService) {
this.messageService = messageService;
}
public SecurityService getSecurityService() {
return securityService;
}
public void setSecurityService(SecurityService securityService) {
this.securityService = securityService;
}
}
MessageService.java
public interface MessageService {
String getMessage();
}
MessageServiceImpl.java
import cz.vitfo.service.MessageService;
public class MessageServiceImpl implements MessageService {
public String getMessage() {
return "message";
}
}
SecurityService.java
public interface SecurityService {
String encode(String text);
}
SecurityServiceImpl.java
import cz.vitfo.service.SecurityService;
public class SecurityServiceImpl implements SecurityService {
private static final String e = "€";
private static final String s = "§";
public String encode(String text) {
text = text.replaceAll("e", e);
text = text.replaceAll("s", s);
return text;
}
}
Výsledek
message m€§§ag€
V tomto projektu je veškerá konfigurace v souboru beans.xml. V tomto souboru se také definují jednotlivé beany a také jejich závislosti (např. beany myApplication potřebuje v kontruktoru beany messageService a securityService).