[cdi-dev] [JBoss JIRA] (CDI-104) Support automatic dependency injection for non-managed objects

Antonin Stefanutti (JIRA) issues at jboss.org
Fri Sep 12 03:44:19 EDT 2014

    [ https://issues.jboss.org/browse/CDI-104?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13001707#comment-13001707 ] 

Antonin Stefanutti commented on CDI-104:

>From my understanding, this need has been addressed with [{{UnmanagedInstance}}|http://docs.jboss.org/cdi/api/1.1/javax/enterprise/inject/spi/Unmanaged.UnmanagedInstance.html] as documented in [Obtaining non-contextual instance|http://docs.jboss.org/cdi/spec/1.2/cdi-spec.html#bm_obtain_unmanaged_instance] in CDI 1.1. Isn't it?

> Support automatic dependency injection for non-managed objects
> --------------------------------------------------------------
>                 Key: CDI-104
>                 URL: https://issues.jboss.org/browse/CDI-104
>             Project: CDI Specification Issues
>          Issue Type: Feature Request
>          Components: Beans
>    Affects Versions: 1.0
>            Reporter: Dan Allen
>             Fix For: TBD
> Allow objects created using the "new" keyword (or created by some other means) to be injected automatically. 
> Conceptually it would look something like this: 
> @AutoInject 
> public class AccountService { 
>     private final Account account; 
>     @Inject 
>     private PaymentProcessor paymentProcessor; 
>     AccountService(Account account) { 
>         this.account = account; 
>     } 
>     public void doPayment(double amount) { 
>         paymentProcessor.processPayment(account, amount); 
>     } 
> } 
> We could then create the object using new and the fields will still be injected: 
> AccountService a = new AccountService(account); 
> a.doPayment(10);
> The inverse design would also be an option. An instance of Account could be retrieved from JPA and the AccountService would be injected into it during construction.
> To implement this feature may require a javaagent, which will modify the bytecode of @AutoInject annotated classes as they are loaded, so that the constructor bytecode looks up the values to inject and sets the injected field values appropriately. (There are other options suggested in the linked thread).
> The primary use case for this feature is to support rich domain models, though the usefulness of this feature extends beyond this case, so I don't think the feature should be dismissed if you don't agree with the rich domain models design.
> The feature also brings the "new" keyword back into the picture of modern programming. You can still create objects in the classic way, but benefit from modern programming model patterns (specifically CDI).
> Spring has a similar feature in it's AOP package: http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/aop.html#aop-atconfigurable

This message was sent by Atlassian JIRA

More information about the cdi-dev mailing list