Browse Source
This commit introduces the following common composed annotations for web scopes. - @RequestScope - @SessionScope - @ApplicationScope Issue: SPR-13993pull/982/head
5 changed files with 243 additions and 49 deletions
@ -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 @@ |
|||||||
|
/* |
||||||
|
* 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 @@ |
|||||||
|
/* |
||||||
|
* 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