Polishing
This commit is contained in:
parent
5025c615b1
commit
9af12d290e
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2012 the original author or authors.
|
||||
* Copyright 2002-2016 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.
|
||||
|
|
@ -56,7 +56,7 @@ public @interface Async {
|
|||
* bean definition.
|
||||
* <p>When specified on a class level {@code @Async} annotation, indicates that the
|
||||
* given executor should be used for all methods within the class. Method level use
|
||||
* of {@link Async#value} always overrides any value set at the class level.
|
||||
* of {@code Async#value} always overrides any value set at the class level.
|
||||
* @since 3.1.2
|
||||
*/
|
||||
String value() default "";
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2015 the original author or authors.
|
||||
* Copyright 2002-2016 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.
|
||||
|
|
@ -445,8 +445,7 @@ public class GroovyScriptFactoryTests {
|
|||
assertTrue(ctx.getBeansOfType(Messenger.class).values().contains(messenger));
|
||||
}
|
||||
|
||||
@Test
|
||||
// Test for SPR-6268
|
||||
@Test // SPR-6268
|
||||
public void testRefreshableFromTagProxyTargetClass() throws Exception {
|
||||
ApplicationContext ctx = new ClassPathXmlApplicationContext("groovy-with-xsd-proxy-target-class.xml",
|
||||
getClass());
|
||||
|
|
@ -464,8 +463,7 @@ public class GroovyScriptFactoryTests {
|
|||
assertNotNull(AnnotationUtils.findAnnotation(messenger.getClass(), Component.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
// Test for SPR-6268
|
||||
@Test // SPR-6268
|
||||
public void testProxyTargetClassNotAllowedIfNotGroovy() throws Exception {
|
||||
try {
|
||||
new ClassPathXmlApplicationContext("jruby-with-xsd-proxy-target-class.xml", getClass());
|
||||
|
|
|
|||
|
|
@ -22,8 +22,8 @@ import java.util.Arrays;
|
|||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import org.springframework.core.OrderComparator;
|
||||
import org.springframework.core.DecoratingProxy;
|
||||
import org.springframework.core.OrderComparator;
|
||||
|
||||
/**
|
||||
* {@code AnnotationAwareOrderComparator} is an extension of
|
||||
|
|
|
|||
|
|
@ -71,11 +71,11 @@ import org.springframework.util.StringUtils;
|
|||
* <em>meta-present</em> on the other annotation.
|
||||
*
|
||||
* <h3>Meta-annotation Support</h3>
|
||||
* <p>Most {@code find*()} methods and some {@code get*()} methods in this
|
||||
* class provide support for finding annotations used as meta-annotations.
|
||||
* Consult the Javadoc for each method in this class for details. For support
|
||||
* for meta-annotations with <em>attribute overrides</em> in
|
||||
* <em>composed annotations</em>, use {@link AnnotatedElementUtils} instead.
|
||||
* <p>Most {@code find*()} methods and some {@code get*()} methods in this class
|
||||
* provide support for finding annotations used as meta-annotations. Consult the
|
||||
* javadoc for each method in this class for details. For fine-grained support for
|
||||
* meta-annotations with <em>attribute overrides</em> in <em>composed annotations</em>,
|
||||
* consider using {@link AnnotatedElementUtils}'s more specific methods instead.
|
||||
*
|
||||
* <h3>Attribute Aliases</h3>
|
||||
* <p>All public methods in this class that return annotations, arrays of
|
||||
|
|
|
|||
|
|
@ -17,12 +17,11 @@
|
|||
package org.springframework.test.annotation;
|
||||
|
||||
import java.lang.annotation.Documented;
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
import static java.lang.annotation.ElementType.*;
|
||||
import static java.lang.annotation.RetentionPolicy.*;
|
||||
|
||||
/**
|
||||
* {@code @Commit} is a test annotation that is used to indicate that a
|
||||
* <em>test-managed transaction</em> should be <em>committed</em> after
|
||||
|
|
@ -49,9 +48,9 @@ import static java.lang.annotation.RetentionPolicy.*;
|
|||
* @see Rollback
|
||||
* @see org.springframework.test.context.transaction.TransactionalTestExecutionListener
|
||||
*/
|
||||
@Target({ElementType.TYPE, ElementType.METHOD})
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Documented
|
||||
@Retention(RUNTIME)
|
||||
@Target({ TYPE, METHOD })
|
||||
@Rollback(false)
|
||||
public @interface Commit {
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2015 the original author or authors.
|
||||
* Copyright 2002-2016 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.
|
||||
|
|
@ -76,19 +76,48 @@ import java.lang.annotation.Target;
|
|||
* @see org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener
|
||||
* @see org.springframework.test.context.support.DirtiesContextTestExecutionListener
|
||||
*/
|
||||
@Target({ElementType.TYPE, ElementType.METHOD})
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Documented
|
||||
@Inherited
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Target({ ElementType.TYPE, ElementType.METHOD })
|
||||
public @interface DirtiesContext {
|
||||
|
||||
/**
|
||||
* The <i>mode</i> to use when a test method is annotated with
|
||||
* {@code @DirtiesContext}.
|
||||
* <p>Defaults to {@link MethodMode#AFTER_METHOD AFTER_METHOD}.
|
||||
* <p>Setting the method mode on an annotated test class has no meaning.
|
||||
* For class-level control, use {@link #classMode} instead.
|
||||
* @since 4.2
|
||||
*/
|
||||
MethodMode methodMode() default MethodMode.AFTER_METHOD;
|
||||
|
||||
/**
|
||||
* The <i>mode</i> to use when a test class is annotated with
|
||||
* {@code @DirtiesContext}.
|
||||
* <p>Defaults to {@link ClassMode#AFTER_CLASS AFTER_CLASS}.
|
||||
* <p>Setting the class mode on an annotated test method has no meaning.
|
||||
* For method-level control, use {@link #methodMode} instead.
|
||||
* @since 3.0
|
||||
*/
|
||||
ClassMode classMode() default ClassMode.AFTER_CLASS;
|
||||
|
||||
/**
|
||||
* The context cache clearing <em>mode</em> to use when a context is
|
||||
* configured as part of a hierarchy via
|
||||
* {@link org.springframework.test.context.ContextHierarchy @ContextHierarchy}.
|
||||
* <p>Defaults to {@link HierarchyMode#EXHAUSTIVE EXHAUSTIVE}.
|
||||
* @since 3.2.2
|
||||
*/
|
||||
HierarchyMode hierarchyMode() default HierarchyMode.EXHAUSTIVE;
|
||||
|
||||
|
||||
/**
|
||||
* Defines <i>modes</i> which determine how {@code @DirtiesContext} is
|
||||
* interpreted when used to annotate a test method.
|
||||
*
|
||||
* @since 4.2
|
||||
*/
|
||||
static enum MethodMode {
|
||||
enum MethodMode {
|
||||
|
||||
/**
|
||||
* The associated {@code ApplicationContext} will be marked as
|
||||
|
|
@ -103,13 +132,13 @@ public @interface DirtiesContext {
|
|||
AFTER_METHOD;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Defines <i>modes</i> which determine how {@code @DirtiesContext} is
|
||||
* interpreted when used to annotate a test class.
|
||||
*
|
||||
* @since 3.0
|
||||
*/
|
||||
static enum ClassMode {
|
||||
enum ClassMode {
|
||||
|
||||
/**
|
||||
* The associated {@code ApplicationContext} will be marked as
|
||||
|
|
@ -140,15 +169,15 @@ public @interface DirtiesContext {
|
|||
AFTER_CLASS;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Defines <i>modes</i> which determine how the context cache is cleared
|
||||
* when {@code @DirtiesContext} is used in a test whose context is
|
||||
* configured as part of a hierarchy via
|
||||
* {@link org.springframework.test.context.ContextHierarchy @ContextHierarchy}.
|
||||
*
|
||||
* @since 3.2.2
|
||||
*/
|
||||
static enum HierarchyMode {
|
||||
enum HierarchyMode {
|
||||
|
||||
/**
|
||||
* The context cache will be cleared using an <em>exhaustive</em> algorithm
|
||||
|
|
@ -174,37 +203,4 @@ public @interface DirtiesContext {
|
|||
CURRENT_LEVEL;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* The <i>mode</i> to use when a test method is annotated with
|
||||
* {@code @DirtiesContext}.
|
||||
* <p>Defaults to {@link MethodMode#AFTER_METHOD AFTER_METHOD}.
|
||||
* <p>Setting the method mode on an annotated test class has no meaning.
|
||||
* For class-level control, use {@link #classMode} instead.
|
||||
*
|
||||
* @since 4.2
|
||||
*/
|
||||
MethodMode methodMode() default MethodMode.AFTER_METHOD;
|
||||
|
||||
/**
|
||||
* The <i>mode</i> to use when a test class is annotated with
|
||||
* {@code @DirtiesContext}.
|
||||
* <p>Defaults to {@link ClassMode#AFTER_CLASS AFTER_CLASS}.
|
||||
* <p>Setting the class mode on an annotated test method has no meaning.
|
||||
* For method-level control, use {@link #methodMode} instead.
|
||||
*
|
||||
* @since 3.0
|
||||
*/
|
||||
ClassMode classMode() default ClassMode.AFTER_CLASS;
|
||||
|
||||
/**
|
||||
* The context cache clearing <em>mode</em> to use when a context is
|
||||
* configured as part of a hierarchy via
|
||||
* {@link org.springframework.test.context.ContextHierarchy @ContextHierarchy}.
|
||||
* <p>Defaults to {@link HierarchyMode#EXHAUSTIVE EXHAUSTIVE}.
|
||||
*
|
||||
* @since 3.2.2
|
||||
*/
|
||||
HierarchyMode hierarchyMode() default HierarchyMode.EXHAUSTIVE;
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2015 the original author or authors.
|
||||
* Copyright 2002-2016 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.
|
||||
|
|
@ -95,10 +95,10 @@ import java.lang.annotation.Target;
|
|||
* @see org.springframework.context.annotation.Profile
|
||||
* @see org.springframework.test.context.ActiveProfiles
|
||||
*/
|
||||
@Target({ElementType.TYPE, ElementType.METHOD})
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Documented
|
||||
@Inherited
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Target({ ElementType.TYPE, ElementType.METHOD })
|
||||
public @interface IfProfileValue {
|
||||
|
||||
/**
|
||||
|
|
@ -109,7 +109,6 @@ public @interface IfProfileValue {
|
|||
/**
|
||||
* A single, permissible {@code value} of the <em>profile value</em>
|
||||
* for the given {@link #name}.
|
||||
*
|
||||
* <p>Note: Assigning values to both {@link #value} and {@link #values}
|
||||
* will lead to a configuration conflict.
|
||||
*/
|
||||
|
|
@ -118,7 +117,6 @@ public @interface IfProfileValue {
|
|||
/**
|
||||
* A list of all permissible {@code values} of the <em>profile value</em>
|
||||
* for the given {@link #name}.
|
||||
*
|
||||
* <p>Note: Assigning values to both {@link #value} and {@link #values}
|
||||
* will lead to a configuration conflict.
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2015 the original author or authors.
|
||||
* Copyright 2002-2016 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.
|
||||
|
|
@ -17,12 +17,11 @@
|
|||
package org.springframework.test.annotation;
|
||||
|
||||
import java.lang.annotation.Documented;
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
import static java.lang.annotation.ElementType.*;
|
||||
import static java.lang.annotation.RetentionPolicy.*;
|
||||
|
||||
/**
|
||||
* Test annotation to indicate that a test method should be invoked repeatedly.
|
||||
*
|
||||
|
|
@ -41,9 +40,9 @@ import static java.lang.annotation.RetentionPolicy.*;
|
|||
* @see org.springframework.test.context.junit4.rules.SpringMethodRule
|
||||
* @see org.springframework.test.context.junit4.statements.SpringRepeat
|
||||
*/
|
||||
@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Documented
|
||||
@Retention(RUNTIME)
|
||||
@Target({ METHOD, ANNOTATION_TYPE })
|
||||
public @interface Repeat {
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2015 the original author or authors.
|
||||
* Copyright 2002-2016 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.
|
||||
|
|
@ -17,12 +17,11 @@
|
|||
package org.springframework.test.annotation;
|
||||
|
||||
import java.lang.annotation.Documented;
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
import static java.lang.annotation.ElementType.*;
|
||||
import static java.lang.annotation.RetentionPolicy.*;
|
||||
|
||||
/**
|
||||
* {@code @Rollback} is a test annotation that is used to indicate whether
|
||||
* a <em>test-managed transaction</em> should be <em>rolled back</em> after
|
||||
|
|
@ -54,9 +53,9 @@ import static java.lang.annotation.RetentionPolicy.*;
|
|||
* @see Commit
|
||||
* @see org.springframework.test.context.transaction.TransactionalTestExecutionListener
|
||||
*/
|
||||
@Target({ElementType.TYPE, ElementType.METHOD})
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Documented
|
||||
@Retention(RUNTIME)
|
||||
@Target({ TYPE, METHOD })
|
||||
public @interface Rollback {
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2015 the original author or authors.
|
||||
* Copyright 2002-2016 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.
|
||||
|
|
@ -17,12 +17,11 @@
|
|||
package org.springframework.test.annotation;
|
||||
|
||||
import java.lang.annotation.Documented;
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
import static java.lang.annotation.ElementType.*;
|
||||
import static java.lang.annotation.RetentionPolicy.*;
|
||||
|
||||
/**
|
||||
* Test-specific annotation to indicate that a test method has to finish
|
||||
* execution in a {@linkplain #millis() specified time period}.
|
||||
|
|
@ -45,9 +44,9 @@ import static java.lang.annotation.RetentionPolicy.*;
|
|||
* @see org.springframework.test.context.junit4.rules.SpringMethodRule
|
||||
* @see org.springframework.test.context.junit4.statements.SpringFailOnTimeout
|
||||
*/
|
||||
@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Documented
|
||||
@Retention(RUNTIME)
|
||||
@Target({ METHOD, ANNOTATION_TYPE })
|
||||
public @interface Timed {
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2015 the original author or authors.
|
||||
* Copyright 2002-2016 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.
|
||||
|
|
@ -27,8 +27,8 @@ import org.springframework.util.Assert;
|
|||
|
||||
/**
|
||||
* {@code MergedSqlConfig} encapsulates the <em>merged</em> {@link SqlConfig @SqlConfig}
|
||||
* attributes declared locally via {@link Sql#config} and globally as a
|
||||
* class-level annotation.
|
||||
* attributes declared locally via {@link Sql#config} and globally as a class-level annotation.
|
||||
*
|
||||
* <p>Explicit local configuration attributes override global configuration attributes.
|
||||
*
|
||||
* @author Sam Brannen
|
||||
|
|
@ -56,23 +56,6 @@ class MergedSqlConfig {
|
|||
private final ErrorMode errorMode;
|
||||
|
||||
|
||||
private static <E extends Enum<?>> E getEnum(AnnotationAttributes attributes, String attributeName,
|
||||
E inheritedOrDefaultValue, E defaultValue) {
|
||||
E value = attributes.getEnum(attributeName);
|
||||
if (value == inheritedOrDefaultValue) {
|
||||
value = defaultValue;
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
private static String getString(AnnotationAttributes attributes, String attributeName, String defaultValue) {
|
||||
String value = attributes.getString(attributeName);
|
||||
if ("".equals(value)) {
|
||||
value = defaultValue;
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Construct a {@code MergedSqlConfig} instance by merging the configuration
|
||||
* from the supplied local (potentially method-level) {@code @SqlConfig} annotation
|
||||
|
|
@ -86,8 +69,8 @@ class MergedSqlConfig {
|
|||
Assert.notNull(testClass, "testClass must not be null");
|
||||
|
||||
// Get global attributes, if any.
|
||||
AnnotationAttributes attributes = AnnotatedElementUtils.findMergedAnnotationAttributes(testClass,
|
||||
SqlConfig.class.getName(), false, false);
|
||||
AnnotationAttributes attributes = AnnotatedElementUtils.findMergedAnnotationAttributes(
|
||||
testClass, SqlConfig.class.getName(), false, false);
|
||||
|
||||
// Override global attributes with local attributes.
|
||||
if (attributes != null) {
|
||||
|
|
@ -95,7 +78,7 @@ class MergedSqlConfig {
|
|||
Object value = AnnotationUtils.getValue(localSqlConfig, key);
|
||||
if (value != null) {
|
||||
// Is the value explicit (i.e., not a 'default')?
|
||||
if (!value.equals("") && (value != TransactionMode.DEFAULT) && (value != ErrorMode.DEFAULT)) {
|
||||
if (!value.equals("") && value != TransactionMode.DEFAULT && value != ErrorMode.DEFAULT) {
|
||||
attributes.put(key, value);
|
||||
}
|
||||
}
|
||||
|
|
@ -113,9 +96,9 @@ class MergedSqlConfig {
|
|||
this.separator = getString(attributes, "separator", ScriptUtils.DEFAULT_STATEMENT_SEPARATOR);
|
||||
this.commentPrefix = getString(attributes, "commentPrefix", ScriptUtils.DEFAULT_COMMENT_PREFIX);
|
||||
this.blockCommentStartDelimiter = getString(attributes, "blockCommentStartDelimiter",
|
||||
ScriptUtils.DEFAULT_BLOCK_COMMENT_START_DELIMITER);
|
||||
ScriptUtils.DEFAULT_BLOCK_COMMENT_START_DELIMITER);
|
||||
this.blockCommentEndDelimiter = getString(attributes, "blockCommentEndDelimiter",
|
||||
ScriptUtils.DEFAULT_BLOCK_COMMENT_END_DELIMITER);
|
||||
ScriptUtils.DEFAULT_BLOCK_COMMENT_END_DELIMITER);
|
||||
this.errorMode = getEnum(attributes, "errorMode", ErrorMode.DEFAULT, ErrorMode.FAIL_ON_ERROR);
|
||||
}
|
||||
|
||||
|
|
@ -187,17 +170,36 @@ class MergedSqlConfig {
|
|||
*/
|
||||
@Override
|
||||
public String toString() {
|
||||
return new ToStringCreator(this)//
|
||||
.append("dataSource", dataSource)//
|
||||
.append("transactionManager", transactionManager)//
|
||||
.append("transactionMode", transactionMode)//
|
||||
.append("encoding", encoding)//
|
||||
.append("separator", separator)//
|
||||
.append("commentPrefix", commentPrefix)//
|
||||
.append("blockCommentStartDelimiter", blockCommentStartDelimiter)//
|
||||
.append("blockCommentEndDelimiter", blockCommentEndDelimiter)//
|
||||
.append("errorMode", errorMode)//
|
||||
.toString();
|
||||
return new ToStringCreator(this)
|
||||
.append("dataSource", this.dataSource)
|
||||
.append("transactionManager", this.transactionManager)
|
||||
.append("transactionMode", this.transactionMode)
|
||||
.append("encoding", this.encoding)
|
||||
.append("separator", this.separator)
|
||||
.append("commentPrefix", this.commentPrefix)
|
||||
.append("blockCommentStartDelimiter", this.blockCommentStartDelimiter)
|
||||
.append("blockCommentEndDelimiter", this.blockCommentEndDelimiter)
|
||||
.append("errorMode", this.errorMode)
|
||||
.toString();
|
||||
}
|
||||
|
||||
|
||||
private static <E extends Enum<?>> E getEnum(AnnotationAttributes attributes, String attributeName,
|
||||
E inheritedOrDefaultValue, E defaultValue) {
|
||||
|
||||
E value = attributes.getEnum(attributeName);
|
||||
if (value == inheritedOrDefaultValue) {
|
||||
value = defaultValue;
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
private static String getString(AnnotationAttributes attributes, String attributeName, String defaultValue) {
|
||||
String value = attributes.getString(attributeName);
|
||||
if ("".equals(value)) {
|
||||
value = defaultValue;
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,16 +17,15 @@
|
|||
package org.springframework.test.context.jdbc;
|
||||
|
||||
import java.lang.annotation.Documented;
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Inherited;
|
||||
import java.lang.annotation.Repeatable;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
import org.springframework.core.annotation.AliasFor;
|
||||
|
||||
import static java.lang.annotation.ElementType.*;
|
||||
import static java.lang.annotation.RetentionPolicy.*;
|
||||
|
||||
/**
|
||||
* {@code @Sql} is used to annotate a test class or test method to configure
|
||||
* SQL {@link #scripts} and {@link #statements} to be executed against a given
|
||||
|
|
@ -65,10 +64,10 @@ import static java.lang.annotation.RetentionPolicy.*;
|
|||
* @see org.springframework.jdbc.datasource.init.ResourceDatabasePopulator
|
||||
* @see org.springframework.jdbc.datasource.init.ScriptUtils
|
||||
*/
|
||||
@Target({ElementType.TYPE, ElementType.METHOD})
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Documented
|
||||
@Inherited
|
||||
@Retention(RUNTIME)
|
||||
@Target({TYPE, METHOD})
|
||||
@Repeatable(SqlGroup.class)
|
||||
public @interface Sql {
|
||||
|
||||
|
|
@ -88,7 +87,6 @@ public @interface Sql {
|
|||
* {@link #value}, but it may be used instead of {@link #value}. Similarly,
|
||||
* this attribute may be used in conjunction with or instead of
|
||||
* {@link #statements}.
|
||||
*
|
||||
* <h3>Path Resource Semantics</h3>
|
||||
* <p>Each path will be interpreted as a Spring
|
||||
* {@link org.springframework.core.io.Resource Resource}. A plain path
|
||||
|
|
@ -101,7 +99,6 @@ public @interface Sql {
|
|||
* {@link org.springframework.util.ResourceUtils#CLASSPATH_URL_PREFIX classpath:},
|
||||
* {@link org.springframework.util.ResourceUtils#FILE_URL_PREFIX file:},
|
||||
* {@code http:}, etc.) will be loaded using the specified resource protocol.
|
||||
*
|
||||
* <h3>Default Script Detection</h3>
|
||||
* <p>If no SQL scripts or {@link #statements} are specified, an attempt will
|
||||
* be made to detect a <em>default</em> script depending on where this
|
||||
|
|
@ -116,7 +113,6 @@ public @interface Sql {
|
|||
* {@code com.example.MyTest}, the corresponding default script is
|
||||
* {@code "classpath:com/example/MyTest.testMethod.sql"}.</li>
|
||||
* </ul>
|
||||
*
|
||||
* @see #value
|
||||
* @see #statements
|
||||
*/
|
||||
|
|
@ -127,13 +123,11 @@ public @interface Sql {
|
|||
* <em>Inlined SQL statements</em> to execute.
|
||||
* <p>This attribute may be used in conjunction with or instead of
|
||||
* {@link #scripts}.
|
||||
*
|
||||
* <h3>Ordering</h3>
|
||||
* <p>Statements declared via this attribute will be executed after
|
||||
* statements loaded from resource {@link #scripts}. If you wish to have
|
||||
* inlined statements executed before scripts, simply declare multiple
|
||||
* instances of {@code @Sql} on the same class or method.
|
||||
*
|
||||
* @since 4.2
|
||||
* @see #scripts
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -17,13 +17,12 @@
|
|||
package org.springframework.test.context.jdbc;
|
||||
|
||||
import java.lang.annotation.Documented;
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Inherited;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
import static java.lang.annotation.ElementType.*;
|
||||
import static java.lang.annotation.RetentionPolicy.*;
|
||||
|
||||
/**
|
||||
* {@code @SqlConfig} defines metadata that is used to determine how to parse
|
||||
* and execute SQL scripts configured via the {@link Sql @Sql} annotation.
|
||||
|
|
@ -59,10 +58,10 @@ import static java.lang.annotation.RetentionPolicy.*;
|
|||
* @since 4.1
|
||||
* @see Sql
|
||||
*/
|
||||
@Target(ElementType.TYPE)
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Documented
|
||||
@Inherited
|
||||
@Retention(RUNTIME)
|
||||
@Target(TYPE)
|
||||
public @interface SqlConfig {
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -17,13 +17,12 @@
|
|||
package org.springframework.test.context.jdbc;
|
||||
|
||||
import java.lang.annotation.Documented;
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Inherited;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
import static java.lang.annotation.ElementType.*;
|
||||
import static java.lang.annotation.RetentionPolicy.*;
|
||||
|
||||
/**
|
||||
* Container annotation that aggregates several {@link Sql @Sql} annotations.
|
||||
*
|
||||
|
|
@ -39,10 +38,10 @@ import static java.lang.annotation.RetentionPolicy.*;
|
|||
* @since 4.1
|
||||
* @see Sql
|
||||
*/
|
||||
@Target({ElementType.TYPE, ElementType.METHOD})
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Documented
|
||||
@Inherited
|
||||
@Retention(RUNTIME)
|
||||
@Target({TYPE, METHOD})
|
||||
public @interface SqlGroup {
|
||||
|
||||
Sql[] value();
|
||||
|
|
|
|||
|
|
@ -17,12 +17,11 @@
|
|||
package org.springframework.test.context.transaction;
|
||||
|
||||
import java.lang.annotation.Documented;
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
import static java.lang.annotation.ElementType.*;
|
||||
import static java.lang.annotation.RetentionPolicy.*;
|
||||
|
||||
/**
|
||||
* <p>Test annotation to indicate that the annotated {@code void} method
|
||||
* should be executed <em>after</em> a transaction is ended for a test method
|
||||
|
|
@ -39,8 +38,8 @@ import static java.lang.annotation.RetentionPolicy.*;
|
|||
* @see org.springframework.transaction.annotation.Transactional
|
||||
* @see BeforeTransaction
|
||||
*/
|
||||
@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Documented
|
||||
@Retention(RUNTIME)
|
||||
@Target({ METHOD, ANNOTATION_TYPE })
|
||||
public @interface AfterTransaction {
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,12 +17,11 @@
|
|||
package org.springframework.test.context.transaction;
|
||||
|
||||
import java.lang.annotation.Documented;
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
import static java.lang.annotation.ElementType.*;
|
||||
import static java.lang.annotation.RetentionPolicy.*;
|
||||
|
||||
/**
|
||||
* <p>Test annotation to indicate that the annotated {@code void} method
|
||||
* should be executed <em>before</em> a transaction is started for a test method
|
||||
|
|
@ -39,8 +38,8 @@ import static java.lang.annotation.RetentionPolicy.*;
|
|||
* @see org.springframework.transaction.annotation.Transactional
|
||||
* @see AfterTransaction
|
||||
*/
|
||||
@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Documented
|
||||
@Retention(RUNTIME)
|
||||
@Target({ METHOD, ANNOTATION_TYPE })
|
||||
public @interface BeforeTransaction {
|
||||
}
|
||||
|
|
|
|||
|
|
@ -47,19 +47,17 @@ import java.lang.annotation.Target;
|
|||
* @see org.springframework.test.context.ContextConfiguration
|
||||
* @see ServletTestExecutionListener
|
||||
*/
|
||||
@Target(ElementType.TYPE)
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Documented
|
||||
@Inherited
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Target(ElementType.TYPE)
|
||||
public @interface WebAppConfiguration {
|
||||
|
||||
/**
|
||||
* The resource path to the root directory of the web application.
|
||||
*
|
||||
* <p>A path that does not include a Spring resource prefix (e.g., {@code classpath:},
|
||||
* {@code file:}, etc.) will be interpreted as a file system resource, and a
|
||||
* path should not end with a slash.
|
||||
*
|
||||
* <p>Defaults to {@code "src/main/webapp"} as a file system resource. Note
|
||||
* that this is the standard directory for the root of a web application in
|
||||
* a project that follows the standard Maven project layout for a WAR.
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2015 the original author or authors.
|
||||
* Copyright 2002-2016 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.
|
||||
|
|
@ -196,10 +196,10 @@ public abstract class MetaAnnotationUtils {
|
|||
for (Annotation composedAnnotation : clazz.getDeclaredAnnotations()) {
|
||||
if (!AnnotationUtils.isInJavaLangAnnotationPackage(composedAnnotation) && visited.add(composedAnnotation)) {
|
||||
UntypedAnnotationDescriptor descriptor = findAnnotationDescriptorForTypes(
|
||||
composedAnnotation.annotationType(), visited, annotationTypes);
|
||||
composedAnnotation.annotationType(), visited, annotationTypes);
|
||||
if (descriptor != null) {
|
||||
return new UntypedAnnotationDescriptor(clazz, descriptor.getDeclaringClass(), composedAnnotation,
|
||||
descriptor.getAnnotation());
|
||||
descriptor.getAnnotation());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -274,13 +274,13 @@ public abstract class MetaAnnotationUtils {
|
|||
|
||||
private final AnnotationAttributes annotationAttributes;
|
||||
|
||||
|
||||
public AnnotationDescriptor(Class<?> rootDeclaringClass, T annotation) {
|
||||
this(rootDeclaringClass, rootDeclaringClass, null, annotation);
|
||||
}
|
||||
|
||||
public AnnotationDescriptor(Class<?> rootDeclaringClass, Class<?> declaringClass,
|
||||
Annotation composedAnnotation, T annotation) {
|
||||
|
||||
Assert.notNull(rootDeclaringClass, "rootDeclaringClass must not be null");
|
||||
Assert.notNull(annotation, "annotation must not be null");
|
||||
this.rootDeclaringClass = rootDeclaringClass;
|
||||
|
|
@ -362,6 +362,7 @@ public abstract class MetaAnnotationUtils {
|
|||
|
||||
public UntypedAnnotationDescriptor(Class<?> rootDeclaringClass, Class<?> declaringClass,
|
||||
Annotation composedAnnotation, Annotation annotation) {
|
||||
|
||||
super(rootDeclaringClass, declaringClass, composedAnnotation, annotation);
|
||||
}
|
||||
|
||||
|
|
@ -374,7 +375,7 @@ public abstract class MetaAnnotationUtils {
|
|||
@Override
|
||||
public Annotation synthesizeAnnotation() {
|
||||
throw new UnsupportedOperationException(
|
||||
"getMergedAnnotation() is unsupported in UntypedAnnotationDescriptor");
|
||||
"getMergedAnnotation() is unsupported in UntypedAnnotationDescriptor");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@ public class TransactionalEventListenerFactory implements EventListenerFactory,
|
|||
|
||||
@Override
|
||||
public int getOrder() {
|
||||
return order;
|
||||
return this.order;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -27,15 +27,15 @@ import org.springframework.core.io.Resource;
|
|||
import org.springframework.util.Assert;
|
||||
|
||||
/**
|
||||
* Holder that combines a {@link Resource} descriptor with
|
||||
* {@link HttpRange} information to be used for reading
|
||||
* selected parts of the resource.
|
||||
* Holder that combines a {@link Resource} descriptor with {@link HttpRange}
|
||||
* information to be used for reading selected parts of the resource.
|
||||
*
|
||||
* <p>Used as an argument for partial conversion operations in
|
||||
* {@link org.springframework.http.converter.ResourceHttpMessageConverter}.
|
||||
*
|
||||
* @author Brian Clozel
|
||||
* @since 4.3.0
|
||||
* @since 4.3
|
||||
* @see HttpRange
|
||||
*/
|
||||
public class HttpRangeResource implements Resource {
|
||||
|
||||
|
|
@ -43,77 +43,81 @@ public class HttpRangeResource implements Resource {
|
|||
|
||||
private final Resource resource;
|
||||
|
||||
|
||||
public HttpRangeResource(List<HttpRange> httpRanges, Resource resource) {
|
||||
Assert.notEmpty(httpRanges, "list of HTTP Ranges should not be empty");
|
||||
Assert.notEmpty(httpRanges, "List of HTTP Ranges should not be empty");
|
||||
this.httpRanges = httpRanges;
|
||||
this.resource = resource;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Return the list of HTTP (byte) ranges describing the requested
|
||||
* parts of the Resource, as provided by the HTTP Range request.
|
||||
*/
|
||||
public final List<HttpRange> getHttpRanges() {
|
||||
return httpRanges;
|
||||
return this.httpRanges;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean exists() {
|
||||
return resource.exists();
|
||||
return this.resource.exists();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isReadable() {
|
||||
return resource.isReadable();
|
||||
return this.resource.isReadable();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isOpen() {
|
||||
return resource.isOpen();
|
||||
return this.resource.isOpen();
|
||||
}
|
||||
|
||||
@Override
|
||||
public URL getURL() throws IOException {
|
||||
return resource.getURL();
|
||||
return this.resource.getURL();
|
||||
}
|
||||
|
||||
@Override
|
||||
public URI getURI() throws IOException {
|
||||
return resource.getURI();
|
||||
return this.resource.getURI();
|
||||
}
|
||||
|
||||
@Override
|
||||
public File getFile() throws IOException {
|
||||
return resource.getFile();
|
||||
return this.resource.getFile();
|
||||
}
|
||||
|
||||
@Override
|
||||
public long contentLength() throws IOException {
|
||||
return resource.contentLength();
|
||||
return this.resource.contentLength();
|
||||
}
|
||||
|
||||
@Override
|
||||
public long lastModified() throws IOException {
|
||||
return resource.lastModified();
|
||||
return this.resource.lastModified();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Resource createRelative(String relativePath) throws IOException {
|
||||
return resource.createRelative(relativePath);
|
||||
return this.resource.createRelative(relativePath);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getFilename() {
|
||||
return resource.getFilename();
|
||||
return this.resource.getFilename();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return resource.getDescription();
|
||||
return this.resource.getDescription();
|
||||
}
|
||||
|
||||
@Override
|
||||
public InputStream getInputStream() throws IOException {
|
||||
return resource.getInputStream();
|
||||
return this.resource.getInputStream();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -148,7 +148,7 @@ public abstract class AbstractHttpMessageConverter<T> implements HttpMessageConv
|
|||
@Override
|
||||
public boolean canWrite(Class<?> clazz, MediaType mediaType) {
|
||||
return supports(clazz) && canWrite(mediaType);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns {@code true} if the given media type includes any of the
|
||||
|
|
|
|||
|
|
@ -17,15 +17,13 @@
|
|||
package org.springframework.web.bind.annotation;
|
||||
|
||||
import java.lang.annotation.Documented;
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
import org.springframework.core.annotation.AliasFor;
|
||||
|
||||
import static java.lang.annotation.ElementType.METHOD;
|
||||
import static java.lang.annotation.RetentionPolicy.RUNTIME;
|
||||
import static org.springframework.web.bind.annotation.RequestMethod.DELETE;
|
||||
|
||||
/**
|
||||
* Annotation for mapping HTTP {@code DELETE} requests onto specific handler
|
||||
* methods.
|
||||
|
|
@ -41,10 +39,10 @@ import static org.springframework.web.bind.annotation.RequestMethod.DELETE;
|
|||
* @see PatchMapping
|
||||
* @see RequestMapping
|
||||
*/
|
||||
@Target(METHOD)
|
||||
@Retention(RUNTIME)
|
||||
@Target(ElementType.METHOD)
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Documented
|
||||
@RequestMapping(method = DELETE)
|
||||
@RequestMapping(method = RequestMethod.DELETE)
|
||||
public @interface DeleteMapping {
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -17,15 +17,13 @@
|
|||
package org.springframework.web.bind.annotation;
|
||||
|
||||
import java.lang.annotation.Documented;
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
import org.springframework.core.annotation.AliasFor;
|
||||
|
||||
import static java.lang.annotation.ElementType.METHOD;
|
||||
import static java.lang.annotation.RetentionPolicy.RUNTIME;
|
||||
import static org.springframework.web.bind.annotation.RequestMethod.GET;
|
||||
|
||||
/**
|
||||
* Annotation for mapping HTTP {@code GET} requests onto specific handler
|
||||
* methods.
|
||||
|
|
@ -45,10 +43,10 @@ import static org.springframework.web.bind.annotation.RequestMethod.GET;
|
|||
* @see PatchMapping
|
||||
* @see RequestMapping
|
||||
*/
|
||||
@Target(METHOD)
|
||||
@Retention(RUNTIME)
|
||||
@Target(ElementType.METHOD)
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Documented
|
||||
@RequestMapping(method = GET)
|
||||
@RequestMapping(method = RequestMethod.GET)
|
||||
public @interface GetMapping {
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -83,6 +83,7 @@ public @interface ModelAttribute {
|
|||
* binding for that attribute.
|
||||
* <p>By default this is set to "true" in which case data binding applies.
|
||||
* Set this to "false" to disable data binding.
|
||||
* @since 4.3
|
||||
*/
|
||||
boolean binding() default true;
|
||||
|
||||
|
|
|
|||
|
|
@ -17,15 +17,13 @@
|
|||
package org.springframework.web.bind.annotation;
|
||||
|
||||
import java.lang.annotation.Documented;
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
import org.springframework.core.annotation.AliasFor;
|
||||
|
||||
import static java.lang.annotation.ElementType.METHOD;
|
||||
import static java.lang.annotation.RetentionPolicy.RUNTIME;
|
||||
import static org.springframework.web.bind.annotation.RequestMethod.PATCH;
|
||||
|
||||
/**
|
||||
* Annotation for mapping HTTP {@code PATCH} requests onto specific handler
|
||||
* methods.
|
||||
|
|
@ -41,10 +39,10 @@ import static org.springframework.web.bind.annotation.RequestMethod.PATCH;
|
|||
* @see DeleteMapping
|
||||
* @see RequestMapping
|
||||
*/
|
||||
@Target(METHOD)
|
||||
@Retention(RUNTIME)
|
||||
@Target(ElementType.METHOD)
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Documented
|
||||
@RequestMapping(method = PATCH)
|
||||
@RequestMapping(method = RequestMethod.PATCH)
|
||||
public @interface PatchMapping {
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -17,15 +17,13 @@
|
|||
package org.springframework.web.bind.annotation;
|
||||
|
||||
import java.lang.annotation.Documented;
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
import org.springframework.core.annotation.AliasFor;
|
||||
|
||||
import static java.lang.annotation.ElementType.METHOD;
|
||||
import static java.lang.annotation.RetentionPolicy.RUNTIME;
|
||||
import static org.springframework.web.bind.annotation.RequestMethod.POST;
|
||||
|
||||
/**
|
||||
* Annotation for mapping HTTP {@code POST} requests onto specific handler
|
||||
* methods.
|
||||
|
|
@ -41,10 +39,10 @@ import static org.springframework.web.bind.annotation.RequestMethod.POST;
|
|||
* @see PatchMapping
|
||||
* @see RequestMapping
|
||||
*/
|
||||
@Target(METHOD)
|
||||
@Retention(RUNTIME)
|
||||
@Target(ElementType.METHOD)
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Documented
|
||||
@RequestMapping(method = POST)
|
||||
@RequestMapping(method = RequestMethod.POST)
|
||||
public @interface PostMapping {
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -17,15 +17,13 @@
|
|||
package org.springframework.web.bind.annotation;
|
||||
|
||||
import java.lang.annotation.Documented;
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
import org.springframework.core.annotation.AliasFor;
|
||||
|
||||
import static java.lang.annotation.ElementType.METHOD;
|
||||
import static java.lang.annotation.RetentionPolicy.RUNTIME;
|
||||
import static org.springframework.web.bind.annotation.RequestMethod.PUT;
|
||||
|
||||
/**
|
||||
* Annotation for mapping HTTP {@code PUT} requests onto specific handler
|
||||
* methods.
|
||||
|
|
@ -41,10 +39,10 @@ import static org.springframework.web.bind.annotation.RequestMethod.PUT;
|
|||
* @see PatchMapping
|
||||
* @see RequestMapping
|
||||
*/
|
||||
@Target(METHOD)
|
||||
@Retention(RUNTIME)
|
||||
@Target(ElementType.METHOD)
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Documented
|
||||
@RequestMapping(method = PUT)
|
||||
@RequestMapping(method = RequestMethod.PUT)
|
||||
public @interface PutMapping {
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -17,17 +17,15 @@
|
|||
package org.springframework.web.context.annotation;
|
||||
|
||||
import java.lang.annotation.Documented;
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.context.annotation.ScopedProxyMode;
|
||||
import org.springframework.core.annotation.AliasFor;
|
||||
|
||||
import static java.lang.annotation.ElementType.METHOD;
|
||||
import static java.lang.annotation.ElementType.TYPE;
|
||||
import static java.lang.annotation.RetentionPolicy.RUNTIME;
|
||||
import static org.springframework.web.context.WebApplicationContext.SCOPE_APPLICATION;
|
||||
import org.springframework.web.context.WebApplicationContext;
|
||||
|
||||
/**
|
||||
* {@code @ApplicationScope} is a specialization of {@link Scope @Scope} for a
|
||||
|
|
@ -50,10 +48,10 @@ import static org.springframework.web.context.WebApplicationContext.SCOPE_APPLIC
|
|||
* @see org.springframework.stereotype.Component
|
||||
* @see org.springframework.context.annotation.Bean
|
||||
*/
|
||||
@Scope(SCOPE_APPLICATION)
|
||||
@Target({ TYPE, METHOD })
|
||||
@Retention(RUNTIME)
|
||||
@Target({ElementType.TYPE, ElementType.METHOD})
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Documented
|
||||
@Scope(WebApplicationContext.SCOPE_APPLICATION)
|
||||
public @interface ApplicationScope {
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -17,17 +17,15 @@
|
|||
package org.springframework.web.context.annotation;
|
||||
|
||||
import java.lang.annotation.Documented;
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.context.annotation.ScopedProxyMode;
|
||||
import org.springframework.core.annotation.AliasFor;
|
||||
|
||||
import static java.lang.annotation.ElementType.METHOD;
|
||||
import static java.lang.annotation.ElementType.TYPE;
|
||||
import static java.lang.annotation.RetentionPolicy.RUNTIME;
|
||||
import static org.springframework.web.context.WebApplicationContext.SCOPE_REQUEST;
|
||||
import org.springframework.web.context.WebApplicationContext;
|
||||
|
||||
/**
|
||||
* {@code @RequestScope} is a specialization of {@link Scope @Scope} for a
|
||||
|
|
@ -50,10 +48,10 @@ import static org.springframework.web.context.WebApplicationContext.SCOPE_REQUES
|
|||
* @see org.springframework.stereotype.Component
|
||||
* @see org.springframework.context.annotation.Bean
|
||||
*/
|
||||
@Scope(SCOPE_REQUEST)
|
||||
@Target({ TYPE, METHOD })
|
||||
@Retention(RUNTIME)
|
||||
@Target({ElementType.TYPE, ElementType.METHOD})
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Documented
|
||||
@Scope(WebApplicationContext.SCOPE_REQUEST)
|
||||
public @interface RequestScope {
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -17,17 +17,15 @@
|
|||
package org.springframework.web.context.annotation;
|
||||
|
||||
import java.lang.annotation.Documented;
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.context.annotation.ScopedProxyMode;
|
||||
import org.springframework.core.annotation.AliasFor;
|
||||
|
||||
import static java.lang.annotation.ElementType.METHOD;
|
||||
import static java.lang.annotation.ElementType.TYPE;
|
||||
import static java.lang.annotation.RetentionPolicy.RUNTIME;
|
||||
import static org.springframework.web.context.WebApplicationContext.SCOPE_SESSION;
|
||||
import org.springframework.web.context.WebApplicationContext;
|
||||
|
||||
/**
|
||||
* {@code @SessionScope} is a specialization of {@link Scope @Scope} for a
|
||||
|
|
@ -50,10 +48,10 @@ import static org.springframework.web.context.WebApplicationContext.SCOPE_SESSIO
|
|||
* @see org.springframework.stereotype.Component
|
||||
* @see org.springframework.context.annotation.Bean
|
||||
*/
|
||||
@Scope(SCOPE_SESSION)
|
||||
@Target({ TYPE, METHOD })
|
||||
@Retention(RUNTIME)
|
||||
@Target({ElementType.TYPE, ElementType.METHOD})
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Documented
|
||||
@Scope(WebApplicationContext.SCOPE_SESSION)
|
||||
public @interface SessionScope {
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2015 the original author or authors.
|
||||
* Copyright 2002-2016 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.
|
||||
|
|
@ -103,8 +103,8 @@ public class ControllerAdviceBean implements Ordered {
|
|||
this.order = initOrderFromBean(bean);
|
||||
}
|
||||
|
||||
ControllerAdvice annotation = AnnotatedElementUtils.findMergedAnnotation(
|
||||
beanType, ControllerAdvice.class);
|
||||
ControllerAdvice annotation =
|
||||
AnnotatedElementUtils.findMergedAnnotation(beanType, ControllerAdvice.class);
|
||||
|
||||
if (annotation != null) {
|
||||
this.basePackages = initBasePackages(annotation);
|
||||
|
|
|
|||
|
|
@ -132,10 +132,10 @@ public final class ModelFactory {
|
|||
|
||||
while (!this.modelMethods.isEmpty()) {
|
||||
InvocableHandlerMethod modelMethod = getNextModelMethod(container).getHandlerMethod();
|
||||
ModelAttribute annotation = modelMethod.getMethodAnnotation(ModelAttribute.class);
|
||||
if (container.containsAttribute(annotation.name())) {
|
||||
if (!annotation.binding()) {
|
||||
container.setBindingDisabled(annotation.name());
|
||||
ModelAttribute ann = modelMethod.getMethodAnnotation(ModelAttribute.class);
|
||||
if (container.containsAttribute(ann.name())) {
|
||||
if (!ann.binding()) {
|
||||
container.setBindingDisabled(ann.name());
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
|
@ -144,7 +144,7 @@ public final class ModelFactory {
|
|||
|
||||
if (!modelMethod.isVoid()){
|
||||
String returnValueName = getNameForReturnValue(returnValue, modelMethod.getReturnType());
|
||||
if (!annotation.binding()) {
|
||||
if (!ann.binding()) {
|
||||
container.setBindingDisabled(returnValueName);
|
||||
}
|
||||
if (!container.containsAttribute(returnValueName)) {
|
||||
|
|
@ -193,32 +193,32 @@ public final class ModelFactory {
|
|||
/**
|
||||
* Derives the model attribute name for a method parameter based on:
|
||||
* <ol>
|
||||
* <li>The parameter {@code @ModelAttribute} annotation value
|
||||
* <li>The parameter type
|
||||
* <li>The parameter {@code @ModelAttribute} annotation value
|
||||
* <li>The parameter type
|
||||
* </ol>
|
||||
* @return the derived name; never {@code null} or an empty string
|
||||
*/
|
||||
public static String getNameForParameter(MethodParameter parameter) {
|
||||
ModelAttribute annot = parameter.getParameterAnnotation(ModelAttribute.class);
|
||||
String name = (annot != null) ? annot.value() : null;
|
||||
ModelAttribute ann = parameter.getParameterAnnotation(ModelAttribute.class);
|
||||
String name = (ann != null ? ann.value() : null);
|
||||
return StringUtils.hasText(name) ? name : Conventions.getVariableNameForParameter(parameter);
|
||||
}
|
||||
|
||||
/**
|
||||
* Derive the model attribute name for the given return value using one of:
|
||||
* <ol>
|
||||
* <li>The method {@code ModelAttribute} annotation value
|
||||
* <li>The declared return type if it is more specific than {@code Object}
|
||||
* <li>The actual return value type
|
||||
* <li>The method {@code ModelAttribute} annotation value
|
||||
* <li>The declared return type if it is more specific than {@code Object}
|
||||
* <li>The actual return value type
|
||||
* </ol>
|
||||
* @param returnValue the value returned from a method invocation
|
||||
* @param returnType the return type of the method
|
||||
* @return the model name, never {@code null} nor empty
|
||||
*/
|
||||
public static String getNameForReturnValue(Object returnValue, MethodParameter returnType) {
|
||||
ModelAttribute annotation = returnType.getMethodAnnotation(ModelAttribute.class);
|
||||
if (annotation != null && StringUtils.hasText(annotation.value())) {
|
||||
return annotation.value();
|
||||
ModelAttribute ann = returnType.getMethodAnnotation(ModelAttribute.class);
|
||||
if (ann != null && StringUtils.hasText(ann.value())) {
|
||||
return ann.value();
|
||||
}
|
||||
else {
|
||||
Method method = returnType.getMethod();
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2014 the original author or authors.
|
||||
* Copyright 2002-2016 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,7 +24,6 @@ import org.apache.commons.logging.Log;
|
|||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
import org.springframework.core.MethodParameter;
|
||||
import org.springframework.util.Assert;
|
||||
import org.springframework.web.context.request.NativeWebRequest;
|
||||
|
||||
/**
|
||||
|
|
@ -76,7 +75,9 @@ public class HandlerMethodReturnValueHandlerComposite implements AsyncHandlerMet
|
|||
ModelAndViewContainer mavContainer, NativeWebRequest webRequest) throws Exception {
|
||||
|
||||
HandlerMethodReturnValueHandler handler = selectHandler(returnValue, returnType);
|
||||
Assert.notNull(handler, "Unknown return value type [" + returnType.getParameterType().getName() + "]");
|
||||
if (handler == null) {
|
||||
throw new IllegalArgumentException("Unknown return value type: " + returnType.getParameterType().getName());
|
||||
}
|
||||
handler.handleReturnValue(returnValue, returnType, mavContainer, webRequest);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2014 the original author or authors.
|
||||
* Copyright 2002-2016 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.
|
||||
|
|
@ -77,9 +77,9 @@ public class SpringConfigurator extends Configurator {
|
|||
return endpoint;
|
||||
}
|
||||
|
||||
Component annot = AnnotationUtils.findAnnotation(endpointClass, Component.class);
|
||||
if ((annot != null) && wac.containsBean(annot.value())) {
|
||||
T endpoint = wac.getBean(annot.value(), endpointClass);
|
||||
Component ann = AnnotationUtils.findAnnotation(endpointClass, Component.class);
|
||||
if (ann != null && wac.containsBean(ann.value())) {
|
||||
T endpoint = wac.getBean(ann.value(), endpointClass);
|
||||
if (logger.isTraceEnabled()) {
|
||||
logger.trace("Using @ServerEndpoint singleton " + endpoint);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue