spring注解

前段时间面试被面试官问到spring都有哪些注解,一时半会答出几个,感觉好尴尬,于是今天特意把spring里面的注解找出来并且给予说明。整理过程中难免有疏忽,各位如果有不同意见请反馈,部分注解没有找到说明,后期补上。注解不是全部,仅仅部分而已。

org.springframework.beans.factory.annotation.Autowired:@Autowired注释,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。 通过 @Autowired的使用来消除 set ,get方法。当使用@Autowired注解的时候,其实默认就是@Autowired(required=true),表示注入的时候,该bean必须存在,否则就会注入失败。

org.springframework.beans.factory.annotation.Configurable:@Configurable用来自动注入bean的注解,不需要通过BeanFactory去获取。

org.springframework.beans.factory.annotation.Lookup:@Lookup在Spring的诸多应用场景中bean都是单例形式,当一个单利bean需要和一个非单利bean组合使用或者一个非单利bean和另一个非单利bean组合使用时,我们通常都是将依赖以属性的方式放到bean中来引用,然后以@Autowired来标记需要注入的属性。但是这种方式在bean的生命周期不同时将会出现很明显的问题,假设单利bean A需要一个非单利bean B(原型),我们在A中注入bean B,每次调用bean A中的方法时都会用到bean B,我们知道Spring Ioc容器只在容器初始化时执行一次,也就是bean A中的依赖bean B只有一次注入的机会,但是实际上bean B我们需要的是每次调用方法时都获取一个新的对象(原型)所以问题明显就是:我们需要bean B是一个原型bean,而事实上bean B的依赖只注入了一次变成了事实上的单利bean。
解决方案:
1, 在bean A中引入ApplicationContext每次调用方法时用上下文的getBean(name,class)方法去重新获取bean B的实例。
2, 使用@Lookup注解。
这两种解决方案都能解决我们遇到的问题,但是第二种相对而言更简单。

org.springframework.beans.factory.annotation.Qualifier:和@Autowired类似,自动装配字段,但是遇见多个生成相同的bean实例,可能编译器就不知道选哪个,所以就使用qualifier进行修饰。

org.springframework.beans.factory.annotation.Required:@Required注解作用于Beansetter方法上,用于检查一个Bean的属性的值在配置期间是否被赋予或设置(populated)。

org.springframework.beans.factory.annotation.Value:@Value注解的作用是将我们配置文件的属性读出来,有@Value(“KaTeX parse error: Expected 'EOF', got '#' at position 14: {}”)和@Value(“#̲{}”)两种方式,区别之后介绍…{ property : default_value }和#{ obj.property? :default_value } 第一个注入的是外部配置文件对应的property,第二个则是SpEL表达式对应的内容。 那个default_value,就是前面的值为空时的默认值。注意二者的不同,#{}里面那个obj代表对象。

org.springframework.boot.SpringBootConfiguration:@SpringBootConfiguration继承自@Configuration,二者功能也一致,标注当前类是配置类,并会将当前类内声明的一个或多个以@Bean注解标记的方法的实例纳入到spring容器中,并且实例名就是方法名。

org.springframework.boot.autoconfigure.AutoConfigurationPackage:@AutoConfigurationPackage保存自动配置类以供之后的使用,比如给JPA entity扫描器用来扫描开发人员通过注解@Entity定义的entity类。

org.springframework.boot.autoconfigure.AutoConfigureAfter:@AutoConfigureAfter在加载参数类之后再加载当前类 它的value 是一个数组一般配合着@import 注解使用 ,在使用import时必须要让这个类先被spring ioc 加载好 所以@AutoConfigureAfter必不可少。

org.springframework.boot.autoconfigure.AutoConfigureBefore:@AutoConfigureBefore在指定的配置类初始化前加载。

org.springframework.boot.autoconfigure.AutoConfigureOrder:AutoConfigureOrder改变Bean的创建顺序。

org.springframework.boot.autoconfigure.EnableAutoConfiguration:@EnableAutoConfiguration 作用从classpath中搜索所有META-INF/spring.factories配置文件然后,将其中org.springframework.boot.autoconfigure.EnableAutoConfiguration key对应的配置项加载到spring容器只有spring.boot.enableautoconfiguration为true(默认为true)的时候,才启用自动配置@EnableAutoConfiguration还可以进行排除,排除方式有2中,一是根据class来排除(exclude),二是根据class name(excludeName)来排除其内部实现的关键点有:
1)ImportSelector 该接口的方法的返回值都会被纳入到spring容器管理中;
2)SpringFactoriesLoader 该类可以从classpath中搜索所有META-INF/spring.factories配置文件,并读取配置。

org.springframework.boot.autoconfigure.ImportAutoConfiguration:@ImportAutoConfiguration导入并应用指定的自动配置类。 用与@EnableAutoConfiguration相同的排序规则,但将自动配置类限制为指定的集合,而不是查询spring.factories。
也可以用于 exclude()特定的自动配置类,以便永远不会应用它们。通常,@ EnableAutoConfiguration应优先于此批注使用,但是,@ ImportAutoConfiguration在某些情况下尤其在编写测试时非常有用。

org.springframework.boot.autoconfigure.SpringBootApplication:@SpringBootApplication是Sprnig Boot项目的核心注解,目的是开启自动配置org.springframework.boot.autoconfigure.condition.ConditionalOnBean**:注解是只有当另外一个实例存在时,才创建,否则不创建,也就是,最终有可能两个实例都创建了,有可能只创建了一个实例,也有可能一个实例都没创建。

org.springframework.boot.autoconfigure.condition.ConditionalOnClass:@ConditionalOnClass该注解的参数对应的类必须存在,否则不解析该注解修饰的配置类。

org.springframework.boot.autoconfigure.condition.ConditionalOnCloudPlatform:@ConditionalOnCloudPlatform当指定的云平台激活时才开启配置。

org.springframework.boot.autoconfigure.condition.ConditionalOnExpression:@ConditionalOnExpression当 SpEL 表达式为 true 时才开启配置。

org.springframework.boot.autoconfigure.condition.ConditionalOnJava:@ConditionalOnJava当运行的 Java JVM 在指定的版本范围时才开启配置。

org.springframework.boot.autoconfigure.condition.ConditionalOnJndi:@ConditionalOnJndi当指定的 JNDI 存在时才开启配置。

org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean:和 @ConditionalOnBean 注解相反,当容器中没有指定的 Bean 才开启配置。

org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass:和 @ConditionalOnMissingClass 注解相反,当容器中没有指定的 Class 才开启配置。

org.springframework.boot.autoconfigure.condition.ConditionalOnNotWebApplication:@ConditionalOnWebApplication 注解相反,当前项目类型不是 WEB 项目才开启配置。

org.springframework.boot.autoconfigure.condition.ConditionalOnProperty:@ConditionalOnProperty当指定的属性有指定的值时才开启配置。

org.springframework.boot.autoconfigure.condition.ConditionalOnResource:@ConditionalOnResource当类路径下有指定的资源才开启配置。

org.springframework.boot.autoconfigure.condition.ConditionalOnSingleCandidate:@ConditionalOnSingleCandidate当指定的 class 在容器中只有一个 Bean,或者同时有多个但为首选时才开启配置。

org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication:@ConditionalOnWebApplication当前项目类型是 WEB 项目才开启配置。

org.springframework.boot.autoconfigure.domain.EntityScan:@EntityScan会自动扫描指定包下的全部标有@Entity的类。

org.springframework.boot.autoconfigure.flyway.FlywayDataSource

org.springframework.boot.autoconfigure.liquibase.LiquibaseDataSource

org.springframework.boot.autoconfigure.security.oauth2.client.EnableOAuth2Sso

org.springframework.boot.autoconfigure.web.ConditionalOnEnabledResourceChain

org.springframework.boot.context.embedded.LocalServerPort:通过 @LocalServerPort注解,获取测试时动态的端口号。

org.springframework.boot.context.properties.ConfigurationProperties:@ConfigurationProperties能够根据类型校验和管理application中的bean。

org.springframework.boot.context.properties.ConfigurationPropertiesBinding

org.springframework.boot.context.properties.DeprecatedConfigurationProperty

org.springframework.boot.context.properties.EnableConfigurationProperties:使使用 @ConfigurationProperties 注解的类生效。

org.springframework.boot.context.properties.NestedConfigurationProperty

org.springframework.boot.devtools.restart.ConditionalOnInitializedRestarter

org.springframework.boot.devtools.restart.RestartScope

org.springframework.boot.jackson.JsonComponent:通过@ResponseBody注解返回json数据,通常返回的是一个Object,spring会自动将Object转化为json字符串。但是在某些时候,我希望对返回的json做进一步处理,比如再次封装一下,那么在springboot中可以通过@JsonComponent注解来处理。

org.springframework.boot.lang.UsesUnsafeJava

org.springframework.boot.web.servlet.ServletComponentScan:在 SpringBootApplication 上使用@ServletComponentScan 注解后,Servlet、Filter、Listener 可以直接通过 @WebServlet、@WebFilter、@WebListener 注解自动注册,无需其他代码。

org.springframework.cache.annotation.CacheConfig:@CacheConfig**:主要用于配置该类中会用到的一些共用的缓存配置。在这里@CacheConfig(cacheNames = “users”):配置了该数据访问对象中返回的内容将存储于名为users的缓存对象中,我们也可以不使用该注解,直接通过@Cacheable自己配置缓存集的名字来定义。

org.springframework.cache.annotation.CacheEvict:配置于函数上,通常用在删除方法上,用来从缓存中移除相应数据。除了同@Cacheable一样的参数之外,它还有下面两个参数**:allEntries**:非必需,默认为false**。当为true时,会移除所有数据; beforeInvocation**:非必需,默认为false,会在调用方法之后移除数据。当为true时,会在调用方法之前移除数据。

org.springframework.cache.annotation.CachePut:配置于函数上,能够根据参数定义条件来进行缓存,它与@Cacheable不同的是,它每次都会真是调用函数,所以主要用于数据新增和修改操作上。它的参数与@Cacheable类似,具体功能可参考上面对@Cacheable参数的解析。

org.springframework.cache.annotation.Cacheable:@Cacheable**:配置了findByName函数的返回值将被加入缓存。同时在查询时,会先从缓存中获取,若不存在才再发起对数据库的访问。该注解主要有下面几个参数**:
1. value、cacheNames:两个等同的参数(cacheNames为Spring 4新增,作为value的别名),用于指定缓存存储的集合名。由于Spring 4中新增了@CacheConfig,因此在Spring 3中原本必须有的value属性,也成为非必需项了;
2. key:缓存对象存储在Map集合中的key值,非必需,缺省按照函数的所有参数组合作为key值,若自己配置需使用SpEL表达式,比如:@Cacheable(key = “#p0”):使用函数第一个参数作为缓存的key值,更多关于SpEL表达式的详细内容可参考官方文档;
3. condition:缓存对象的条件,非必需,也需使用SpEL表达式,只有满足表达式条件的内容才会被缓存,比如:@Cacheable(key = “#p0”, condition = “#p0.length() < 3”),表示只有当第一个参数的长度小于3的时候才会被缓存,若做此配置上面的AAA用户就不会被缓存,读者可自行实验尝试;
4. unless:另外一个缓存条件参数,非必需,需使用SpEL表达式。它不同于condition参数的地方在于它的判断时机,该条件是在函数被调用之后才做判断的,所以它可以通过对result进行判断;
5. keyGenerator:用于指定key生成器,非必需。若需要指定一个自定义的key生成器,我们需要去实现org.springframework.cache.interceptor.KeyGenerator接口,并使用该参数来指定。需要注意的是:该参数与key是互斥的;
6. cacheManager:用于指定使用哪个缓存管理器,非必需。只有当有多个时才需要使用;
7. cacheResolver:用于指定使用那个缓存解析器,非必需。需通过org.springframework.cache.interceptor.CacheResolver接口来实现自己的缓存解析器,并用该参数指定。

org.springframework.cache.annotation.Caching

org.springframework.cache.annotation.EnableCaching:@EnableCaching注解是spring framework中的注解驱动的缓存管理功能。自spring版本3.1起加入了该注解。如果你使用了这个注解,那么你就不需要在XML文件中配置cache manager了。当你在配置类(@Configuration)上使用@EnableCaching注解时,会触发一个post processor,这会扫描每一个spring bean,查看是否已经存在注解对应的缓存。如果找到了,就会自动创建一个代理拦截方法调用,使用缓存的bean执行处理。

org.springframework.context.annotation.Bean:@Bean明确地指示了一种产生一个bean的方法,并且交给Spring容器管理。

org.springframework.context.annotation.ComponentScan:@ComponentScan主要就是定义扫描的路径从中找出标识了需要装配的类自动装配到spring的bean容器中。

org.springframework.context.annotation.ComponentScan$Filter

org.springframework.context.annotation.ComponentScans:可以一次声明多个@ComponentScan。

org.springframework.context.annotation.Conditional:@Conditional是Spring4新提供的注解,它的作用是按照一定的条件进行判断,满足条件给容器注册bean。

org.springframework.context.annotation.Configuration:从Spring3.0,@Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。
注意:@Configuration注解的配置类有如下要求:
@Configuration不可以是final类型;
@Configuration不可以是匿名类;
嵌套的configuration必须是静态类。

org.springframework.context.annotation.DependsOn:该注解用于声明当前bean依赖于另外一个bean。所依赖的bean会被容器确保在当前bean实例化之前被实例化。

org.springframework.context.annotation.Description

org.springframework.context.annotation.EnableAspectJAutoProxy:表示开启AOP代理自动配置,如果配@EnableAspectJAutoProxy表示使用cglib进行代理对象的生成; 设置@EnableAspectJAutoProxy(exposeProxy=true)表示通过aop框架暴露该代理对象,aopContext能够访问。从@EnableAspectJAutoProxy的定义可以看得出,它引入AspectJAutoProxyRegister.class对象,该对象是基于注解@EnableAspectJAutoProxy注册一个AnnotationAwareAspectJAutoProxyCreator,该对象通过调用AopConfigUtils.registerAspectJAnnotationAutoProxyCreatorIfNecessary(registry);注册一个aop代理对象生成器。

org.springframework.context.annotation.EnableLoadTimeWeaving

org.springframework.context.annotation.EnableMBeanExport

org.springframework.context.annotation.Import:@Import注解就是之前xml配置中的import标签,可以用于依赖第三方包中bean的配置和加载在4.2之前只支持导入配置类在4.2,@Import注解支持导入普通的java类,并将其声明成一个bean。

org.springframework.context.annotation.ImportResource:和@Import类似,区别就是@ImportResource导入的是配置文件。

org.springframework.context.annotation.Lazy:Lazy注解用于标识bean是否需要延迟加载。

org.springframework.context.annotation.Primary:当一个接口有多个不同实现时,使用@Autowired注解时会报org.springframework.beans.factory.NoUniqueBeanDefinitionException异常信息; 方案1-@Qualifier,使用Qualifier注解,选择一个对象的名称,通常比较常用; 方案2-@Primary,Primary可以理解为默认优先选择,同时不可以同时设置多个,内部实质是设置BeanDefinition的primary属性。

org.springframework.context.annotation.Profile:@profile注解是spring提供的一个用来标明当前运行环境的注解。

org.springframework.context.annotation.PropertySource:通过@PropertySource注解将properties配置文件中的值存储到Spring的Environment中,Environment接口提供方法去读取配置文件中的值,参数是properties文件中定义的key值。

org.springframework.context.annotation.PropertySources:用于聚合多个PropertySource注释的Container注释。可以原生使用,声明几个嵌套的PropertySource注释。 也可以与Java 8对可重复注释的支持结合使用,其中PropertySource可以简单地在同一类型上多次声明,隐式生成此容器注释。

org.springframework.context.annotation.Role:BeanDefinition的getRole方法,用于标识Bean的分类。

org.springframework.context.annotation.Scope:@Scope注解是springIoc容器中的一个作用域,在 Spring IoC 容器中具有以下几种作用域**:基本作用域singleton(单例)、prototype(多例),Web 作用域(reqeust、session、globalsession),自定义作用域。

org.springframework.context.event.EventListener:@EventListener 注解实现事件监听。

org.springframework.core.annotation.AliasFor:@AliasFor注解可以为注解本身提供别名。

org.springframework.core.annotation.Order:@Order标记定义了组件的加载顺序。

org.springframework.data.annotation.AccessType:AccessType.PROPERTY: 通过getter和setter方法访问Entity的变量,可以把变量定义为private; 需要在getter方法上定义字段的属性; AccessType.FIELD: 直接访问Entity的变量,可以不定义getter和setter方法,但是需要将变量定义为public; 需要在变量上定义字段的属性。

org.springframework.data.annotation.CreatedBy:表示该字段为创建人,在这个实体被insert的时候,会设置值。

org.springframework.data.annotation.CreatedDate:表示该字段为创建时间时间字段,在这个实体被insert的时候,会设置值。

org.springframework.data.annotation,id :@Id 映射主键属性。

org.springframework.data.annotation.LastModifiedBy:表示该字段为修改人,在这个实体被insert的时候,会设置值。

org.springframework.data.annotation.LastModifiedDate:表示该字段为更新时间时间字段,在这个实体被insert的时候,会设置值。

org.springframework.data.annotation.PersistenceConstructor:声明构造函数,作用是把从数据库取出的数据实例化为对象。该构造函数传入的值为从DBObject中取出的数据。

org.springframework.data.annotation.Persistent

org.springframework.data.annotation.QueryAnnotation

org.springframework.data.annotation.ReadOnlyProperty

org.springframework.data.annotation.Reference

org.springframework.data.annotation.Transient:实体类中使用了@Table注解后,想要添加表中不存在的字段,就要使用@Transient这个注解了。使用 @Transient 表示该属性并非是一个要映射到数据库表中的字段,只是起辅助作用.ORM框架将会忽略该属性注解可以加在属性上 也可以加在get()上面。

org.springframework.data.annotation.TypeAlias:@Alias注解在类上的使用方式(推荐)。

org.springframework.data.annotation.Version:在jpa中,@Version注解,可以实现乐观锁功能。

org.springframework.data.convert.ReadingConverter

org.springframework.data.convert.WritingConverter

org.springframework.data.domain.AfterDomainEventPublication:@DomainEvents可以返回单个事件实例或事件集合,所有事件发布后@AfterDomainEventPublication用于潜在地清理要发布的事件列表;
@DomainEvents用来发布时间,触发机制在保存的时候。 @AfterDomainEventPublication在事件发布之后触发。有趣的一件事是@AfterDomainEventPublication只在@DomainEvents存在时才起作用。

org.springframework.data.domain.DomainEvents:@DomainEvents可以返回单个事件实例或事件集合,所有事件发布后@AfterDomainEventPublication用于潜在地清理要发布的事件列表;
@DomainEvents用来发布时间,触发机制在保存的时候。 @AfterDomainEventPublication在事件发布之后触发。有趣的一件事是@AfterDomainEventPublication只在@DomainEvents存在时才起作用。

org.springframework.data.keyvalue.annotation.KeySpace

org.springframework.data.keyvalue.repository.config.QueryCreatorType

org.springframework.data.map.repository.config.EnableMapRepositories

org.springframework.data.querydsl.binding.QuerydslPredicate

org.springframework.data.redis.core.RedisHash

org.springframework.data.redis.core.TimeToLive

org.springframework.data.redis.core.index.GeoIndexed

org.springframework.data.redis.core.index.Indexed

org.springframework.data.redis.repository.configuration.EnableRedisRepositories

org.springframework.data.repository.NoRepositoryBean:@NoRepositoryBean来注释此中间接口以基本上告诉Spring Data**:不要为此接口创建存储库代理bean。

org.springframework.data.repository.RepositoryDefinition:@RepositoryDefinition是用注解方式声明继承Repository接口,和继承Repository 接口方式等价。

org.springframework.data.repository.cdi.Eager

org.springframework.data.repository.query.Param:@Param注解的作用是给参数命名,参数命名后就能根据名字得到参数值,正确的将参数传入sql语句中。

org.springframework.data.web.JsonPath

org.springframework.data.web.PageableDefault:@PageableDefault个性化的设置pageable的默认配置。

org.springframework.data.web.ProjectedPayload

org.springframework.data.web.SortDefault

org.springframework.data.web.SortDefault$SortDefaults

org.springframework.data.web.config.EnableSpringDataWebSupport

org.springframework.format.annotation.DateTimeFormat:@DateTimeFormat是用来验证输入的日期格式。

org.springframework.format.annotation.NumberFormat:@NumberFormat是用来验证输入的数字格式。

org.springframework.jmx.export.annotation.ManagedAttribute

org.springframework.jmx.export.annotation.ManagedMetric

org.springframework.jmx.export.annotation.ManagedNotification:类型级注释,指示bean发出的JMX通知。

org.springframework.jmx.export.annotation.ManagedNotifications

org.springframework.jmx.export.annotation.ManagedOperation

org.springframework.jmx.export.annotation.ManagedOperationParameter:有关JMX操作参数的元数据。 与ManagedOperation属性一起使用。

org.springframework.jmx.export.annotation.ManagedOperationParameters

org.springframework.jmx.export.annotation.ManagedResource:将类的所有实例标识为JMX受控资源。

org.springframework.lang.UsesJava7

org.springframework.lang.UsesJava8

org.springframework.lang.UsesSunHttpServer

org.springframework.lang.UsesSunMisc

org.springframework.messaging.handler.annotation.DestinationVariable:指示方法参数的注释应绑定到目标模板字符串中的模板变量。

org.springframework.messaging.handler.annotation.Header

org.springframework.messaging.handler.annotation.Headers

org.springframework.messaging.handler.annotation.MessageExceptionHandler

org.springframework.messaging.handler.annotation.MessageMapping:通过匹配消息目标将消息映射到消息处理方法的注释。此注释也可以在类型级别上使用,在这种情况下,它为所有方法级别注释定义公共目标前缀或模式,包括方法级别的@SubscribeMapping注释。使用此注释注释的处理程序方法允许具有灵活的签名。

org.springframework.messaging.handler.annotation.Payload

org.springframework.messaging.handler.annotation.SendTo:@SendTo会将接收到的消息发送到指定的路由目的地,所有订阅该消息的用户都能收到,属于广播。

org.springframework.messaging.simp.annotation.SendToUser:消息目的地有UserDestinationMessageHandler来处理,会将消息路由到发送者对应的目的地。默认该注解前缀为/user。

org.springframework.messaging.simp.annotation.SubscribeMapping

org.springframework.objenesis.instantiator.annotations.Instantiator

org.springframework.plugin.core.config.EnablePluginRegistries:@EnablePluginRegistries注解是spring-plugin模块提供的一个基于Plugin类型注册PluginRegistry实例到Spring上下文的注解。@EnablePluginRegistries注解内部使用PluginRegistriesBeanDefinitionRegistrar注册器去获取注解的value属性(类型为Plugin接口的Class数组); 然后遍历这个Plugin数组,针对每个Plugin在Spring上下文中注册PluginRegistryFactoryBean,并设置相应的name和属性。

org.springframework.scheduling.annotation.Async:@Async标注的方法,称之为异步方法; 这些方法将在执行的时候,将会在独立的线程中被执行,调用者无需等待它的完成,即可继续其他的操作。

org.springframework.scheduling.annotation.EnableAsync:@EnableAsync注解开启多线程,可以异步执行,可以标注在方法、类上。@Async所修饰的函数不要定义为static类型,否则不会生效。

org.springframework.scheduling.annotation.EnableScheduling:@EnableScheduling来开启对计划任务的支持,然后在要执行计划任务的方法上注解@Scheduled,声明这是一个计划任务。

org.springframework.scheduling.annotation.Scheduled:@Scheduled注解执行定时任务。

org.springframework.scheduling.annotation.Schedules

org.springframework.stereotype.Component:@component把普通pojo实例化到spring容器中,相当于配置文件中的 ,泛指各种组件,就是说当我们的类不属于各种归类的时候(不属于@Controller、@Services等的时候),我们就可以使用@Component来标注这个类。

org.springframework.stereotype.Controller:使用@Controller 注解,在对应的方法上,视图解析器可以解析return 的jsp,html页面,并且跳转到相应页面。

org.springframework.stereotype.Repository:@Repository注解用于将数据访问层 (DAO 层 ) 的类标识为 Spring Bean。具体只需将该注解标注在 DAO类上即可。

org.springframework.stereotype.Service:@Service用于标注业务层组件。

org.springframework.transaction.annotation.EnableTransactionManagement: @EnableTransactionManagement 开启事务支持

org.springframework.transaction.annotation.Transactional:Spring 事务管理分为编程式和声明式的两种方式。编程式事务指的是通过编码方式实现事务; 声明式事务基于 AOP,将具体业务逻辑与事务处理解耦。声明式事务管理使业务代码逻辑不受污染, 因此在实际使用中声明式事务用的比较多。声明式事务有两种方式,一种是在配置文件(xml)中做相关的事务规则声明,另一种是基于 @Transactional 注解的方式。本文将着重介绍基于 @Transactional 注解的事务管理。默认配置下 Spring 只会回滚运行时、未检查异常(继承自 RuntimeException 的异常)或者 Error。@Transactional 注解只能应用到 public 方法才有效。

org.springframework.transaction.event.TransactionalEventListener:@TransactionEventListener能够控制在事务的时候Event事件的处理方式。

org.springframework.validation.annotation.Validated:@validated来校验数据,如果数据异常则会统一抛出异常,方便异常中心统一处理

org.springframework.web.bind.annotation.ControllerAdvice:ControllerAdvice是组件注解,他使得其实现类能够被classpath扫描自动发现,如果应用是通过MVC命令空间或MVC Java编程方式配置,那么该特性默认是自动开启的。注解@ControllerAdvice的类可以拥有@ExceptionHandler, @InitBinder或 @ModelAttribute注解的方法,并且这些方法会被应用到控制器类层次的所有@RequestMapping方法上。

org.springframework.web.bind.annotation.CookieValue:@CookieValue注解用于将请求的cookie数据映射到功能处理方法的参数上。

org.springframework.web.bind.annotation.CrossOrigin:@CrossOrigin可以处理跨域请求,让你能访问不是一个域的文件。

org.springframework.web.bind.annotation.DeleteMapping:@DeleteMapping是一个组合注解,是@RequestMapping(method = RequestMethod.DELETE)的缩写。该注解将HTTP Delete 映射到 特定的处理方法上。

org.springframework.web.bind.annotation.ExceptionHandler:统一处理某一类异常,从而能够减少代码重复率和复杂度。

org.springframework.web.bind.annotation.GetMapping:@GetMapping是一个组合注解,是@RequestMapping(method = RequestMethod.GET)的缩写。该注解将HTTP Get 映射到 特定的处理方法上。

org.springframework.web.bind.annotation.InitBinder:由 @InitBinder 标识的方法,可以对 WebDataBinder 对象进行初始化。WebDataBinder 是 DataBinder 的子类,用于完成由表单字段到 JavaBean 属性的绑定。
@InitBinder方法不能有返回值,它必须声明为void。@InitBinder方法的参数通常是是 WebDataBinder。

org.springframework.web.bind.annotation.Mapping

org.springframework.web.bind.annotation.MatrixVariable:@MatrixVariable注解的出现拓展了URL请求地址的功能。多个变量可以使用“;”分隔,如果是一个变量的多个值那么可以使用“,”(逗号)分隔,针对每一个Parh Variable绑定一个Matrix Variable,然后使用 value 和 pathVar属性就能找到该值。另外,正对Matrix Variable也是可以指定自身的的属性; 如果要开启Matrix Variable功能的话,必须设置 RequestMappingHandlerMapping 中的 removeSemicolonContent 为false。

org.springframework.web.bind.annotation.ModelAttribute:@ModelAttribute最主要的作用是将数据添加到模型对象中,用于视图页面展示时使用。@ModelAttribute等价于 model.addAttribute(“attributeName”, abc); 但是根据@ModelAttribute注释的位置不同,和其他注解组合使用,致使含义有所不同。被@ModelAttribute注释的方法会在此controller每个方法执行前被执行,因此对于一个controller映射多个URL的用法来说,要谨慎使用。@ModelAttribute注释方法; @ModelAttribute注释一个方法的参数; @ModelAttribute注释一个方法的返回值。

org.springframework.web.bind.annotation.PatchMapping:http method请求方式.常用的就是get post delete put;Patch方式是对put方式的一种补充;put方式是可以更新.但是更新的是整体.patch是对局部更新。

org.springframework.web.bind.annotation.PathVariable:@PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中**:URL 中的 {xxx} 占位符可以通过@PathVariable(“xxx“) 绑定到操作方法的入参中。

org.springframework.web.bind.annotation.PostMapping:@PostMapping用来向服务器提交信息。

org.springframework.web.bind.annotation.PutMapping:@PutMapping都是用来向服务器提交信息。

org.springframework.web.bind.annotation.RequestAttribute:@RequestAttribute获取HTTP的请求(request)对象属性值,用来传递给控制器的参数。

org.springframework.web.bind.annotation.RequestBody:@RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的);GET方式无请求体,所以使用@RequestBody接收数据时,前端不能使用GET方式提交数据,而是用POST方式进行提交。在后端的同一个接收方法里,@RequestBody 与@RequestParam()可以同时使用,@RequestBody最多只能有一个,而@RequestParam()可以有多个。

org.springframework.web.bind.annotation.RequestHeader:@RequestHeader注解用于映射请求头数据到Controller方法的对应参数。

org.springframework.web.bind.annotation.RequestMapping:注解RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。

org.springframework.web.bind.annotation.RequestParam:@RequestParam支持multipart/form-data请求。 当请求方法的请求参数类型不再是String类型的时候。@RequestParam适用于name-valueString类型的请求域。

org.springframework.web.bind.annotation.RequestPart:@RequestPart这个注解用在multipart/form-data表单提交请求的方法上。支持的请求方法的方式MultipartFile,属于Spring的MultipartResolver类。这个请求是通过http协议传输的。 当请求方法的请求参数类型不再是String类型的时候,@RequestPart适用于复杂的请求域(像JSON,XML)。

org.springframework.web.bind.annotation.ResponseBody:通过@ResponseBody注解返回json数据,通常返回的是一个Object,spring会自动将Object转化为json字符串。

org.springframework.web.bind.annotation.ResponseStatus:@ResponseStatus 用于修饰一个类或者一个方法,修饰一个类的时候,一般修饰的是一个异常类; 声明一个异常类在类上面加上ResponseStatus注解,就表明,在系统运行期间,抛出AuthException的时候,就会使用这里生命的 error code 和 error reasoon 返回给客户端,提高可读性; 在控制器方法中,抛出一个 AuthException异常。

org.springframework.web.bind.annotation.RestController:@RestController注解相当于@ResponseBody + @Controller合在一起的作用。如果只是使用@RestController注解Controller,则Controller中的方法无法返回jsp页面,或者html,配置的视图解析器 InternalResourceViewResolver不起作用,返回的内容就是Return 里的内容。如果需要返回到指定页面,则需要用 @Controller配合视图解析器InternalResourceViewResolver才行。如果需要返回JSON,XML或自定义mediaType内容到页面,则需要在对应的方法上加上@ResponseBody注解。

org.springframework.web.bind.annotation.RestControllerAdvice:它本身用@ControllerAdvice和@ResponseBody注解实现。带有此注解的类型被视为控制器,其中@ExceptionHandler方法默认采用@ResponseBody语义。

org.springframework.web.bind.annotation.SessionAttribute:@ModelAttribute注解作用在方法上或者方法的参数上,表示将被注解的方法的返回值或者是被注解的参数作为Model的属性加入到Model中,然后Spring框架自会将这个Model传递给ViewResolver。Model的生命周期只有一个http请求的处理过程,请求处理完后,Model就销毁了。

org.springframework.web.bind.annotation.SessionAttributes:@sessionattributes注解应用到Controller上面,可以将Model中的属性同步到session当中。默认情况下Spring MVC将模型中的数据存储到request域中。当一个请求结束后,数据就失效了。如果要跨页面使用。那么需要使用到session。而@SessionAttributes注解就可以使得模型中的数据存储一份到session域中。

org.springframework.web.context.annotation.ApplicationScope:是程序全局变量,对每个用户每个页面都有效。存放在ServletContext对象中。它的存活时间是最长的,如果不进行手工删除,它就一直可以使用。

org.springframework.web.context.annotation.RequestScope:而requestScope通常是在servlet和action中通过request.setAttribute()方法把数据放到request对象中供客户端获取,然后客户端获取的方法就是requestScope.getAttribute()。

org.springframework.web.context.annotation.SessionScope:@SessionScope是@Scope的专业化,用于组件的生命周期绑定到当前Web会话。具体来说,@ SessionConcope是一个组合注释,它充当@Scope(“session”)的快捷方式,默认的proxyMode()设置为TARGET_CLASS。@SessionScope可以用作元注释来创建自定义组合注释。

org.springframework.web.servlet.config.annotation.EnableWebMvc:@EnableWebMvc 只能添加到一个@Configuration配置类上,用于导入Spring Web MVC configuration可以有多个@Configuration类来实现WebMvcConfigurer,以定制提供的配置。WebMvcConfigurer 没有暴露高级设置,如果需要高级设置 需要 删除@EnableWebMvc并继承WebMvcConfigurationSupport

org.springframework.web.socket.config.annotation.EnableWebSocket:启动类添加@EnableWebSocket注解,启动支持websocket。

org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker:@EnableWebSocketMessageBroker注解表示开启使用STOMP协议来传输基于代理的消息,Broker就是代理的意思。

你可能感兴趣的:(java)