Browse Source
This commit introduces the following common composed annotations for web scopes. - @RequestScope - @SessionScope - @ApplicationScope Issue: SPR-13993pull/982/head
Sam Brannen
9 years ago
5 changed files with 243 additions and 49 deletions
@ -0,0 +1,66 @@
@@ -0,0 +1,66 @@
|
||||
/* |
||||
* 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. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.web.context.annotation; |
||||
|
||||
import java.lang.annotation.Documented; |
||||
import java.lang.annotation.Retention; |
||||
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; |
||||
|
||||
/** |
||||
* {@code @ApplicationScope} is a specialization of {@link Scope @Scope} for a |
||||
* component whose lifecycle is bound to the current web application. |
||||
* |
||||
* <p>Specifically, {@code @ApplicationScope} is a <em>composed annotation</em> that |
||||
* acts as a shortcut for {@code @Scope("application")} with the default |
||||
* {@link #proxyMode} set to {@link ScopedProxyMode#TARGET_CLASS TARGET_CLASS}. |
||||
* |
||||
* <p>{@code @ApplicationScope} may be used as a meta-annotation to create custom |
||||
* composed annotations. |
||||
* |
||||
* @author Sam Brannen |
||||
* @since 4.3 |
||||
* @see RequestScope |
||||
* @see SessionScope |
||||
* @see org.springframework.context.annotation.Scope |
||||
* @see org.springframework.web.context.WebApplicationContext#SCOPE_APPLICATION |
||||
* @see org.springframework.web.context.support.ServletContextScope |
||||
* @see org.springframework.stereotype.Component |
||||
* @see org.springframework.context.annotation.Bean |
||||
*/ |
||||
@Scope(SCOPE_APPLICATION) |
||||
@Target({ TYPE, METHOD }) |
||||
@Retention(RUNTIME) |
||||
@Documented |
||||
public @interface ApplicationScope { |
||||
|
||||
/** |
||||
* Alias for {@link Scope#proxyMode}. |
||||
* <p>Defaults to {@link ScopedProxyMode#TARGET_CLASS}. |
||||
*/ |
||||
@AliasFor(annotation = Scope.class) |
||||
ScopedProxyMode proxyMode() default ScopedProxyMode.TARGET_CLASS; |
||||
|
||||
} |
@ -0,0 +1,66 @@
@@ -0,0 +1,66 @@
|
||||
/* |
||||
* 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. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.web.context.annotation; |
||||
|
||||
import java.lang.annotation.Documented; |
||||
import java.lang.annotation.Retention; |
||||
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; |
||||
|
||||
/** |
||||
* {@code @RequestScope} is a specialization of {@link Scope @Scope} for a |
||||
* component whose lifecycle is bound to the current web request. |
||||
* |
||||
* <p>Specifically, {@code @RequestScope} is a <em>composed annotation</em> that |
||||
* acts as a shortcut for {@code @Scope("request")} with the default |
||||
* {@link #proxyMode} set to {@link ScopedProxyMode#TARGET_CLASS TARGET_CLASS}. |
||||
* |
||||
* <p>{@code @RequestScope} may be used as a meta-annotation to create custom |
||||
* composed annotations. |
||||
* |
||||
* @author Sam Brannen |
||||
* @since 4.3 |
||||
* @see SessionScope |
||||
* @see ApplicationScope |
||||
* @see org.springframework.context.annotation.Scope |
||||
* @see org.springframework.web.context.WebApplicationContext#SCOPE_REQUEST |
||||
* @see org.springframework.web.context.request.RequestScope |
||||
* @see org.springframework.stereotype.Component |
||||
* @see org.springframework.context.annotation.Bean |
||||
*/ |
||||
@Scope(SCOPE_REQUEST) |
||||
@Target({ TYPE, METHOD }) |
||||
@Retention(RUNTIME) |
||||
@Documented |
||||
public @interface RequestScope { |
||||
|
||||
/** |
||||
* Alias for {@link Scope#proxyMode}. |
||||
* <p>Defaults to {@link ScopedProxyMode#TARGET_CLASS}. |
||||
*/ |
||||
@AliasFor(annotation = Scope.class) |
||||
ScopedProxyMode proxyMode() default ScopedProxyMode.TARGET_CLASS; |
||||
|
||||
} |
@ -0,0 +1,66 @@
@@ -0,0 +1,66 @@
|
||||
/* |
||||
* 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. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.web.context.annotation; |
||||
|
||||
import java.lang.annotation.Documented; |
||||
import java.lang.annotation.Retention; |
||||
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; |
||||
|
||||
/** |
||||
* {@code @SessionScope} is a specialization of {@link Scope @Scope} for a |
||||
* component whose lifecycle is bound to the current web session. |
||||
* |
||||
* <p>Specifically, {@code @SessionScope} is a <em>composed annotation</em> that |
||||
* acts as a shortcut for {@code @Scope("session")} with the default |
||||
* {@link #proxyMode} set to {@link ScopedProxyMode#TARGET_CLASS TARGET_CLASS}. |
||||
* |
||||
* <p>{@code @SessionScope} may be used as a meta-annotation to create custom |
||||
* composed annotations. |
||||
* |
||||
* @author Sam Brannen |
||||
* @since 4.3 |
||||
* @see RequestScope |
||||
* @see ApplicationScope |
||||
* @see org.springframework.context.annotation.Scope |
||||
* @see org.springframework.web.context.WebApplicationContext#SCOPE_SESSION |
||||
* @see org.springframework.web.context.request.SessionScope |
||||
* @see org.springframework.stereotype.Component |
||||
* @see org.springframework.context.annotation.Bean |
||||
*/ |
||||
@Scope(SCOPE_SESSION) |
||||
@Target({ TYPE, METHOD }) |
||||
@Retention(RUNTIME) |
||||
@Documented |
||||
public @interface SessionScope { |
||||
|
||||
/** |
||||
* Alias for {@link Scope#proxyMode}. |
||||
* <p>Defaults to {@link ScopedProxyMode#TARGET_CLASS}. |
||||
*/ |
||||
@AliasFor(annotation = Scope.class) |
||||
ScopedProxyMode proxyMode() default ScopedProxyMode.TARGET_CLASS; |
||||
|
||||
} |
Loading…
Reference in new issue