Każda wtyczka ma własny kontekst aplikacji (ApplicationContext), w którym rejestrowane są jej komponenty, kontrolery, importowane serwisy etc. Dzięki temu wtyczka może być pisana tak jak każda inna aplikacja wykorzystująca SpringFramework.
Kontekst może być konfigurowany na 2 sposoby:
Jeżeli wtyczka zawiera plik /META-INF/spring/plugin-context.xml, to na jego podstawie tworzony jest XmlOsgiPluginContext.
Jeżeli projekt buduje Maven, plik powinien znajdować się w src/main/resources/META-INF/spring/plugin-context.xml |
Plik konfiguracji jest standardowym plikiem konfiguracji kontekstu aplikacji springframework i może wyglądać następująco:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd"> <!-- Włączenie skanowania wtyczki w poszukiwaniu @Component --> <context:component-scan base-package="com.suncode.plugin.tutorial" /> </beans> |
Konfiguracja poprzez plik XML ma swoje plusy i minusy. W ostateczności wszystko zależy od gustu autora wtyczki. |
Od SpringFramework 3 możliwa jest konfiguracja kontekstu aplikacji w całości używając klas Java oznaczonych adnotacją @Configuration.
Jeżeli mechanizm wtyczek nie znajdzie pliku /META-INF/spring/plugin-context.xml to stworzy domyślny kontekst aplikacji, który skanuje całą wtyczkę w poszukiwaniu klas @Component (a więc również @Configuration).
Klasa konfiguracyjna w takim przypadku nie jest w ogóle potrzebna, jednak zazwyczaj chcemy dodatkowe funkcjonalności jak dostęp do bazy danych, transakcyjność etc. |
Przykładowa konfiguracja (rejestruje tylko 1 bean klasy String):
package com.suncode.plugin.tutorial; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class Config { @Bean public String someString() { return "asd"; } } |