Are you planning on serialising your DAOs?
How will you mock out your "Locator" for unit tests?

Regards - Cemal
http://www.jWeekend.co.uk http://jWeekend.co.uk 



Sasha O-2 wrote:
> 
> Dear All --
> 
> I was having an issue with @SpringBean injection -- my dao class was not 
> initialized properly with the dependent beans. I spent some time 
> exploring internals of CGLib and Spring Injections and then a thought 
> struck me: how really helpful is this injection?
> 
> Consider this code:
> 
>       class MyPage extends Page {
>          ...
>          @SpringBean
>          MyDAO dao;
>          ...
>       }
> 
> vs. this code:
> 
>       class MyPage {
>          ...
>          MyDAO dao= Locator.find("myDAO", MyDAO.class);
>          ...
>       }
> 
> The Locator is a  pretty straightforward guy who pulls 
> ApplicationContext out of thin air^^^^^ThreadLocal variable and looks up 
> on it, see the example code below.
> 
> The former uses annotations, CGLIB and delicate injection. The latter 
> uses nothing and is a lot simpler and robust. Aside from marginal 
> savings in typing I couldn't find any advantages of the former approach. 
> Can you?
> 
> Unless convinced otherwise, I am going to skip the @SpringBean 
> altogether and use the Locator thing in my application.
> 
> Thanks,
> -- Sasha
> 
> -----------------------------------------------------------------------
> public abstract class Locator {
>       
>       abstract Object find(String name);
>       
>       static Locator locator= null;
>       
>       public static Locator register(Locator inLocator) {
>               Locator result= locator;
>               locator= inLocator;
>               return result;
>       }
>       
>       public static class SpringLocator extends Locator {
>               ApplicationContext context= 
> WebApplicationContextUtils.getRequiredWebApplicationContext(
>                               WebApplication.get().getServletContext());
>               Object find(String name) {
>                       return context.getBean(name);
>               }
>       }
>       
>       /** To be called in the application initialization */
>       public static void registerSpringLocator() {
>               register(new SpringLocator());
>       }
>       
>       /** Use for unit tests */
>       public static class MockLocator extends Locator {
>               @Override
>               Object find(String name) {
>                       // TODO implement
>                       return null;
>               }
>       }
>       
>       public static<T> T find(String name, Class<T> clazz) {
>               Object found= locator.find(name);
>               if (found==null)
>                       return null;
>               return clazz.cast(found);
>       }
> }
> -----------------------------------------------------------------------
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 
> 
> 

-- 
View this message in context: 
http://www.nabble.com/%40SpringBean-injection----why-pretend--tp19244802p19244850.html
Sent from the Wicket - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to