Optional Annotations
In addition to those defined in JSR 250, the following annotations MAY be handled by the container.
@Async
Indicates that a method call could actually be performed asynchronously in the background using a proxy of some kind to avoid blocking the calling thread.
@Singleton
Allow POJOs to be marked as being singletons so that an IoC container does not create multiple instances of them.
@OptionalResource
Used to mark a property or field as optional; but also allow indication of the name you'd like to use in JNDI to look it up if it is available.
@NameAware
In most containers; Spring, SCA, JNDI, EJB3 - there is typically a logical name of a POJO; so we should be able to mark a String setter as being @NameAware so that the name can be injected
Ideas
The following are just ideas for future consideration
@Autowire
Various things like JNDI contexts or MBeanServer and the like are often singletons for a given POJOs context. We could have annotations like @ContextAware and @ApplicationContextAware and @MBeanServerAware; but maybe we just need to mark things as being auto-wired by default by the container? This could be very useful to deal with
- JNDI Context
- JMX MBeanServer
- Spring ApplicationContext
@Factory
Used to indicate that a POJO is really a factory bean in the Spring sense; the @Factory annotation is applied to a public method on the POJO indicating that the factory method should be called to actually create the object.