diff --git a/domain/src/main/java/org/acegisecurity/domain/dao/InitializationCapable.java b/domain/src/main/java/org/acegisecurity/domain/dao/InitializationCapable.java
index 104f36fb05..de5fba165c 100644
--- a/domain/src/main/java/org/acegisecurity/domain/dao/InitializationCapable.java
+++ b/domain/src/main/java/org/acegisecurity/domain/dao/InitializationCapable.java
@@ -23,7 +23,39 @@ package net.sf.acegisecurity.domain.dao;
* Structured as a separate interface (rather than a subclass of
* Dao
), as it is not required for all persistence strategies.
*
In general the recommended approach to lazy initialization is as follows: + * + *
Dao
implementation and add use case specific finder/read
+ * methods that will use the persistence engine's eager loading capabilities. Generally
+ * this approach will deliver the best overall application performance, as you will
+ * (i) only be eager loading if and when required and (ii) you are directly using the
+ * persistence engine capabilities to do so. It also places the eager loading management
+ * in the Dao
, which is an ideal location to standardise it.Dao
subclasses that exist in your application, you may
+ * prefer to modify your services layer so that it uses the InitializationCapable
+ * interface. However, this interface should be used judiciously given that it does
+ * not allow the persistence engine to optimise eager loading for given use cases
+ * and (probably) will lead to a mixture of places where fetching logic can be obtained.Generally your best strategy is subclassing the Dao
. It means the
+ * most code, but it's also by far the most efficient and offers flexibility to further
+ * fine-tune specific use cases. Whichever way you go, try to be consistent throughout
+ * your application (this will ease your future migration and troubleshooting needs).
+ *
* @author Ben Alex
* @version $Id$
*/