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).