use of com.alibaba.dubbo.config.annotation.Reference in project dubbo by alibaba.
the class AnnotationBean method postProcessBeforeInitialization.
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
if (!isMatchPackage(bean)) {
return bean;
}
Method[] methods = bean.getClass().getMethods();
for (Method method : methods) {
String name = method.getName();
if (name.length() > 3 && name.startsWith("set") && method.getParameterTypes().length == 1 && Modifier.isPublic(method.getModifiers()) && !Modifier.isStatic(method.getModifiers())) {
try {
Reference reference = method.getAnnotation(Reference.class);
if (reference != null) {
Object value = refer(reference, method.getParameterTypes()[0]);
if (value != null) {
method.invoke(bean, new Object[] { value });
}
}
} catch (Throwable e) {
logger.error("Failed to init remote service reference at method " + name + " in class " + bean.getClass().getName() + ", cause: " + e.getMessage(), e);
}
}
}
Field[] fields = bean.getClass().getDeclaredFields();
for (Field field : fields) {
try {
if (!field.isAccessible()) {
field.setAccessible(true);
}
Reference reference = field.getAnnotation(Reference.class);
if (reference != null) {
Object value = refer(reference, field.getType());
if (value != null) {
field.set(bean, value);
}
}
} catch (Throwable e) {
logger.error("Failed to init remote service reference at filed " + field.getName() + " in class " + bean.getClass().getName() + ", cause: " + e.getMessage(), e);
}
}
return bean;
}
use of com.alibaba.dubbo.config.annotation.Reference in project incubator-dubbo-spring-boot-project by apache.
the class DubboMvcEndpoint method resolveReferenceBean.
private ReferenceBean<?> resolveReferenceBean(InjectionMetadata.InjectedElement injectedElement, ConcurrentMap<String, ReferenceBean<?>> referenceBeansCache) {
// Member is Field or Method annotated @Reference
Member member = injectedElement.getMember();
Class<?> beanClass = null;
Reference reference = getFieldValue(injectedElement, "reference", Reference.class);
if (member instanceof Field) {
Field field = (Field) member;
beanClass = field.getType();
} else if (member instanceof Method) {
Method method = (Method) member;
beanClass = ((Method) member).getReturnType();
} else {
if (logger.isWarnEnabled()) {
logger.warn("What's wrong with Member? Member should not be Field or Method");
}
throw new IllegalStateException("What's wrong with Member? Member should not be Field or Method");
}
String referenceBeanCacheKey = generateReferenceBeanCacheKey(reference, beanClass);
return referenceBeansCache.get(referenceBeanCacheKey);
}
Aggregations