Aller au contenu

Framework Spring/Configuration par annotations

Un livre de Wikilivres.
Version datée du 22 mai 2020 à 18:07 par DavidL (discussion | contributions)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)

Spring offre la possibilité lier les beans via des annotations dans le code et non via le fichier de configuration xml. On peut prendre l'exemple d'une classe MessageDisplayer faisant appel à une autre classe MessageDisplayer2. Cette relation n'a alors pas besoin d'être spécifiquement indiquée dans le fichier de Beans :

<?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-3.0.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-3.0.xsd">
	<context:annotation-config />
	<bean class="mainPackage.MessageDisplayer">
	</bean>
</beans>

Classe principale :

package mainPackage;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.support.ClassPathXmlApplicationContext;

@ComponentScan(basePackages = "mainPackage")
public class MainClass
{
	public static void main(String[] args)
	{
		ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("Beans.xml");
		MessageDisplayer messageDisplayer =  classPathXmlApplicationContext.getBean(MessageDisplayer.class);
		messageDisplayer.setMessage("test");
		messageDisplayer.displayMessage();
		classPathXmlApplicationContext.close();
	}
}

Première classe d'affichage :

package mainPackage;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.stereotype.Component;

@Component
@ComponentScan("mainPackage")
public class MessageDisplayer
{
	@Autowired
	MessageDisplayer2 messageDisplayer2;
	
	private String message;

	public String getMessage()
	{
		return message;
	}

	public void setMessage(String message)
	{
		this.message = message;
	}

	public void displayMessage()
	{
		System.out.println("message from MessageDisplayer : " + message);
		messageDisplayer2.setMessage("test2");
		messageDisplayer2.displayMessage();
	}
}


Seconde classe d'affichage, appelée par la première :

package mainPackage;

import org.springframework.stereotype.Component;

@Component
public class MessageDisplayer2
{
	private String message;

	public String getMessage()
	{
		return message;
	}

	public void setMessage(String message)
	{
		this.message = message;
	}

	public void displayMessage()
	{
		System.out.println("message from MessageDisplayer2 : " + message);
	}
}

Affichage du résultat :

mai 09, 2018 5:57:39 PM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFOS: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@2328c243: startup date [Wed May 09 17:57:39 CEST 2018]; root of context hierarchy
mai 09, 2018 5:57:39 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFOS: Loading XML bean definitions from class path resource [Beans.xml]
message from MessageDisplayer : test
message from MessageDisplayer2 : test2
mai 09, 2018 5:57:40 PM org.springframework.context.support.AbstractApplicationContext doClose
INFOS: Closing org.springframework.context.support.ClassPathXmlApplicationContext@2328c243: startup date [Wed May 09 17:57:39 CEST 2018]; root of context hierarchy