05 May 2005

Spring XDoclet

I have been hand-coding the Spring's XML application context file or known as the bean definition for quite some time. Because I am too lazy to read thru the XDoclet documentation and due to the lack of examples, especially in the @spring.bean tag section. And due to "programmer's itch" I started to tinker with it this very night. And this is what I got.

Listing 1: is a very plain sample Interface



public interface MySampleService {


public void showSpring(String greetings);

}




Listing 2: I added a simple xdoclet tag defining the bean id for Spring application context in one of the implementation classes


/**
* @author Jared Odulio
* @spring.bean
* id="sample-service"
*
*/
public class MySampleServiceImpl implements MySampleService {



public void showSpring(String greetings) {
// TODO Auto-generated method stub
if (greetings == null){
System.out.println("My Sample Service");
}else{
System.out.println(greetings);
}
}

}




Listing 3: Another sample implementation class


/**
* @author Jared Odulio
* @spring.bean
* id="another-sample"
*
*/
public class AnotherService implements MySampleService {


public void showSpring(String greetings) {
// TODO Auto-generated method stub
if (greetings == null){
System.out.println("Another Sample Service");
}else{
System.out.println(greetings);
}
}

}




Listing 3: This is our Ant build.xml file



<project name="sample-proj" default="spring" basedir=".">

<property name="conf.dir" value="${basedir}${file.separator}conf"/>
<property name="src.dir" value="${basedir}${file.separator}src"/>
<taskdef name="springdoclet" classname="xdoclet.modules.spring.SpringDocletTask"/>
<taskdef name="doclet" classname="xdoclet.DocletTask"/>
<target name="spring">
<springdoclet destdir="${conf.dir}">
<fileset dir="${src.dir}"/>
<springxml destinationfile="appcontext.xml"/>
</springdoclet>

</target>

</project>



Listing 4: When we run Ant, this what we should have


<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans PUBLIC
"-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">

<beans
default-autowire="no"
default-lazy-init="false"
default-dependency-check="none"
>

<bean
id="another-sample"
class="AnotherService"
>

</bean>

<bean
id="sample-service"
class="MySampleServiceImpl"
>

</bean>

<!--
To include additional bean definitions for Spring in the generated
application context file, add a file to your XDoclet merge directory
called spring-beans.xml that contains the markup.
-->

</beans>



There you go! Bean definition file auto-generated by XDoclet.

Take note, under normal circumstances, the build.xml file should not look as the example on Listing 3, I used Eclipse to run this, so the necessary "path" and "pathelement" tags are not present in the build.xml file because I defined all the XDoclet-related libraries in the Ant Runtime Preferences. But those tags should be defined if the build.xml has to be run outside Eclipse. I am just too lazy to do that now. And I just came from a calorie-burning, heart-pounding squash tennis game at Kallang, I should say it's BAFTB (Better and Faster Than Badminton).

1 comment:

nox said...

pareng jared,

uy, meron na pala nito... thanks for the heads up and example... even just this one and plus @spring.property ok na ok na... :)


cheers!

nox