001/* 002 * Copyright 2002-2016 the original author or authors. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * https://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 017package org.springframework.web.context.annotation; 018 019import java.lang.annotation.Documented; 020import java.lang.annotation.ElementType; 021import java.lang.annotation.Retention; 022import java.lang.annotation.RetentionPolicy; 023import java.lang.annotation.Target; 024 025import org.springframework.context.annotation.Scope; 026import org.springframework.context.annotation.ScopedProxyMode; 027import org.springframework.core.annotation.AliasFor; 028import org.springframework.web.context.WebApplicationContext; 029 030/** 031 * {@code @SessionScope} is a specialization of {@link Scope @Scope} for a 032 * component whose lifecycle is bound to the current web session. 033 * 034 * <p>Specifically, {@code @SessionScope} is a <em>composed annotation</em> that 035 * acts as a shortcut for {@code @Scope("session")} with the default 036 * {@link #proxyMode} set to {@link ScopedProxyMode#TARGET_CLASS TARGET_CLASS}. 037 * 038 * <p>{@code @SessionScope} may be used as a meta-annotation to create custom 039 * composed annotations. 040 * 041 * @author Sam Brannen 042 * @since 4.3 043 * @see RequestScope 044 * @see ApplicationScope 045 * @see org.springframework.context.annotation.Scope 046 * @see org.springframework.web.context.WebApplicationContext#SCOPE_SESSION 047 * @see org.springframework.web.context.request.SessionScope 048 * @see org.springframework.stereotype.Component 049 * @see org.springframework.context.annotation.Bean 050 */ 051@Target({ElementType.TYPE, ElementType.METHOD}) 052@Retention(RetentionPolicy.RUNTIME) 053@Documented 054@Scope(WebApplicationContext.SCOPE_SESSION) 055public @interface SessionScope { 056 057 /** 058 * Alias for {@link Scope#proxyMode}. 059 * <p>Defaults to {@link ScopedProxyMode#TARGET_CLASS}. 060 */ 061 @AliasFor(annotation = Scope.class) 062 ScopedProxyMode proxyMode() default ScopedProxyMode.TARGET_CLASS; 063 064}