[
https://issues.jboss.org/browse/CDI-194?page=com.atlassian.jira.plugin.sy...
]
Vivian Steller commented on CDI-194:
------------------------------------
My use case is the following: my framework operates on @Component annotated classes
(@Component is a custom annotation).
I want to rely on AnnotatedType infrastructure for two reasons:
* CDI/the container does classpath scanning, why should I scan it with some other library
again (additional bootstrap time/additional JAR libraries required for scanning etc.)?
* I want to gain XML configurability through Solder XML without re-implementing it
{code}
public <X> void processBean(final @Observes ProcessBean<X> event, final
BeanManager beanManager)
{
final Annotated annotated = event.getAnnotated();
// detect @Component annotated types as managed types
if (annotated instanceof AnnotatedType &&
annotated.isAnnotationPresent(Component.class))
{
log.debug("Processing {}", annotated);
final Type type = annotated.getBaseType();
// remember annotated type's super types (e.g., for the detection of
abstract super classes, which are not
// detected by CDI)
typeClosureLoop: for (final Type superType : annotated.getTypeClosure())
{
if (type.equals(superType))
continue typeClosureLoop;
Class<?> superClass = null;
if (superType instanceof Class)
superClass = (Class<?>) superType;
else if (superType instanceof ParameterizedType)
superClass = (Class<?>) ((ParameterizedType)
superType).getRawType();
// only classes and parameterized types, Object.class is ignored
if (superClass != null && !superClass.equals(Object.class)
&& !discoveredComponentTypes.containsKey(superType))
{
discoveredComponentTypes.put(superType, asAnnotated(superClass));
}
}
// remember annotated type itself
discoveredComponentTypes.put(type, (AnnotatedType<?>) annotated);
}
}
private <X> AnnotatedType<X> asAnnotated(Class<X> type)
{
return new AnnotatedTypeBuilder<X>()
.readFromType(type)
.create(); // how to do this with BeanManager?
}
{code}
So, all @Component types discovered through @Observes ProcessBean<X> event are
enriched with XML config annotations. However, as ProcessBean isn't fired for abstract
types, and as there isn't another way to obtain an annotated type from BeanManager, I
have to use AnnotatedTypeBuilder which doesn't honor XML configurations. When I was
able to retrieve a properly Xml enriched annotated type from Bean or BeanManager, this
issue was solved.
PS: I use ProcessBean to ensure that Solder's XML config already wrapped the
AnnotatedType with XML specified annotations. I cannot specify a dependency on
Solder's extension being processed before mine, right?
Allow AnnotatedType for a given Bean to be obtained
---------------------------------------------------
Key: CDI-194
URL:
https://issues.jboss.org/browse/CDI-194
Project: CDI Specification Issues
Issue Type: Feature Request
Components: Portable Extensions
Affects Versions: 1.0
Reporter: Jozef Hartinger
Fix For: 1.1 (Proposed)
See Stuart's comment on CDI-83.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see:
http://www.atlassian.com/software/jira