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]