下面列出了javax.inject.Qualifier#javax.enterprise.inject.Default 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
private static IndexView buildAdditionalIndex() {
Indexer indexer = new Indexer();
// CDI API
index(indexer, ActivateRequestContext.class.getName());
index(indexer, Default.class.getName());
index(indexer, Any.class.getName());
index(indexer, Named.class.getName());
index(indexer, Initialized.class.getName());
index(indexer, BeforeDestroyed.class.getName());
index(indexer, Destroyed.class.getName());
index(indexer, Intercepted.class.getName());
index(indexer, Model.class.getName());
// Arc built-in beans
index(indexer, ActivateRequestContextInterceptor.class.getName());
index(indexer, InjectableRequestContextController.class.getName());
return indexer.complete();
}
@SuppressWarnings({ "unchecked", "serial" })
@Test
public void testObserverInjectionPointMetadata() {
AtomicReference<InjectionPoint> ip = new AtomicReference<>();
Arc.container().beanManager().getEvent().select(new TypeLiteral<AtomicReference<InjectionPoint>>() {
}).fire(ip);
InjectionPoint injectionPoint = ip.get();
assertNotNull(injectionPoint);
assertEquals(Controlled.class, injectionPoint.getType());
Set<Annotation> qualifiers = injectionPoint.getQualifiers();
assertEquals(1, qualifiers.size());
assertEquals(Default.class, qualifiers.iterator().next().annotationType());
Assertions.assertNull(injectionPoint.getBean());
assertNotNull(injectionPoint.getAnnotated());
assertTrue(injectionPoint.getAnnotated() instanceof AnnotatedParameter);
AnnotatedParameter<Controller> annotatedParam = (AnnotatedParameter<Controller>) injectionPoint.getAnnotated();
assertEquals(Controlled.class, annotatedParam.getBaseType());
assertEquals(1, annotatedParam.getAnnotations().size());
assertFalse(annotatedParam.isAnnotationPresent(Inject.class));
assertTrue(annotatedParam.isAnnotationPresent(FooAnnotation.class));
assertTrue(annotatedParam.getAnnotation(Singleton.class) == null);
assertTrue(annotatedParam.getAnnotations(Singleton.class).isEmpty());
}
/**
* Add a method like this:
*
* <pre>
* @Produces
* public SomeConfig produceSomeClass(Config config) {
* return new SomeConfigQuarkusImpl(config)
* }
* </pre>
*/
static void addProducerMethodForInterfaceConfigProperties(ClassCreator classCreator, DotName interfaceName,
String prefix, boolean needsQualifier, String generatedClassName) {
String methodName = "produce" + interfaceName.withoutPackagePrefix();
if (needsQualifier) {
// we need to differentiate the different producers of the same class
methodName = methodName + "WithPrefix" + HashUtil.sha1(prefix);
}
try (MethodCreator method = classCreator.getMethodCreator(methodName, interfaceName.toString(),
Config.class.getName())) {
method.addAnnotation(Produces.class);
if (needsQualifier) {
method.addAnnotation(AnnotationInstance.create(DotNames.CONFIG_PREFIX, null,
new AnnotationValue[] { AnnotationValue.createStringValue("value", prefix) }));
} else {
method.addAnnotation(Default.class);
}
method.returnValue(method.newInstance(MethodDescriptor.ofConstructor(generatedClassName, Config.class),
method.getMethodParam(0)));
}
}
void afterBeanDiscovery(@Observes AfterBeanDiscovery abd) {
CommonBean<String[]> stringBean = CommonBeanBuilder.newBuilder(String[].class)
.beanClass(CommandLineArgsExtension.class)
.scope(Dependent.class)
.createSupplier(() -> args)
.addQualifier(CommandLineArgs.Literal.INSTANCE)
.addType(String[].class)
.addType(Object.class).build();
abd.addBean(stringBean);
CommonBean<List> listBean = CommonBeanBuilder.newBuilder(List.class)
.beanClass(CommandLineArgsExtension.class)
.scope(Dependent.class)
.createSupplier(() -> argsList)
.addQualifier(Default.Literal.INSTANCE)
.addType(List.class)
.addType(Object.class).build();
abd.addBean(listBean);
}
@Override
public void validate(final EjbModule ejbModule) {
if (ejbModule.getBeans() == null) {
return;
}
try {
for (final Field field : ejbModule.getFinder().findAnnotatedFields(Inject.class)) {
if (!field.getType().equals(InjectionPoint.class) || !HttpServlet.class.isAssignableFrom(field.getDeclaringClass())) {
continue;
}
final Annotation[] annotations = field.getAnnotations();
if (annotations.length == 1 || (annotations.length == 2 && field.getAnnotation(Default.class) != null)) {
throw new DefinitionException("Can't inject InjectionPoint in " + field.getDeclaringClass());
} // else we should check is there is no other qualifier than @Default but too early
}
} catch (final NoClassDefFoundError noClassDefFoundError) {
// ignored: can't check but maybe it is because of an optional dep so ignore it
// not important to skip it since the failure will be reported elsewhere
// this validator doesn't check it
}
}
public HelperBean(final AnnotatedType<CDIJCacheHelper> annotatedType,
final InjectionTarget<CDIJCacheHelper> injectionTarget,
final String id) {
this.at = annotatedType;
this.it = injectionTarget;
this.id = "JCS#CDIHelper#" + id;
this.qualifiers = new HashSet<>();
this.qualifiers.add(new AnnotationLiteral<Default>() {
/**
*
*/
private static final long serialVersionUID = 3314657767813459983L;});
this.qualifiers.add(new AnnotationLiteral<Any>() {
/**
*
*/
private static final long serialVersionUID = 7419841275942488170L;});
}
/**
* <p>This method uses the InvocationContext to scan the @Transactional
* interceptor for a manually specified Qualifier.</p>
*
* <p>If none is given (defaults to Any.class) then we scan the intercepted
* instance and resolve the Qualifiers of all it's injected EntityManagers.</p>
*
* <p>Please note that we will only pickup the first Qualifier on the
* injected EntityManager. We also do <b>not</b> parse for binding or
* &h#064;NonBinding values. A @Qualifier should not have any parameter at all.</p>
* @param entityManagerMetadata the metadata to locate the entity manager
* @param interceptedTargetClass the Class of the intercepted target
*/
public Set<Class<? extends Annotation>> resolveEntityManagerQualifiers(EntityManagerMetadata entityManagerMetadata,
Class interceptedTargetClass)
{
Set<Class<? extends Annotation>> emQualifiers = new HashSet<>();
Class<? extends Annotation>[] qualifierClasses = entityManagerMetadata.getQualifiers();
if (qualifierClasses == null || qualifierClasses.length == 1 && Any.class.equals(qualifierClasses[0]) )
{
// this means we have no special EntityManager configured in the interceptor
// thus we should scan all the EntityManagers ourselfs from the intercepted class
collectEntityManagerQualifiersOnClass(emQualifiers, interceptedTargetClass);
}
else
{
// take the qualifierKeys from the qualifierClasses
Collections.addAll(emQualifiers, qualifierClasses);
}
//see DELTASPIKE-320
if (emQualifiers.isEmpty())
{
emQualifiers.add(Default.class);
}
return emQualifiers;
}
@Test
public void modifyAnnotationsOnConstructorParameter() throws NoSuchMethodException
{
final AnnotatedTypeBuilder<Cat> builder = new AnnotatedTypeBuilder<Cat>();
builder.readFromType(Cat.class, true);
builder.removeFromConstructorParameter(Cat.class.getConstructor(String.class, String.class), 1, Default.class);
builder.addToConstructorParameter(Cat.class.getConstructor(String.class, String.class), 1, new AnyLiteral());
final AnnotatedType<Cat> catAnnotatedType = builder.create();
Set<AnnotatedConstructor<Cat>> catCtors = catAnnotatedType.getConstructors();
assertThat(catCtors.size(), is(2));
for (AnnotatedConstructor<Cat> ctor : catCtors)
{
if (ctor.getParameters().size() == 2)
{
List<AnnotatedParameter<Cat>> ctorParams = ctor.getParameters();
assertThat(ctorParams.get(1).getAnnotations().size(), is(1));
assertThat((AnyLiteral) ctorParams.get(1).getAnnotations().toArray()[0], is(new AnyLiteral()));
}
}
}
public ConversationKey(Class<?> groupKey, Annotation... qualifiers)
{
this.groupKey = groupKey;
//TODO maybe we have to add a real qualifier instead
Class<? extends Annotation> annotationType;
for (Annotation qualifier : qualifiers)
{
annotationType = qualifier.annotationType();
if (Any.class.isAssignableFrom(annotationType) ||
Default.class.isAssignableFrom(annotationType) ||
Named.class.isAssignableFrom(annotationType) ||
ConversationGroup.class.isAssignableFrom(annotationType))
{
//won't be used for this key!
continue;
}
if (this.qualifiers == null)
{
this.qualifiers = new HashSet<Annotation>();
}
this.qualifiers.add(qualifier);
}
}
@Produces
@Default
@RegistryType(type = MetricRegistry.Type.APPLICATION)
@ApplicationScoped
public MetricRegistry getApplicationRegistry() {
return get(MetricRegistry.Type.APPLICATION);
}
@Test
public void testBeanIsInjected() {
assertNotNull(unusedBean);
InjectionPoint injectionPoint = unusedBean.getInjectionPoint();
assertNotNull(injectionPoint);
assertEquals(UnusedBean.class, injectionPoint.getType());
assertEquals(1, injectionPoint.getQualifiers().size());
assertEquals(Default.class, injectionPoint.getQualifiers().iterator().next().annotationType());
assertTrue(injectionPoint.getMember() instanceof Field);
assertTrue(injectionPoint.getAnnotated().isAnnotationPresent(Inject.class));
}
@SuppressWarnings("unchecked")
@Override
public <T> Supplier<InstanceHandle<T>> instanceSupplier(Class<T> type, Annotation... qualifiers) {
requireRunning();
if (qualifiers == null || qualifiers.length == 0) {
qualifiers = new Annotation[] { Default.Literal.INSTANCE };
}
Set<InjectableBean<?>> resolvedBeans = resolved.getValue(new Resolvable(type, qualifiers));
Set<InjectableBean<?>> filteredBean = resolvedBeans;
if (resolvedBeans.size() > 1) {
//if there are multiple beans we look for an exact match
//this method is only called with the exact type required
//so ignoring subclasses is the correct behaviour
filteredBean = new HashSet<>();
for (InjectableBean<?> i : resolvedBeans) {
if (i.getBeanClass().equals(type)) {
filteredBean.add(i);
}
}
}
InjectableBean<T> bean = filteredBean.isEmpty() || filteredBean.size() > 1 ? null
: (InjectableBean<T>) filteredBean.iterator().next();
if (bean == null) {
return null;
}
return new Supplier<InstanceHandle<T>>() {
@Override
public InstanceHandle<T> get() {
return beanInstanceHandle(bean, null);
}
};
}
@SuppressWarnings("unchecked")
private <T> InjectableBean<T> getBean(Type requiredType, Annotation... qualifiers) {
if (qualifiers == null || qualifiers.length == 0) {
qualifiers = new Annotation[] { Default.Literal.INSTANCE };
} else {
Qualifiers.verify(qualifiers);
}
Set<InjectableBean<?>> resolvedBeans = resolved.getValue(new Resolvable(requiredType, qualifiers));
return resolvedBeans.isEmpty() || resolvedBeans.size() > 1 ? null : (InjectableBean<T>) resolvedBeans.iterator().next();
}
@Test
public void testIsQualifier() {
BeanManager beanManager = Arc.container().beanManager();
assertTrue(beanManager.isQualifier(Default.class));
assertTrue(beanManager.isQualifier(High.class));
assertFalse(beanManager.isQualifier(ApplicationScoped.class));
}
private SyntheticBeanBuildItem applyCommonBeanConfig(boolean makeUnremovable, String clientName,
SyntheticBeanBuildItem.ExtendedBeanConfigurator configurator) {
if (makeUnremovable) {
configurator.unremovable();
}
if (MongoClientBeanUtil.isDefault(clientName)) {
configurator.addQualifier(Default.class);
} else {
String namedQualifier = MongoClientBeanUtil.namedQualifier(clientName, false);
configurator.addQualifier().annotation(DotNames.NAMED).addValue("value", namedQualifier).done();
configurator.addQualifier().annotation(MONGOCLIENT_ANNOTATION).addValue("value", clientName).done();
}
return configurator.done();
}
@SuppressWarnings("rawtypes")
private AnnotationLiteral literal(String name) {
if (name.startsWith(MongoClientBeanUtil.DEFAULT_MONGOCLIENT_NAME)) {
return Default.Literal.INSTANCE;
}
return NamedLiteral.of(name);
}
public Set<Annotation> getQualifiers() {
Set<Annotation> qualifiers = new HashSet<>();
for (Annotation potentialQualifier : method.getParameterAnnotations()[position]) {
if (potentialQualifier.annotationType().getAnnotation(Qualifier.class) != null) {
qualifiers.add(potentialQualifier);
}
}
if (qualifiers.size() == 0) {
qualifiers.add(Default.Literal.INSTANCE);
}
return qualifiers;
}
@SuppressWarnings("serial")
@Override
public Set<Annotation> getQualifiers() {
final Set<Annotation> qualifiers = new HashSet<>();
qualifiers.add(new AnnotationLiteral<Default>() {
});
qualifiers.add(new AnnotationLiteral<Any>() {
});
return qualifiers;
}
@Test
public void testGetReference() {
Set<Bean<?>> beansFound = beanManager.getBeans(Foo.class,
new AnnotationLiteral<Default>() {
});
assertSame(foo, CdiUtilities.getReference(beanManager,
beansFound.iterator().next(), Foo.class));
}
@Test
@ExtendWith(CustomExtension.class)
@ExplicitParamInjection
public void testParametersNeedExtraAnnotation(@Default Foo foo, Bar bar, @MyQualifier BeanWithQualifier bean) {
// Bar should be resolved by another extension
Assertions.assertNotNull(bar);
Assertions.assertEquals(CustomExtension.class.getSimpleName(), bar.ping());
// Foo should be resolved as usual
Assertions.assertNotNull(foo);
Assertions.assertEquals(Foo.class.getSimpleName(), foo.ping());
// BeanWithQualifier should be resolved
Assertions.assertNotNull(bean);
Assertions.assertEquals(BeanWithQualifier.class.getSimpleName(), bean.ping());
}
@Test
@ExtendWith(CustomExtension.class)
public void testParametersNeedExtraAnnotation(@Default Foo foo, Bar bar, @MyQualifier BeanWithQualifier bean) {
// Bar should be resolved by another extension
Assertions.assertNotNull(bar);
Assertions.assertEquals(CustomExtension.class.getSimpleName(), bar.ping());
// Foo should be resolved as usual
Assertions.assertNotNull(foo);
Assertions.assertEquals(Foo.class.getSimpleName(), foo.ping());
// BeanWithQualifier should be resolved
Assertions.assertNotNull(bean);
Assertions.assertEquals(BeanWithQualifier.class.getSimpleName(), bean.ping());
}
@Test
@ExtendWith(CustomExtension.class)
public void testParametersNeedExtraAnnotation(@Default Foo foo, Bar bar, @MyQualifier BeanWithQualifier bean) {
// Bar should be resolved by another extension
Assertions.assertNotNull(bar);
Assertions.assertEquals(CustomExtension.class.getSimpleName(), bar.ping());
// Foo should be resolved as usual
Assertions.assertNotNull(foo);
Assertions.assertEquals(Foo.class.getSimpleName(), foo.ping());
// BeanWithQualifier should be resolved
Assertions.assertNotNull(bean);
Assertions.assertEquals(BeanWithQualifier.class.getSimpleName(), bean.ping());
}
@Test
@DisplayName("Ensure the parameter Foo is automatically included in container and that Bar comes from the CustomExtension")
void test(@Default Foo foo, Bar bar) {
assertNotNull(bar);
assertEquals(bar.ping(), CustomExtension.class.getSimpleName());
assertNotNull(foo);
assertEquals(foo.getBar(), "baz");
}
/**
*
* @return a new {@link MockBean} instance
* @throws IllegalStateException If a create callback is not set
*/
public MockBean<T> build() {
if (createCallback == null) {
throw new IllegalStateException("Create callback must not be null");
}
Set<Annotation> normalizedQualfiers = new HashSet<Annotation>(qualifiers);
normalizedQualfiers.remove(Any.Literal.INSTANCE);
normalizedQualfiers.remove(Default.Literal.INSTANCE);
if (normalizedQualfiers.isEmpty()) {
normalizedQualfiers.add(Default.Literal.INSTANCE);
normalizedQualfiers.add(Any.Literal.INSTANCE);
} else {
ImmutableSet.Builder<Annotation> builder = ImmutableSet.builder();
if (normalizedQualfiers.size() == 1
&& normalizedQualfiers.iterator().next().annotationType().equals(Named.class)) {
builder.add(Default.Literal.INSTANCE);
}
builder.add(Any.Literal.INSTANCE);
builder.addAll(qualifiers);
normalizedQualfiers = builder.build();
}
// if given any priority, we will instead initialize MockBeanWithPriority
if (priority != null) {
return new MockBeanWithPriority<>(beanClass, stereotypes, alternative, selectForSyntheticBeanArchive, priority, name, normalizedQualfiers, types, scope, createCallback,
destroyCallback);
} else {
return new MockBean<>(beanClass, stereotypes, alternative, selectForSyntheticBeanArchive, name, normalizedQualfiers, types, scope, createCallback,
destroyCallback);
}
}
public void addABean(@Observes AfterBeanDiscovery event) {
// get an instance of BeanConfigurator
event.addBean()
// set the desired data
.types(Greeter.class)
.scope(ApplicationScoped.class)
.addQualifier(Default.Literal.INSTANCE)
//.addQualifier(Custom.CustomLiteral.INSTANCE);
//finally, add a callback to tell CDI how to instantiate this bean
.produceWith(obj -> new Greeter());
}
/**
* Resolves tracer instance to be used. It is using {@link TracerResolver} service loader to find
* the tracer. It tracer is not resolved it will use {@link io.opentracing.noop.NoopTracer}.
*
* @return tracer instance
*/
@Default
@Produces
@Singleton
public Tracer produceTracer() {
// TCK casts to MockTracer so we cannot use GlobalTracer as a bean!
Tracer tracer = TracerResolver.resolveTracer();
if (tracer == null) {
tracer = GlobalTracer.get();
}
logger.info(String.format("Registering %s to GlobalTracer and providing it as CDI bean.", tracer));
GlobalTracer.register(tracer);
return tracer;
}
@SuppressWarnings("unused")
void afterBeanDiscovery(@Observes AfterBeanDiscovery abd, BeanManager beanManager) throws Exception {
try (AutoCloseable handle = Performance.time("ConfigViewProducingExtension.afterBeanDiscovery")) {
CommonBean<ConfigView> configViewBean = CommonBeanBuilder.newBuilder(ConfigView.class)
.beanClass(ConfigViewProducingExtension.class)
.scope(Singleton.class)
.addQualifier(Default.Literal.INSTANCE)
.createSupplier(() -> configView)
.addType(ConfigView.class)
.addType(Object.class).build();
abd.addBean(configViewBean);
}
}
@Override
public Set<Annotation> getQualifiers() {
Set<Annotation> qualifiers = new HashSet<>();
qualifiers.add(Default.Literal.INSTANCE);
qualifiers.add(Any.Literal.INSTANCE);
return qualifiers;
}
@SuppressWarnings({"unused"})
void afterBeanDiscovery(@Observes AfterBeanDiscovery abd) throws Exception {
try (AutoCloseable handle = Performance.time("ConfigurationExtension.afterBeanDiscovery")) {
CommonBean<ConfigurableManager> configurableManagerBean = CommonBeanBuilder.newBuilder(ConfigurableManager.class)
.beanClass(ConfigurableManager.class)
.scope(Singleton.class)
.addQualifier(Default.Literal.INSTANCE)
.createSupplier(() -> configurableManager)
.addType(ConfigurableManager.class)
.addType(Object.class).build();
abd.addBean(configurableManagerBean);
}
}
public void registerBeansAfterBeanDiscovery(@Observes AfterBeanDiscovery event) {
if (vertx == null) {
// Do no register beans - no Vertx instance available during bootstrap
return;
}
// Allow to inject Vertx used to deploy the WeldVerticle
event.addBean().types(getBeanTypes(vertx.getClass(), Vertx.class)).addQualifiers(Any.Literal.INSTANCE, Default.Literal.INSTANCE)
.scope(ApplicationScoped.class).createWith(c -> vertx);
// Allow to inject Context of the WeldVerticle
event.addBean().types(getBeanTypes(context.getClass(), Context.class)).addQualifiers(Any.Literal.INSTANCE, Default.Literal.INSTANCE)
.scope(ApplicationScoped.class).createWith(c -> context);
}