clarified applicability of @Order

This commit is contained in:
Juergen Hoeller 2009-02-25 13:41:57 +00:00
parent 5367ec0ff7
commit 96e00d6594
2 changed files with 20 additions and 12 deletions

View File

@ -1,5 +1,5 @@
/*
* Copyright 2002-2007 the original author or authors.
* Copyright 2002-2009 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -23,8 +23,8 @@ import org.springframework.core.annotation.Order;
import org.springframework.util.ClassUtils;
/**
* AspectInstanceFactory backed by a Spring
* {@link org.springframework.beans.factory.BeanFactory}.
* {@link org.springframework.aop.aspectj.AspectInstanceFactory} implementation
* backed by a Spring {@link org.springframework.beans.factory.BeanFactory}.
*
* <p>Note that this may instantiate multiple times if using a prototype,
* which probably won't give the semantics you expect.
@ -100,12 +100,12 @@ public class BeanFactoryAspectInstanceFactory implements MetadataAwareAspectInst
* @see org.springframework.core.annotation.Order
*/
public int getOrder() {
Class type = this.beanFactory.getType(this.name);
Class<?> type = this.beanFactory.getType(this.name);
if (type != null) {
if (Ordered.class.isAssignableFrom(type) && this.beanFactory.isSingleton(this.name)) {
return ((Ordered) this.beanFactory.getBean(this.name)).getOrder();
}
Order order = (Order) type.getAnnotation(Order.class);
Order order = type.getAnnotation(Order.class);
if (order != null) {
return order.value();
}

View File

@ -1,5 +1,5 @@
/*
* Copyright 2002-2006 the original author or authors.
* Copyright 2002-2009 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -24,14 +24,18 @@ import java.lang.annotation.Target;
import org.springframework.core.Ordered;
/**
* Annotation to define ordering.
* Annotation that defines ordering. The value is optional, and represents order value
* as defined in the {@link Ordered} interface. Lower values have higher priority.
* The default value is <code>Ordered.LOWEST_PRECEDENCE</code>, indicating
* lowest priority (losing to any other specified order value).
*
* <p><b>NOTE:</b> Annotation-based ordering is supported for specific kinds of
* components only, e.g. for annotation-based AspectJ aspects. Spring container
* strategies, on the other hand, are typically based on the {@link Ordered}
* interface in order to allow for configurable ordering of each <i>instance</i>.
*
* <p>Value is optional, and represents order value as defined
* in the Ordered interface. Lower values have higher priority.
* Default value is <code>Integer.MAX_VALUE</code>, indicating lowest
* priority (losing to any other specified order value).
*
* @author Rod Johnson
* @author Juergen Hoeller
* @since 2.0
* @see org.springframework.core.Ordered
* @see AnnotationAwareOrderComparator
@ -40,6 +44,10 @@ import org.springframework.core.Ordered;
@Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})
public @interface Order {
/**
* The order value. Default is {@link Ordered#LOWEST_PRECEDENCE}.
* @see Ordered#getOrder()
*/
int value() default Ordered.LOWEST_PRECEDENCE;
}