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

Support automatic dependency injection for non-managed objects

    XMLWordPrintable

Details

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

    Description

      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

      Attachments

        Activity

          People

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

            Dates

              Created:
              Updated:
              Resolved: