You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by "Igor Vaynberg (JIRA)" <ji...@apache.org> on 2010/11/02 22:49:05 UTC

[jira] Resolved: (WICKET-2781) Support @SpringBean injection into generic superclass

     [ https://issues.apache.org/jira/browse/WICKET-2781?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Igor Vaynberg resolved WICKET-2781.
-----------------------------------

    Resolution: Won't Fix
      Assignee: Igor Vaynberg

> Support @SpringBean injection into generic superclass
> -----------------------------------------------------
>
>                 Key: WICKET-2781
>                 URL: https://issues.apache.org/jira/browse/WICKET-2781
>             Project: Wicket
>          Issue Type: Improvement
>          Components: wicket-spring
>    Affects Versions: 1.4.7
>            Reporter: Erkki Lindpere
>            Assignee: Igor Vaynberg
>            Priority: Minor
>         Attachments: wicket-spring-inject-patch.txt
>
>
> It's possible to inject Spring Beans into a generic superclass, if the field type to be injected is a type variable. I will attach a patch that does this (I don't know if it's the best or most general implementation, but it works in my case). This allows us to reduce code in a wicket-spring project and it would be great if you could integrate this change into wicket-spring.
> This also allows better integration with Scala because it seems Scala initialization order is different enough from Java that it seems impossible to make a variable injected into a subclass of a generic superclass available to the generic superclass's constructor.
> Simplified example for the motivation:
> public abstract class EditPage<EntityType, RepoType extends IRepository<EntityType>> {
>   @SpringBean
>   RepoType repository;
>   ...
> }
> Concrete "edit pages" extend this and define EntityType and RepoType. Injecting in the superclass allows the subclasses to be very thin, which is great. I was not able to implement this in Scala (maybe there's some trick but I don't know), even if I replace the repostiory with: protected abstract RepoType getRepository() and implement this in a Scala subclass:
> class UserEditPage extends EditPage<User, UserRepo> {
>   @SpringBean
>   var repo: UserRepo = _
>   def getRepository = repo
> }
> when the superclass' constructor calls getRepository, it will get null (and sometimes method not found getRepository: IRepository, but that might be due to JRebel)

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.