File: context.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="dataService" class="DataServiceImpl">
<lookup-method name="getDataDao" bean="dataDao"/>
</bean>
<bean id="dataDao" singleton="false"
class="StatefulDataDataDaoImpl">
</bean>
</beans>
File: Main.java
import java.util.Date;
import java.util.GregorianCalendar;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
class Main {
public static void main(String args[]) throws Exception {
ApplicationContext ctx = new ClassPathXmlApplicationContext(
"context.xml");
DataService ws = (DataService) ctx.getBean("dataService");
Double high = ws.getHistoricalHigh(new GregorianCalendar(2004, 0, 1).getTime());
System.out.println("High was: " + high);
ws = new DataServiceImpl() {
protected DataDao getDataDao() {
return null;
}
};
}
}
abstract class DataServiceImpl implements DataService {
protected abstract DataDao getDataDao();
public Double getHistoricalHigh(Date date) {
DataData wd = getDataDao().find(date);
if (wd != null)
return new Double(wd.getHigh());
return null;
}
}
interface DataService {
Double getHistoricalHigh(Date date);
}
class DataData {
Date date;
double low;
double high;
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public double getLow() {
return low;
}
public void setLow(double low) {
this.low = low;
}
public double getHigh() {
return high;
}
public void setHigh(double high) {
this.high = high;
}
}
interface DataDao {
DataData find(Date date);
DataData save(Date date);
DataData update(Date date);
}
class StatefulDataDataDaoImpl implements DataDao {
public DataData find(Date date) {
DataData wd = new DataData();
wd.setDate((Date) date.clone());
wd.setLow(5);
wd.setHigh(15);
return wd;
}
public DataData save(Date date) {
throw new UnsupportedOperationException("This class uses static data only");
}
public DataData update(Date date) {
throw new UnsupportedOperationException("This class uses static data only");
}
}
Download: Spring-MethodLoopup.zip( 2,895 k)