类 CommonAnnotationBeanPostProcessor

java.lang.Object
cn.taketoday.core.OrderedSupport
cn.taketoday.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor
cn.taketoday.context.annotation.CommonAnnotationBeanPostProcessor
所有已实现的接口:
Aware, BeanFactoryAware, BeanPostProcessor, DestructionAwareBeanPostProcessor, DependenciesBeanPostProcessor, InitializationBeanPostProcessor, MergedBeanDefinitionPostProcessor, cn.taketoday.core.Ordered, cn.taketoday.core.PriorityOrdered, Serializable

public class CommonAnnotationBeanPostProcessor extends InitDestroyAnnotationBeanPostProcessor implements DependenciesBeanPostProcessor, BeanFactoryAware, Serializable
BeanPostProcessor implementation that supports common Java annotations out of the box, in particular the common annotations in the jakarta.annotation package. These common Java annotations are supported in many Jakarta EE technologies (e.g. JSF and JAX-RS).

This post-processor includes support for the PostConstruct and PreDestroy annotations - as init annotation and destroy annotation, respectively - through inheriting from InitDestroyAnnotationBeanPostProcessor with pre-configured annotation types.

The central element is the Resource annotation for annotation-driven injection of named beans, by default from the containing Framework BeanFactory, with only mappedName references resolved in JNDI. The "alwaysUseJndiLookup" flag enforces JNDI lookups equivalent to standard Jakarta EE resource injection for name references and default names as well. The target beans can be simple POJOs, with no special requirements other than the type having to match.

This post-processor also supports the EJB 3 EJB annotation, analogous to Resource, with the capability to specify both a local bean name and a global JNDI name for fallback retrieval. The target beans can be plain POJOs as well as EJB 3 Session Beans in this case.

For default usage, resolving resource names as Framework bean names, simply define the following in your application context:

 <bean class="cn.taketoday.context.annotation.CommonAnnotationBeanPostProcessor"/>
For direct JNDI access, resolving resource names as JNDI resource references within the Jakarta EE application's "java:comp/env/" namespace, use the following:
 <bean class="cn.taketoday.context.annotation.CommonAnnotationBeanPostProcessor">
   <property name="alwaysUseJndiLookup" value="true"/>
 </bean>
mappedName references will always be resolved in JNDI, allowing for global JNDI names (including "java:" prefix) as well. The "alwaysUseJndiLookup" flag just affects name references and default names (inferred from the field name / property name).

NOTE: A default CommonAnnotationBeanPostProcessor will be registered by the "context:annotation-config" and "context:component-scan" XML tags. Remove or turn off the default annotation configuration there if you intend to specify a custom CommonAnnotationBeanPostProcessor bean definition!

NOTE: Annotation injection will be performed before XML injection; thus the latter configuration will override the former for properties wired through both approaches.

从以下版本开始:
4.0 2022/3/5 12:09
作者:
Juergen Hoeller, Sam Brannen, Harry Yang
另请参阅: