<?xml version="1.0" encoding="UTF-8"?><rss
version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
xmlns:media="http://search.yahoo.com/mrss/"
> <channel><title>Commentaires sur : Simplifiez votre configuration Spring 2.5 avec les annotations</title> <atom:link href="http://blog.xebia.fr/2008/08/08/simplifiez-votre-configuration-spring-25-avec-les-annotations/feed/" rel="self" type="application/rss+xml" /><link>http://blog.xebia.fr/2008/08/08/simplifiez-votre-configuration-spring-25-avec-les-annotations/</link> <description>J2EE, Agilité et SOA</description> <lastBuildDate>Fri, 10 Feb 2012 09:50:25 +0000</lastBuildDate> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=</generator> <item><title>Par : Blog Xebia France - Spring 3.0 - le grand nettoyage du printemps</title><link>http://blog.xebia.fr/2008/08/08/simplifiez-votre-configuration-spring-25-avec-les-annotations/#comment-7689</link> <dc:creator>Blog Xebia France - Spring 3.0 - le grand nettoyage du printemps</dc:creator> <pubDate>Wed, 08 Oct 2008 08:41:31 +0000</pubDate> <guid
isPermaLink="false">http://blog.xebia.fr/?p=564#comment-7689</guid> <description>[...] fait, rien de vraiment étonnant : Spring prépare le terrain depuis sa version 2.5, dont les principales nouveautés s&#8217;appuyaient sur les notions introduites par le JDK 5. Certains modules dépendaient déjà [...]</description> <content:encoded><![CDATA[<p>[...] fait, rien de vraiment étonnant : Spring prépare le terrain depuis sa version 2.5, dont les principales nouveautés s&#8217;appuyaient sur les notions introduites par le JDK 5. Certains modules dépendaient déjà [...]</p> ]]></content:encoded> </item> <item><title>Par : Manuel Eveno</title><link>http://blog.xebia.fr/2008/08/08/simplifiez-votre-configuration-spring-25-avec-les-annotations/#comment-6718</link> <dc:creator>Manuel Eveno</dc:creator> <pubDate>Wed, 13 Aug 2008 16:59:59 +0000</pubDate> <guid
isPermaLink="false">http://blog.xebia.fr/?p=564#comment-6718</guid> <description>@Philippe : Il est vrai qu&#039;il y a un alourdissement du code mais on y gagne aussi puisque les informations sont disponibles dans la classe elle-même plutôt que dans un fichier XML qui a tendance à grossir. Je dirais que c&#039;est un mal pour un bien ...
Selon les frameworks, la centralisation dans un fichier XML n&#039;apporte pas forcement grand chose.
Pour allèger le code des annotations, il est aussi possible de créer nos propres annotations qui permettent d&#039;injecter en AOP d&#039;autres annotations. On pourraient imaginer une annotation spécifique @BusinessService qui regrouperaient le @Transactionnal, le @Remote, (par exemple) etc...
@Olivier : L&#039;autre possibilité prise en charge par Spring est d&#039;utiliser l&#039;annotation @Qualifier qui permet de donner un qualificatif à une classe et de différencier deux classes en cas de conflit. Dans votre exemple, vous auriez pu ajouter un @Qualifier(value=&quot;userManagement&quot;) et @Qualifier(value=&quot;wareHousing&quot;) par exemple.
Merci pour vos encouragements !
Manuel@Xebia</description> <content:encoded><![CDATA[<p>@Philippe : Il est vrai qu&#8217;il y a un alourdissement du code mais on y gagne aussi puisque les informations sont disponibles dans la classe elle-même plutôt que dans un fichier XML qui a tendance à grossir. Je dirais que c&#8217;est un mal pour un bien &#8230;<br
/> Selon les frameworks, la centralisation dans un fichier XML n&#8217;apporte pas forcement grand chose.<br
/> Pour allèger le code des annotations, il est aussi possible de créer nos propres annotations qui permettent d&#8217;injecter en AOP d&#8217;autres annotations. On pourraient imaginer une annotation spécifique @BusinessService qui regrouperaient le @Transactionnal, le @Remote, (par exemple) etc&#8230;</p><p>@Olivier : L&#8217;autre possibilité prise en charge par Spring est d&#8217;utiliser l&#8217;annotation @Qualifier qui permet de donner un qualificatif à une classe et de différencier deux classes en cas de conflit. Dans votre exemple, vous auriez pu ajouter un @Qualifier(value=&nbsp;&raquo;userManagement&nbsp;&raquo;) et @Qualifier(value=&nbsp;&raquo;wareHousing&nbsp;&raquo;) par exemple.</p><p>Merci pour vos encouragements !<br
/> Manuel@Xebia</p> ]]></content:encoded> </item> <item><title>Par : Olivier Le Merdy</title><link>http://blog.xebia.fr/2008/08/08/simplifiez-votre-configuration-spring-25-avec-les-annotations/#comment-6700</link> <dc:creator>Olivier Le Merdy</dc:creator> <pubDate>Sat, 09 Aug 2008 00:17:31 +0000</pubDate> <guid
isPermaLink="false">http://blog.xebia.fr/?p=564#comment-6700</guid> <description>Merci à Xebia pour cet article fort intéressant.
Pour l&#039;injection de dépendance, j&#039;utilise quasi exclusivement l&#039;annotation standard @Resource qui permet en fait de faire aussi bien de l&#039;injection par type que par nom. La règle semble être la suivante:
* Si le nom de bean peut être résolu, il est utilisé.
* Sinon un lookup par type est fait et, si une instance unique du type voulu existe, elle est injectée.
Le nom du bean est résolu au choix:
* Avec la valeur de l&#039;attribut name de l&#039;annotation @Resource.
* Avec le nom du champs ou de la propriété JavaBean décorée par l&#039;annotation.
Quant au nom d&#039;un bean déclaré à l&#039;aide d&#039;une annotation @Repository/@Controller/@Component/@Service, il est égal:
* A la valeur de l&#039;attribut value de l&#039;annotation si elle est renseignée.
* Au nom simple de la classe avec la première lettre en casse réduite.
Ainsi, on pourra
// Defaults to &quot;fooAction&quot; bean name
@Component
public class FooAction implements Action {
...
}
@Component(&quot;notFooAction&quot;)
public class BarAction implements Action {
...
}
@Component
public class MyUniqueActionBar {
// Resolves injection from the field name
@Resource
private Action fooAction;
// Resolves injection from the annotation attribute value
// We inject the same instance here!
@Resource(&quot;fooAction&quot;)
private Action anotherFooAction
// Inject from the attribute value
@Resource(&quot;notFooAction&quot;)
private Action anotherBarAction;
// WARNING!! This last injection will NOT work
// No bean name matches
// And no unique instance of type Action exists
@Resource
private Action barAction;
}
public class MyFrame extends JFrame {
// Will work if we assume there is only one bean of type MyUniqueActionBar
@Resource
private MyUniqueActionBar actionBar
}
Pour avoir réalisé des portions de code amenées à changer très fréquemment, cette méthode réduit énormément le nombre de lignes pour déclarer et injecter nos beans. Cela est particulièrement utile en prototypage.
Si la base de code devient particulièrement importante et que des beans déclarés par annotations portent le même nom simple de classe (rendant inutile la génération de nom automatique), il peut être intéressant d&#039;utiliser des constantes pour expliciter le nom des beans (cette solution a ses propres inconvénients en termes de découplage).
Ainsi:
package warehousing;
public interface FooService {
String BEAN_NAME = &quot;warehousing.fooService&quot;;
}
package usermanagement;
public interface FooService {
String BEAN_NAME = &quot;userManagement.fooService&quot;;
..
}
@Service(usermanagement.MyService.BEAN_NAME)
public class MyFooService implements usermanagement.FooService {
..
}
@Controller
public class MyController {
@Resource(name=usermanagement.FooService.BEAN_NAME)
private usermanagement.FooService usermanagementFooService;
@Resource(name=warehousing.FooService.BEAN_NAME)
private warehousing.FooService warehousingFooService;
}
Merci à Xebia pour cet article!</description> <content:encoded><![CDATA[<p>Merci à Xebia pour cet article fort intéressant.</p><p>Pour l&#8217;injection de dépendance, j&#8217;utilise quasi exclusivement l&#8217;annotation standard @Resource qui permet en fait de faire aussi bien de l&#8217;injection par type que par nom. La règle semble être la suivante:<br
/> * Si le nom de bean peut être résolu, il est utilisé.<br
/> * Sinon un lookup par type est fait et, si une instance unique du type voulu existe, elle est injectée.</p><p>Le nom du bean est résolu au choix:<br
/> * Avec la valeur de l&#8217;attribut name de l&#8217;annotation @Resource.<br
/> * Avec le nom du champs ou de la propriété JavaBean décorée par l&#8217;annotation.</p><p>Quant au nom d&#8217;un bean déclaré à l&#8217;aide d&#8217;une annotation @Repository/@Controller/@Component/@Service, il est égal:<br
/> * A la valeur de l&#8217;attribut value de l&#8217;annotation si elle est renseignée.<br
/> * Au nom simple de la classe avec la première lettre en casse réduite.</p><p>Ainsi, on pourra</p><p>// Defaults to &laquo;&nbsp;fooAction&nbsp;&raquo; bean name<br
/> @Component<br
/> public class FooAction implements Action {<br
/> &#8230;<br
/> }</p><p>@Component(&laquo;&nbsp;notFooAction&nbsp;&raquo;)<br
/> public class BarAction implements Action {<br
/> &#8230;<br
/> }</p><p>@Component<br
/> public class MyUniqueActionBar {</p><p> // Resolves injection from the field name<br
/> @Resource<br
/> private Action fooAction;</p><p> // Resolves injection from the annotation attribute value<br
/> // We inject the same instance here!<br
/> @Resource(&laquo;&nbsp;fooAction&nbsp;&raquo;)<br
/> private Action anotherFooAction</p><p> // Inject from the attribute value<br
/> @Resource(&laquo;&nbsp;notFooAction&nbsp;&raquo;)<br
/> private Action anotherBarAction;</p><p> // WARNING!! This last injection will NOT work<br
/> // No bean name matches<br
/> // And no unique instance of type Action exists<br
/> @Resource<br
/> private Action barAction;</p><p>}</p><p>public class MyFrame extends JFrame {</p><p> // Will work if we assume there is only one bean of type MyUniqueActionBar<br
/> @Resource<br
/> private MyUniqueActionBar actionBar</p><p>}</p><p>Pour avoir réalisé des portions de code amenées à changer très fréquemment, cette méthode réduit énormément le nombre de lignes pour déclarer et injecter nos beans. Cela est particulièrement utile en prototypage.</p><p>Si la base de code devient particulièrement importante et que des beans déclarés par annotations portent le même nom simple de classe (rendant inutile la génération de nom automatique), il peut être intéressant d&#8217;utiliser des constantes pour expliciter le nom des beans (cette solution a ses propres inconvénients en termes de découplage).</p><p>Ainsi:</p><p>package warehousing;<br
/> public interface FooService {</p><p> String BEAN_NAME = &laquo;&nbsp;warehousing.fooService&nbsp;&raquo;;</p><p>}</p><p>package usermanagement;<br
/> public interface FooService {</p><p> String BEAN_NAME = &laquo;&nbsp;userManagement.fooService&nbsp;&raquo;;</p><p> ..<br
/> }</p><p>@Service(usermanagement.MyService.BEAN_NAME)<br
/> public class MyFooService implements usermanagement.FooService {</p><p> ..</p><p>}</p><p>@Controller<br
/> public class MyController {</p><p> @Resource(name=usermanagement.FooService.BEAN_NAME)<br
/> private usermanagement.FooService usermanagementFooService;</p><p> @Resource(name=warehousing.FooService.BEAN_NAME)<br
/> private warehousing.FooService warehousingFooService;</p><p>}</p><p>Merci à Xebia pour cet article!</p> ]]></content:encoded> </item> <item><title>Par : Julien Dubois</title><link>http://blog.xebia.fr/2008/08/08/simplifiez-votre-configuration-spring-25-avec-les-annotations/#comment-6693</link> <dc:creator>Julien Dubois</dc:creator> <pubDate>Fri, 08 Aug 2008 16:27:56 +0000</pubDate> <guid
isPermaLink="false">http://blog.xebia.fr/?p=564#comment-6693</guid> <description>Bonjour,
Excellent article, comme toujours chez Xebia :-)
Pour répondre à Philippe, il est toujours possible de configurer aspectj ou Hibernate en utilisant une configuration XML.
Pour aspectj, en particulier, cela peut-être plus simple d&#039;utiliser des annotations, mais il est vrai que cela &quot;pollue&quot; un peu de le code, comme vous dites.
En fait, nous proposons les deux options (XML ou annotations), et même de faire un mix des deux suivant vos besoins. Ceci dit, nous proposons un framework générique avec de nombreuses options, à vous de voir ce qui est le mieux pour votre projet.
C&#039;est à ce niveau que toute l&#039;expertise d&#039;une société telle que Xebia (par ailleurs partenaire SpringSource) peut vous aider : nous fournissons les outils, ils vous aident à les utiliser au mieux.
Cordialement,
Julien Dubois.</description> <content:encoded><![CDATA[<p>Bonjour,</p><p>Excellent article, comme toujours chez Xebia <img
src='http://blog.xebia.fr/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /></p><p>Pour répondre à Philippe, il est toujours possible de configurer aspectj ou Hibernate en utilisant une configuration XML.<br
/> Pour aspectj, en particulier, cela peut-être plus simple d&#8217;utiliser des annotations, mais il est vrai que cela &laquo;&nbsp;pollue&nbsp;&raquo; un peu de le code, comme vous dites.</p><p>En fait, nous proposons les deux options (XML ou annotations), et même de faire un mix des deux suivant vos besoins. Ceci dit, nous proposons un framework générique avec de nombreuses options, à vous de voir ce qui est le mieux pour votre projet.</p><p>C&#8217;est à ce niveau que toute l&#8217;expertise d&#8217;une société telle que Xebia (par ailleurs partenaire SpringSource) peut vous aider : nous fournissons les outils, ils vous aident à les utiliser au mieux.</p><p>Cordialement,</p><p>Julien Dubois.</p> ]]></content:encoded> </item> <item><title>Par : Waddle</title><link>http://blog.xebia.fr/2008/08/08/simplifiez-votre-configuration-spring-25-avec-les-annotations/#comment-6691</link> <dc:creator>Waddle</dc:creator> <pubDate>Fri, 08 Aug 2008 16:24:39 +0000</pubDate> <guid
isPermaLink="false">http://blog.xebia.fr/?p=564#comment-6691</guid> <description>Bonjour,
Je trouve votre article très instructif. Toutefois, je suis plutôt allergique aux annotations en règle générale à cause de l&#039;obscurcissement du code induit.
Dans votre dernier paragraphe vous indiquer que l&#039;AOP ou JPA &quot;peuvent&quot; rester dans le fichier XML. Pourquoi ?
Selon moi, les annotations n&#039;améliorent pas la lisibilité du code, surtout lorsqu&#039;on passe tous les frameworks (et ils sont nombreux au sein d&#039;un projet : W-S, ORM, MVC, AOP, etc.) en annotations. De plus, la configuration d&#039;un framework gagne à ne pas être éparpiller dans le code, mais centralisée dans un fichier de configuration, non ?
De plus, lorsque je vois des beans contenant des infos relevant de problématiques techniques transversales et non métier, je me dis qu&#039;on retourne dans la philosophie EJB de pollution du code.
Que pensez-vous plus généralement des annotations, dans quelle(s) situation(s) pensez-vous qu&#039;elles apportent une réelle valeur ajoutée ?
Excellent blog BTW, continuez comme ça :-) </description> <content:encoded><![CDATA[<p>Bonjour,</p><p>Je trouve votre article très instructif. Toutefois, je suis plutôt allergique aux annotations en règle générale à cause de l&#8217;obscurcissement du code induit.<br
/> Dans votre dernier paragraphe vous indiquer que l&#8217;AOP ou JPA &laquo;&nbsp;peuvent&nbsp;&raquo; rester dans le fichier XML. Pourquoi ?<br
/> Selon moi, les annotations n&#8217;améliorent pas la lisibilité du code, surtout lorsqu&#8217;on passe tous les frameworks (et ils sont nombreux au sein d&#8217;un projet : W-S, ORM, MVC, AOP, etc.) en annotations. De plus, la configuration d&#8217;un framework gagne à ne pas être éparpiller dans le code, mais centralisée dans un fichier de configuration, non ?<br
/> De plus, lorsque je vois des beans contenant des infos relevant de problématiques techniques transversales et non métier, je me dis qu&#8217;on retourne dans la philosophie EJB de pollution du code.</p><p>Que pensez-vous plus généralement des annotations, dans quelle(s) situation(s) pensez-vous qu&#8217;elles apportent une réelle valeur ajoutée ?</p><p>Excellent blog BTW, continuez comme ça <img
src='http://blog.xebia.fr/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /></p> ]]></content:encoded> </item> <item><title>Par : Jawher</title><link>http://blog.xebia.fr/2008/08/08/simplifiez-votre-configuration-spring-25-avec-les-annotations/#comment-6690</link> <dc:creator>Jawher</dc:creator> <pubDate>Fri, 08 Aug 2008 14:47:27 +0000</pubDate> <guid
isPermaLink="false">http://blog.xebia.fr/?p=564#comment-6690</guid> <description>Salut et merci pour le billet,
A propos du besoin de la configuration XML pour activer les annotations, j&#039;ai pu trouver une méthode pour s&#039;en passer que je décris ici:
http://blog.developpez.com/djo-mos?title=de_la_di_avec_spring_2_5_sans_xml_java_s#more5346
Bon, c&#039;est pas très orthodoxe, et on se rapproche de Guice, mais c&#039;est juste un proof of concept :D
Cordialement.</description> <content:encoded><![CDATA[<p>Salut et merci pour le billet,<br
/> A propos du besoin de la configuration XML pour activer les annotations, j&#8217;ai pu trouver une méthode pour s&#8217;en passer que je décris ici:</p><p><a
href="http://blog.developpez.com/djo-mos?title=de_la_di_avec_spring_2_5_sans_xml_java_s#more5346" rel="nofollow">http://blog.developpez.com/djo-mos?title=de_la_di_avec_spring_2_5_sans_xml_java_s#more5346</a></p><p> Bon, c&#8217;est pas très orthodoxe, et on se rapproche de Guice, mais c&#8217;est juste un proof of concept <img
src='http://blog.xebia.fr/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /></p><p>Cordialement.</p> ]]></content:encoded> </item> </channel> </rss>
