[weld-dev] How to make method injection when bean subclass is required in Weld?

Matej Novotny manovotn at redhat.com
Tue Aug 29 09:09:19 EDT 2017


Hi Alex,

no need to be sorry, you have come to the right place :)
As for your question, the simplest thing is probably to use qualifiers.

Create your own like this:

@Qualifier
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE, ElementType.PARAMETER, ElementType.FIELD, ElementType.METHOD })
public @interface MyQualifier {}


And then change your AdvancedFoo class to use the qualifier:

@Dependent
@MyQualifier
public class AdvancedFoo extends SimpleFoo {
}

And accordingly, the init method which uses injection should then look like this:

@Dependent
public class Parent extends Child {

  @Inject
  @Override
  protected void setFoo(@MyQualifier SimpleFoo foo) {
    super.setFoo(foo);
  }
}

Does this answer your question?

Matej

----- Original Message -----
> From: "Alex Sviridov" <ooo_saturn7 at mail.ru>
> To: "weld-dev" <weld-dev at lists.jboss.org>
> Sent: Tuesday, August 29, 2017 1:46:23 PM
> Subject: [weld-dev] How to make method injection when bean subclass is required in Weld?
> 
> Hi all,
> 
> I am really sorry for writing to this mailing list, but I checked all user
> forums and chats and saw that they are very old.
> 
> I would be very thankful if someone gives suggestion for solving the
> following problem.
> I have a child and parent class. Child has SimpleFoo, Parent needs Advaced
> foo. So,
> 
> @Dependent
> public class SimpleFoo {
> }
> 
> @Dependent
> public class AdvancedFoo extends SimpleFoo {
> }
> 
> @Dependent
> public class Child {
> 
> private SimpleFoo foo;
> 
> @Inject
> protected void setFoo(SimpleFoo foo) {
> this.foo = foo;
> }
> }
> 
> @Dependent
> public class Parent extends Child {
> 
> @Inject
> @Override
> protected void setFoo(SimpleFoo foo) { //How to inject here AdvancedFoo?
> super.setFoo(foo);
> }
> }
> 
> How to inject in Parent AdvancedFoo? I know that I can do it via constructor
> injection
> but I need method injection. How to do it? Can it be done without using names
> (like MyBean1)
> but only using classes (AdvancedFoo)?
> 
> Best regards, Alex
> 
> 
> 
> 
> 
> --
> Alex Sviridov
> 
> _______________________________________________
> weld-dev mailing list
> weld-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/weld-dev


More information about the weld-dev mailing list