Struts2 verfügt intern über einen DI-Container, der aus der verwendeten Konfigurationsdatei gelesen und die angegebene Klasse instanziiert werden kann. Die Funktion des DI-Containers kann durch einen anderen DI-Container ersetzt werden, und das Spring-Framework und JSR-330 (Guice) können ebenfalls verwendet werden. Das Struts2-Plug-In ist für jeden Container vorbereitet. Wenn Sie also beispielsweise DI of Spring Framework verwenden möchten, installieren Sie das Spring-Plug-In.
Die folgenden Funktionen erhalten Sie, indem Sie das Spring-Plug-In installieren.
… Und das ** die meisten können durch Spring Framework und Spring Subprojekte ** ersetzt werden.
Leider bietet es nicht die Funktionen von Spring Boot, verfügt jedoch über leistungsstärkere Funktionen als der Standard-Struts2-DI-Container, sodass es keinen Grund gibt, ihn nicht zu verwenden. Die entsprechende Spring-Version ist bis zu 4.2 in der Struts2-Version, aber tatsächlich sind auch 4.3-Serien und höher bisher verfügbar.
Es ist einfach zu installieren, holen Sie sich einfach das Plug-In und fügen Sie die Einstellungen hinzu.
Führt genau das gleiche Struts2-Spring-Plugin wie die Struts2-Version ein. Das Folgende ist der Fall, wenn Sie mit maven angeben. Fügen Sie dem untergeordneten Element von "<Abhängigkeiten>" hinzu.
pom.xml
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
<version>${struts2.version}</version>
</dependency>
Es gibt zwei Änderungen an der Konfigurationsdatei.
Fügen Sie zunächst die folgende Zeile zu struts.properties hinzu. Dies ist eine der Struts2-Einstellungen. Der Ort ist beliebig.
struts.properties
struts.objectFactory=org.apache.struts2.spring.StrutsSpringObjectFactory
Legen Sie als Nächstes den Spring-Kontext und den Listener in web.xml (Deployment-Deskriptor) fest. Die folgenden Einstellungen dienen zum Lesen des Klassenpfads /spring/applicationContext.xml und der XML-Datei, beginnend mit applicationContext- als Spring-Einstellungsdatei.
web.xml
<web-app>
<display-name>prototype_app</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/applicationContext.xml,classpath:spring/applicationContext-*.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
</web-app>
Das ist alles für die Einstellungen zu verwenden. Setzen Sie danach applicationContext.xml, um die Beans zu registrieren, die in die Spring-Verwaltung gestellt werden sollen.
Klassen unter Spring Management können von "@ Autowired" in der Action-Klasse verwendet werden. Das folgende Beispiel ist ein einfaches Beispiel für eine Listensuche.
SampleAction.java
@Namespace("/")
@Results({@Result(name=ActionSupport.SUCCESS, location="list")})
@Log4j2
public class DisplayListAction extends ActionSupport {
@Action("list")
public String execute() throws Exception {
products = service.search();
log.info("- search:{}" , products);
return SUCCESS;
}
@Autowired
ProductService service;
@Getter @Setter
List<SampleProduct> products;
}
Die von dieser Action-Klasse verwendete Service-Klasse (ProductService) gibt eine feste Liste wie folgt zurück:
ProductService.java
import java.util.Arrays;
import java.util.List;
import org.springframework.stereotype.Service;
@Service
public class ProductService {
public List<SampleProduct> search() {
List<SampleProduct> resultList =
Arrays.asList(
new SampleProduct().setProduct("A-1", "Prototyp X.-290PA1", 10, true, true),
new SampleProduct().setProduct("A-2", "Prototyp X.-290PA2", 20, true, true),
new SampleProduct().setProduct("B-3", "Prototyp X.-B3", 10, true, true),
new SampleProduct().setProduct("B-4", "Prototyp X.-B4", 30, true, true),
new SampleProduct().setProduct("C-5", "Prototyp X.-C5", 10, true, false),
new SampleProduct().setProduct("C-6", "Prototyp X.-C6", 40, true, false),
new SampleProduct().setProduct("D-7", "Prototyp X.-D7", 10, false, true),
new SampleProduct().setProduct("D-8", "Prototyp X.-D8", 50, false, true),
new SampleProduct().setProduct("E-9", "Prototyp X.-E9", 10, true, true),
new SampleProduct().setProduct("Z-1000", "Prototyp Z.-1000", 0, false, false)
);
return resultList;
}
}
Das hier angezeigte Beispielprodukt ist ein einfaches Datenübertragungsobjekt. Da es sich um ein Suchergebnis handelt, kann es in ein Wertobjekt konvertiert werden.
Leider kann JavaConfig nicht verwendet werden. Definieren Sie es daher in der XML-Datei. Da der Komponentenscan verwendet werden kann, können Beans sofort registriert werden.
applicationContext-service.xml
<?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"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd"
default-autowire="byName"
> <!--Serviceklassendefinition, die von Spring verwaltet werden soll-->
<context:component-scan base-package="seren.struts2.sampleapp.service" use-default-filters ="false" >
<context:include-filter type="annotation" expression="org.springframework.stereotype.Service"/>
</context:component-scan>
</beans>
Das Ziel des Komponentenscans ist die Klasse mit der Annotation "@ Service" im Basispaket.
Das ist alles für die Einstellungen. Es ist einfach, wenn Sie es v (・ ω ・ |
https://github.com/A-pZ/struts2-spring-sample
Sie können auch Thymeleaf3 von Struts2 verwenden. Sie können Struts2-Tags überhaupt nicht verwenden, aber Thymeleaf erleichtert das Schreiben einer Ansicht. Dies ist sehr nützlich, wenn Sie von Struts2 zu Spring Framework usw. wechseln.
http://qiita.com/alpha_pz/items/5a43b4abb07141becbcd
Recommended Posts