Fixed SPR-5920 by implementing GenericInterfaceDrivenDependencyInjectionAspect

This commit is contained in:
Ramnivas Laddad
2009-07-12 05:58:55 +00:00
parent 7199fcc233
commit 29139dfd1a
2 changed files with 89 additions and 0 deletions

View File

@@ -194,6 +194,13 @@ public class BeanConfigurerTests extends TestCase {
assertNotNull("Interface driven injection didn't occur for direct construction", testOrder.mailSender);
}
public void testGenericInterfaceDrivenDependencyInjection() {
PricingStrategy injectedPricingStrategy = new PricingStrategy();
PricingStrategyDependencyInjectionAspect.aspectOf().setPricingStrategy(injectedPricingStrategy);
LineItem testLineItem = new LineItem();
assertSame("Generic interface driven injection didn't occur for direct construction", injectedPricingStrategy, testLineItem.pricingStrategy);
}
public void testInterfaceDrivenDependencyInjectionMultipleInterfaces() {
MailClientDependencyInjectionAspect.aspectOf().setMailSender(new JavaMailSenderImpl());
PaymentProcessorDependencyInjectionAspect.aspectOf().setPaymentProcessor(new PaymentProcessor());
@@ -509,6 +516,18 @@ public class BeanConfigurerTests extends TestCase {
}
}
private static aspect PricingStrategyDependencyInjectionAspect extends GenericInterfaceDrivenDependencyInjectionAspect<PricingStrategyClient> {
private PricingStrategy pricingStrategy;
public void configure(PricingStrategyClient bean) {
bean.setPricingStrategy(pricingStrategy);
}
public void setPricingStrategy(PricingStrategy pricingStrategy) {
this.pricingStrategy = pricingStrategy;
}
}
public static interface MailSenderClient {
public void setMailSender(MailSender mailSender);
}
@@ -521,6 +540,22 @@ public class BeanConfigurerTests extends TestCase {
}
public static interface PricingStrategyClient {
public void setPricingStrategy(PricingStrategy pricingStrategy);
}
public static class PricingStrategy {
}
public static class LineItem implements PricingStrategyClient {
private PricingStrategy pricingStrategy;
public void setPricingStrategy(PricingStrategy pricingStrategy) {
this.pricingStrategy = pricingStrategy;
}
}
public static class Order implements MailSenderClient, Serializable {
private transient MailSender mailSender;