Utility class that contains various methods useful for
the implementation of autowire-capable bean factories.
| Method from org.springframework.beans.factory.support.AutowireUtils Detail: |
public static AutowireCandidateResolver createAutowireCandidateResolver() {
if (JdkVersion.isAtLeastJava15()) {
try {
Class resolverClass = ClassUtils.forName(
QUALIFIED_ANNOTATION_AUTOWIRE_CANDIDATE_RESOLVER_CLASS_NAME, AutowireUtils.class.getClassLoader());
return (AutowireCandidateResolver) resolverClass.newInstance();
}
catch (Throwable ex) {
throw new IllegalStateException("Unable to load Java 1.5 dependent class [" +
QUALIFIED_ANNOTATION_AUTOWIRE_CANDIDATE_RESOLVER_CLASS_NAME + "]", ex);
}
}
else {
return new SimpleAutowireCandidateResolver();
}
}
If at least Java 1.5, this will return an annotation-aware resolver.
Otherwise it returns a resolver that checks the bean definition only. |
public static boolean isExcludedFromDependencyCheck(PropertyDescriptor pd) {
Method wm = pd.getWriteMethod();
if (wm == null) {
return false;
}
if (wm.getDeclaringClass().getName().indexOf("$$") == -1) {
// Not a CGLIB method so it's OK.
return false;
}
// It was declared by CGLIB, but we might still want to autowire it
// if it was actually declared by the superclass.
Class superclass = wm.getDeclaringClass().getSuperclass();
return !ClassUtils.hasMethod(superclass, wm.getName(), wm.getParameterTypes());
}
|
public static boolean isSetterDefinedInInterface(PropertyDescriptor pd,
Set interfaces) {
Method setter = pd.getWriteMethod();
if (setter != null) {
Class targetClass = setter.getDeclaringClass();
for (Iterator it = interfaces.iterator(); it.hasNext();) {
Class ifc = (Class) it.next();
if (ifc.isAssignableFrom(targetClass) &&
ClassUtils.hasMethod(ifc, setter.getName(), setter.getParameterTypes())) {
return true;
}
}
}
return false;
}
Return whether the setter method of the given bean property is defined
in any of the given interfaces. |
public static void sortConstructors(Constructor[] constructors) {
Arrays.sort(constructors, new Comparator() {
public int compare(Object o1, Object o2) {
Constructor c1 = (Constructor) o1;
Constructor c2 = (Constructor) o2;
boolean p1 = Modifier.isPublic(c1.getModifiers());
boolean p2 = Modifier.isPublic(c2.getModifiers());
if (p1 != p2) {
return (p1 ? -1 : 1);
}
int c1pl = c1.getParameterTypes().length;
int c2pl = c2.getParameterTypes().length;
return (new Integer(c1pl)).compareTo(new Integer(c2pl)) * -1;
}
});
}
Sort the given constructors, preferring public constructors and "greedy" ones
with a maximum of arguments. The result will contain public constructors first,
with decreasing number of arguments, then non-public constructors, again with
decreasing number of arguments. |