You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by kw...@apache.org on 2014/11/13 17:06:54 UTC

svn commit: r1639376 - /sling/site/trunk/content/documentation/bundles/models.mdtext

Author: kwin
Date: Thu Nov 13 16:06:53 2014
New Revision: 1639376

URL: http://svn.apache.org/r1639376
Log:
SLING-4156, extend documentation around default injection strategy
also document limitations for injector-specific annotations
add subsections for the Other Options section

Modified:
    sling/site/trunk/content/documentation/bundles/models.mdtext

Modified: sling/site/trunk/content/documentation/bundles/models.mdtext
URL: http://svn.apache.org/viewvc/sling/site/trunk/content/documentation/bundles/models.mdtext?rev=1639376&r1=1639375&r2=1639376&view=diff
==============================================================================
--- sling/site/trunk/content/documentation/bundles/models.mdtext (original)
+++ sling/site/trunk/content/documentation/bundles/models.mdtext Thu Nov 13 16:06:53 2014
@@ -86,7 +86,7 @@ Or
 As with other AdapterFactories, if the adaptation can't be made for any reason, `adaptTo()` returns null.
 
 # Other Options
-
+## Names
 If the field or method name doesn't exactly match the property name, `@Named` can be used:
 
 	::java
@@ -97,7 +97,7 @@ If the field or method name doesn't exac
 	    private String otherName;
 	} 
  
-
+## Optional and Required
 `@Inject`ed fields/methods are assumed to be required. To mark them as optional, use `@Optional`:
 
 	::java
@@ -119,7 +119,13 @@ strategy by using adding `defaultInjecti
 	    private String otherName;
 	}
 
+To still mark some fields/methods as being mandatory while relying on `defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL` for all other fields, the annotation `@Required` can be used.
+
+`@Optional` annotations are only evaluated when using the `defaultInjectionStrategy = DefaultInjectionStrategy.REQUIRED` (which is the default), `@Required` annotations only if using `defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL`.
+
+*The `defaultInjectionStrategy` is currently not considered for fields/methods annotated with Injector-specific annotations (see also [SLING-4155](https://issues.apache.org/jira/browse/SLING-4155))*
 
+## Defaults
 A default value can be provided (for Strings & primitives):
 
 	::java
@@ -154,6 +160,7 @@ OSGi services can be injected:
  
 In this case, the name is not used -- only the class name.
 
+## Collections
 Lists and arrays are supported:
 
 	::java
@@ -186,6 +193,7 @@ Is suitable for a resource structure suc
 
 In this case, the `addresses` `List` will contain `address1` and `address2`.
  
+## OSGi Service Filters
 OSGi injection can be filtered:
 
 	::java
@@ -204,7 +212,7 @@ OSGi injection can be filtered:
 	    private List<Servlet> servlets;
 	}
 
- 
+## PostConstruct Methods 
 The `@PostConstruct` annotation can be used to add methods which are invoked upon completion of all injections:
 
 	::java
@@ -225,7 +233,8 @@ The `@PostConstruct` annotation can be u
 	}
 
 `@PostConstruct` methods in a super class will be invoked first.
- 
+
+## Via 
 If the injection should be based on a JavaBean property of the adaptable, you can indicate this using the `@Via` annotation:
 
 	::java
@@ -237,6 +246,7 @@ If the injection should be based on a Ja
 	    String getPropertyName();
 	} 
 
+## Source
 If there is ambiguity where a given injection could be handled by more than one injector, the `@Source` annotation can be used to define which injector is responsible:
 
 	::java
@@ -248,6 +258,7 @@ If there is ambiguity where a given inje
 	    Resource getResource();
 	} 
 
+## Adaptations
 If the injected object does not match the desired type and the object implements the `Adaptable` interface, Sling Models will try to adapt it. This provides the ability to create rich object graphs. For example:
 
 	::java
@@ -357,7 +368,7 @@ Annotation          | Supported Optional
 
 ## Hints
 
-Those annotations replace `@Via`, `@Filter`, `@Named`, `@Optional`, `@Source` and `@Inject`.
+Those annotations replace `@Via`, `@Filter`, `@Named`, `@Optional`, `@Required`, `@Source` and `@Inject`.
 `@Default` may still be used in addition to the injector-specific annotation to set default values. All elements given above are optional.
  
 ## Custom Annotations