Uploaded image for project: 'CDI Specification Issues'
  1. CDI Specification Issues
  2. CDI-104

Support automatic dependency injection for non-managed objects



    • Feature Request
    • Status: Closed (View Workflow)
    • Major
    • Resolution: Done
    • 1.0
    • 1.1.Final
    • Beans
    • None


      Allow objects created using the "new" keyword (or created by some other means) to be injected automatically.

      Conceptually it would look something like this:

      public class AccountService {

      private final Account account;

      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);

      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




            Unassigned Unassigned
            dan.j.allen Dan Allen (Inactive)
            0 Vote for this issue
            3 Start watching this issue