Struts2 a un conteneur DI en interne, qui peut être lu à partir du fichier de configuration qu'il utilise et instancier la classe spécifiée. La fonction du conteneur DI peut être remplacée par un autre conteneur DI, et le cadre Spring et JSR-330 (Guice) peuvent également être utilisés. Le plug-in Struts2 est préparé pour chaque conteneur, donc si vous souhaitez utiliser DI de Spring Framework, par exemple, installez le plug-in Spring.
Les fonctionnalités suivantes peuvent être obtenues en installant le plug-in Spring.
… Et que ** la plupart peuvent être remplacés par le framework Spring et les sous-projets Spring **.
Malheureusement, il ne fournit pas les fonctions de Spring Boot, mais il a des fonctions plus puissantes que le conteneur standard Struts2 DI, il n'y a donc aucune raison de ne pas l'utiliser. La version Spring correspondante est jusqu'à la série 4.2 dans Struts2 officiel, mais en fait, les séries 4.3 et ultérieures sont également disponibles jusqu'à présent.
C'est facile à installer, il suffit d'obtenir le plug-in et d'ajouter les paramètres.
Introduit exactement le même plugin Struts2-Spring que la version Struts2. Ce qui suit est le cas lors de la spécification avec maven. Ajouter à l'élément enfant de <dependencies>
.
pom.xml
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
<version>${struts2.version}</version>
</dependency>
Il y a deux modifications au fichier de configuration.
Tout d'abord, ajoutez la ligne suivante à struts.properties, qui est l'un des paramètres Struts2. L'emplacement est arbitraire.
struts.properties
struts.objectFactory=org.apache.struts2.spring.StrutsSpringObjectFactory
Ensuite, définissez le contexte et l'écouteur Spring dans web.xml (descripteur de déploiement). Les paramètres suivants permettent de lire le chemin de classe /spring/applicationContext.xml et le fichier xml commençant par applicationContext- comme fichier de paramètres Spring.
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>
C'est tout pour les paramètres à utiliser. Après cela, définissez applicationContext.xml pour enregistrer les beans à mettre dans la gestion Spring.
Les classes sous gestion Spring peuvent être utilisées par @ Autowired
dans la classe Action. L'exemple suivant est un exemple de recherche de liste simple.
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;
}
La classe Service (ProductService) utilisée à partir de cette classe Action renvoie une liste fixe comme celle-ci:
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", "Prototype X-290PA1", 10, true, true),
new SampleProduct().setProduct("A-2", "Prototype X-290PA2", 20, true, true),
new SampleProduct().setProduct("B-3", "Prototype X-B3", 10, true, true),
new SampleProduct().setProduct("B-4", "Prototype X-B4", 30, true, true),
new SampleProduct().setProduct("C-5", "Prototype X-C5", 10, true, false),
new SampleProduct().setProduct("C-6", "Prototype X-C6", 40, true, false),
new SampleProduct().setProduct("D-7", "Prototype X-D7", 10, false, true),
new SampleProduct().setProduct("D-8", "Prototype X-D8", 50, false, true),
new SampleProduct().setProduct("E-9", "Prototype X-E9", 10, true, true),
new SampleProduct().setProduct("Z-1000", "Prototype Z-1000", 0, false, false)
);
return resultList;
}
}
L'exemple de produit qui apparaît ici est un simple objet de transfert de données. Puisqu'il s'agit d'un résultat de recherche, il peut être converti en objet de valeur.
Malheureusement, JavaConfig ne peut pas être utilisé, définissez-le dans le fichier xml. Comme l'analyse des composants peut être utilisée, les beans peuvent être enregistrés en même temps.
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"
> <!--Définition de la classe de service à gérer par Spring-->
<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>
La cible de l'analyse des composants est la classe avec l'annotation @ Service
dans le package de base.
C'est tout pour les paramètres. C'est facile une fois que vous l'avez fait v (・ ω ・ |
https://github.com/A-pZ/struts2-spring-sample
Vous pouvez également utiliser Thymeleaf3 de Struts2. Vous ne pouvez pas du tout utiliser les balises Struts2, mais Thymeleaf facilitera l'écriture d'une vue. Ce sera très utile lors du passage du framework Struts2 au framework Spring, etc.
http://qiita.com/alpha_pz/items/5a43b4abb07141becbcd
Recommended Posts