Did you read http://cwiki.apache.org/WICKET/spring.html and see why
@SpringBean is important?

The problem is keeping a reference to the service. You might be good
enough to understand that, but how good do you trust your co-workers,
and even new members joining your team?

Martijn

On Sun, Aug 31, 2008 at 8:23 PM, Sasha Ovsankin
<[EMAIL PROTECTED]> 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]
>
>



-- 
Become a Wicket expert, learn from the best: http://wicketinaction.com
Apache Wicket 1.3.4 is released
Get it now: http://www.apache.org/dyn/closer.cgi/wicket/1.3.

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

Reply via email to