百度
360搜索
搜狗搜索

spring组件注解,Spring注解总结详细介绍

本文目录一览: 说出springmvc常用的5个注解

1、Controller注解一个类表示控制器,SpringMVC会自动扫描注解了这个注解的类。2、RequestMapping请求路径映射,可以标注类,也可以是方法,可以指定请求类型,默认不置顶为全部接受。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。3、RequestParam放在参数前,表示只能接收参数a=b格式的数据,即Content-Type为application类型的内容。4、RequestBody放在参数前,表示参数从requestbody中获取,而不是从地址栏获取,所以这肯定是接收一个POST请求的非a=b格式的数据,即Content-Type不为application类型的内容。5、ResponseBody放在方法上或者返回类型前,表示此方法返回的数据放在responsebody里面,而不是跳转页面。一般用于ajax请求,返回json数据。

Spring注解总结

1、注解就是配置文件的另一种表现形式,Spring通过注解也可以创建对象。步骤如下:
(1) 在源代码加入注解,例如@Component
(2) 在spring的配置文件,加入组件扫描器的标签
2、 创建对象的注解
(1)@Component 普通java对象
@Repository : 放在dao接口的实现类上面,表示创建dao对象,持久层对象,能访问数据库
@Service : 放在业务层接口的实现类上面, 表示创建业务层对象, 业务层对象有事务的功能
@Controller:放在控制器类的上面,表示创建控制器对象。 属于表示层对象。 控制器对象能接受请求,把请求的处理结果显示给用户。
以上四个注解都能创建对象,但是@Repository @Service @Controller有角色说明, 表示对象是分层的。
3、 简单类型属性赋值
@Value: 简单类型属性赋值
属性:value 简单类型属性值
位置:1)在属性定义的上面 ,无需set方法,推荐使用
2)在set方法的上面
4、引用类型赋值注解
(1)@Autowired:spring框架提供的,给引用类型赋值的,使用自动注入原理。支持byName,byType。默认是byType。
如果想@Autowired注解按对象名称注入需要在属性的上面再添加一个注解@Qualifier;
(2)@Resource: 来自jdk中,给引用类型赋值的,支持byName,byType.默认是byName,spring支持这个注解的使用。
说明,使用jdk1.8带有@Resource注解, 高于jdk1.8没有这个@Resource, 需要加入一个依赖。

六、Spring 中注解的使用及区别

@Configuration , @ComponentScan ,
@Component , @Controller , @Service , @Repository , @RestController ,
@Bean , @Scope ,
@Autowired , @Resource ,
@Qualifier ,
@PostConstruct , @PreDestory ,
@RequestMapping , @GetMapping , @PostMapping , @PutMapping , @DeleteMapping , @PatchMapping ,
@RequestBody , @Validated , @Valid , @RequestParam , @PathVariable ,
@ModelAttribute

作用:用 @Configuration 标注的类就相当于 xml 中的

注意:

作用:扫描指定包下的组件,意思就是把指定包下有 @Component 或 @Controller 或 @Service 或 @Repository 注解标注的类,注入到 spring 容器中。

使用示例:

Test 类

Apple 类

作用:返回 Bean 实例,相当于

中的
部分。
属性:
value
name:默认为方法名,等同于 value,相当于 bean 的名称,二者不能同时使用。
autowire : 表示该 bean 自动装配的类型,不推荐使用。
参数:Autowire.NO(默认),Autowire.BY_NAME,Autowire.BY_TYPE
initMethod:对象初始化调用方法。
destroyMethod:对象销毁调用方法。
使用示例

Test 类

Banana 类

作用:将当前类交给 spring bean 工厂管理。
属性:value 不写,默认 value 值为类名(类名首字母小写)。
使用示例:
Fruit 接口

Apple 类(要交给 bean 工厂管理的类)

Test 类

@Controller:用于标注控制层,控制层
@Service:用于标注服务层,service 层
@Repository:用于标注数据访问层,dao 层

@RestController = @Controller + @ResponseBody
作用:用于返回 json 数据。
使用示例(对比 IndexController1 和 IndexController2 完全理解)
IndexController1

IndexController2

访问路径为: http://localhost:8080/IndexController1/index1
返回结果:index 页面(index.html 或 index.jsp)

访问路径为: http://localhost:8080/IndexController1/index2
返回结果:{"name":"张三","gender":"男"}

访问路径为: http://localhost:8080/IndexController2/index1
返回结果:index(字符串)

访问路径为: http://localhost:8080/IndexController2/index2
返回结果:{"name":"张三","gender":"男"}

作用:声明 bean 的作用域。
五种作用域:singleton(默认),prototype,request,session,global-session
作用域的说明参照 三、Bean的作用域及生命周期

@Autowired 是 Spring 提供的注解
作用:按照类型注入。
注意:

@Resource 是 jdk 提供的注解,是 JSR250 规范实现的
作用:按照 bean 的名称(name)注入。

@Inject 是 jdk 提供的注解,是 JSR330 规范实现的
作用:按照类型注入,没有 required 属性。

作用:当 IoC 容器中同一类型存在多个 bean 实例,则需要使用 @Qualifier 注解指定注入的 bean 名称

作用:对象初始化调用方法,等同于 @Bean 中 的 initMethod

作用:对象销毁调用方法,等同于 @Bean 中 的 destroyMethod

作用:接收浏览器发到控制器的请求,与其相似的还有 @GetMapping , @PostMapping , @PutMapping , @DeleteMapping , @PatchMapping ,主要属性如下

阅读更多 >>>  spring注解详解,spring的常用注解是什么?

作用:处理 get 请求,

作用:处理 post 请求,侧重添加

作用:处理 delete 请求,侧重删除

作用:处理 put 请求。侧重整体修改,一般修改都用这个

作用:处理 patch 请求,侧重局部修改,这个还没用过

作用:用于接收前端传递给后端的 json 串,经常与 @Valid 或 @Validated 一起使用,它会将 json 中的 key 与实体类中的属性实装(调用 setter)

作用:校验传入参数是否符合规范,来自 org.springframework.validation.annotation 包

作用:校验传入参数是否符合规范,来自 javax.validation 包

作用:将请求参数绑定到控制器的方法参数上
属性:name / value 作用一样;required是否必传;defaultValue默认值

作用:将URL中占位符参数{xxx}绑定到控制器类的方法形参中,RESTful风格请求( 了解RESTful )
属性:name / value 作用一样,required是否必传

访问路径为: http://localhost:8080/update/45
运行结果:hello45
访问路径为: http://localhost:8080/update/
运行结果:hello

作用:作用在方法上,表示当前方法会在控制器方法前执行;作用在参数上,获取指定的数据给参数赋值。

访问路径: http://localhost:8080/test1
运行结果:hello
访问路径: http://localhost:8080/test2
运行结果:hello

spring注解的作用

spring注解的作用:

1、spring作用在类上的注解有@Component、@Responsity、@Service以及@Controller;而@Autowired和@Resource是用来修饰字段、构造函数或者设置方法,并做注入的。

2、当注解作用在类上时,表明这些类是交给spring容器进行管理的,而当使用@Autowired和@Resource时,表明我需要某个属性、方法或字段,但是并不需要我自己去new一个,只需要使用注解, spring容器会自动的将我需要的属性、方法或对象创造出来。这就是通常所说的依赖注入和控制反转。

因为在持久层、业务层和控制层中,分别采用@Repository、@Service和@Controller对分层中的类进行凝视,而用@Component对那些比较中立的类进行凝视。

spring注解中@component就是说把这个类交给Spring管理,又一次起个名字叫userManager,因为不清楚这个类是属于哪个层面,所以就用@Component。

了解下Spring依赖注入几个常用注解

开发中经常用到的注解有以下几个:
①:@Autowired:是(JSR-330)javax.inject.inject的替代形式,实现Spring依赖注入的一种形式,可以装配对象,设置对象依赖,注入Setter方法,找到多个Bean对象时需要用@Qualifier限定使用哪个Bean。
使用示例:

方式1:

备注:required=true代表依赖是必须的,false代表依赖不是必然的。

方式2:

备注:当存在多个Bean实例时@Qualifier起到指定候选Bean的作用。

如何注入对象的同时再设置被注入对象的属性值。
可以有三种形式,作用都一样,只不过其代理实现机制不一样而已。

源码分析:
@Autowired由AutowiredAnnotationBeanPostProcessor实现,它里面有两个重要的内部类,AutowiredFieldElement和AutowiredMethodElement,这两个类都继承自InjectionMetadata.InjectedElement,并重写了inject(注入方法),这两个类的作用一个是注解在属性字段的注入,另一个是注解在方法上的注入。

简单说一下这个类里面的其他方法是做什么用的。

Method:findAutowiringMetadata->找到所有装配的元数据
Method:registerDependentBeans ->将指定的Bean注册它的依赖Bean(比方说;xxService注册到xxController中去)

②:@Resource:资源标记注解,由J2EE提供的注解(javax.annotation.Resource)。当组件初始化时,容器将向应用程序组件注入请求资源的实例。重点就是:标记应用程序所需的资源,资源在Spring中可能以Component,Service,以@Bean注入形式等。@Resource默认是ByName方式注入资源。

特性:支持byName,byType多种形式。

@Resource注解核心实现实在类CommonAnnotationBeanPostProcessor中实现的,我们就简单说一下这个类针对Resource做了什么用。
通过查看源码得出,里面有一个内部类:ResourceElement,还有一个重要方法:buildResourceMetadata->构建ResourceMetaData(Resource元素据)

@Resource和@Autowired的相同点:

①:都是注解形式,都可以用来依赖注入,都可以以配置在属性上的形式依赖一个Bean,也可以以Setter形式注入一个Bean.两者的注入形式都可以被javax.inject.Inject注解取代。

②:两者都依赖于Spring上下文,都需要先获取BeanFacotry之后,再由BeanFactory去解析Bean,装配Bean等动作。

③:他们俩都可以配置延时加载(以@Lazy配置使用,这样做时用到时才会装配,才会报错,与懒加载是一层意思。

@Resource和@Autowired的不同点:
①:来源不同,@Resource是J2EE里面的注解,不依赖于Spring.
@Autowired是来自于Spring-Beans里面的注解,必须在Spring容器中才能使用,并依赖于Spring上下文。

②:使用的范围@Resource比@Autowired更广泛,@Resource除了ByType之外还可以ByName。@Resource指定name时相当于@Autowired与@Qualifer组合使用.

③:@Resource可以设置一定的容错性,可以配置lookUp,可以指定Type来装配。

spring常用注解作用与常用接口与后置处理器

从spring2.5之后,spring注解驱动开发慢慢取代了Spring的xml配置文件的作用,而且目前流行的SpringBoot开发也是基于spring注解驱动做扩展的,所以想要理解好SpringBoot,就必须掌握一些spring的注解驱动。
以前xml的做法是
现在使用spring注解的做法是
java8之后ComponentScan注册加了@Repeatable(ComponentScans.class),可以直接在配置类上标注多个@Componentscan,在java8之前想配置多个@Componentscan扫描,需要用@ComponentScans
给容器注册组件(bean)的几种方式 1.包扫描+组件标注注解(@Service、@Controller、@Repository、@Componet),这种方式用于导入自己写的类 2.@Bean方式导入,常用入导入第三方包里面的类 默认bean id为导入执行的方法名 3.@Import方式导入(有三种用法),默认的bean id为全类名 4.通过FactoryBean(工厂bean)
-bean创建->初始化->销毁
applicationContextAeare和EmbeddedValueResolverAeare都是通过ApplicationContextAwareProcessor后置处理器来实现的
BeanFactoryPostProcessor是在bean定义信息加载完成后调用 BeanDefinitionRegistryPostProcessor是在bean定义信息将要加载时调用 先执行BeanDefinitionRegistryPostProcessor的实现类再执行BeanFactoryPostProcessor的实现类
创建bean的源码位置 org.springframework.context.support.AbstractApplicationContext#finishBeanFactoryInitialization ->org.springframework.beans.factory.BeanFactory#getBean(java.lang.String, java.lang.Class

) -->org.springframework.beans.factory.support.AbstractBeanFactory#createBean --->org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#doCreateBean 执行bean对象的实例化 ->org.springframework.beans.factory.support.AbstractBeanFactory#createBean 给bean的属性赋值 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#populateBean

initializeBean方法主要做了三个操作1.循环执行后置处理器的的前置方法(applyBeanPostProcessorsBeforeInitialization)、2.再执行初始化方法(invokeInitMethods),3.再执行后置处理器的的后置方法(applyBeanPostProcessorsAfterInitialization) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#initializeBean(java.lang.String, java.lang.Object, org.springframework.beans.factory.support.RootBeanDefinition)

Spring注解——使用@ComponentScan自动扫描组件

1.创建一个配置类,在配置类上添加 @ComponentScan 注解。该注解默认会扫描该类所在的包下所有的配置类,相当于之前的

2.使用 ApplicationContext 的 getBeanDefinitionNames() 方法获取已经注册到容器中的 bean 的名称。

运行效果:

除了 spring 本身注册的一些 bean 之外,可以看到最后一行,已经将 BeanConfig 这个类注册进容器中了。

3.指定要扫描的包(使用@ComponentScan 的 valule 属性来配置),创建一个controller 包,并在该包下新建一个 AppController 类。

在类上加了@Controller注解,说明该类是一个 Component。在 BeanConfig 类中修改:

在 @ComponentScan 注解中指定了要扫描的包。

运行效果:

AppController 已经被注册进容器了。

4.excludeFilters 和 includeFilters 的使用

使用 excludeFilters 来按照规则排除某些包的扫描。

excludeFilters 的参数是一个 Filter[] 数组,然后指定 FilterType 的类型为 ANNOTATION,也就是通过注解来过滤,最后的 value 则是Controller 注解类。配置之后,在 spring 扫描的时候,就会跳过 io.mieux 包下,所有被 @Controller 注解标注的类。

使用 includeFilters 来按照规则只包含某些包的扫描。

在创建一个 service 的包,并创建一个 AppService 类,再加上一个 @Service 注解。

修改 BeanCofig 类:

运行效果:

配置里面,应该是只包含 @Controller 注解的类才会被注册到容器中,为什么 @Service 注解的类也被注册了呢?这里涉及到 @ComponentScan 的一个 useDefaultFilters 属性的用法,该属性默认值为 true,也就是说 spring 默认会自动发现被 @Component、@Repository、@Service 和 @Controller 标注的类,并注册进容器中。要达到只包含某些包的扫描效果,就必须将这个默认行为给禁用掉(在 @ComponentScan 中将 useDefaultFilters 设为 false 即可)。

运行效果:

5.添加多种扫描规则

1、如果使用的 jdk8,则可以直接添加多个 @ComponentScan 来添加多个扫描规则,但是在配置类中要加上 @Configuration 注解,否则无效。

2、也可以使用 @ComponentScans 来添加多个 @ComponentScan,从而实现添加多个扫描规则。同样,也需要加上 @Configuration 注解,否则无效。

6.添加自定义过滤规则

在前面使用过 @Filter 注解,里面的 type 属性是一个 FilterType 的枚举类型:

使用 CUSTOM 类型,就可以实现自定义过滤规则。

1、 首先创建一个实现 TypeFilter 接口的 CustomTypeFilter 类,并实现其 match 方法。

阅读更多 >>>  jquery ajax请求的五个步骤,ajax请求的五个步骤是什么?

这里简单对扫描到的类名进行判断,如果类名包含”Co“的就符合条件,也就会注入到容器中。

2、对 BeanConfig 进行修改,指定过滤类型为 Custom 类型,并指定 value 为 CustomTypeFilter.class。

运行效果:

@SpringBootApplication包含的三个注解及其含义

@SpringBootApplication包含的三个注解及其含义

第一个:@SpringBootConfiguration(在这个类的源码中又有一个Configuration的注解)

@Configuration这个注解的作用就是声明当前类是一个配置类,然后Spring会自动扫描到添加了@Configuration的类,读取其中的配置信息,而@SpringBootConfiguration是来声明当前类是SpringBoot应用的配置类,项目中只能有一个。所以一般我们无需自己添加。

第二个:@EnableAutoConfiguration

开启自动配置,告诉SpringBoot基于所添加的依赖,去“猜测”你想要如何配置Spring。比如我们引入了spring-boot-starter-web,而这个启动器中帮我们添加了tomcat、SpringMVC的依赖,此时自动配置就知道你是要开发一个web应用,所以就帮你完成了web及SpringMVC的默认配置了!我们使用SpringBoot构建一个项目,只需要引入所需框架的依赖,配置就可以交给SpringBoot处理了。

第三个:@ComponentScan

配置组件扫描的指令

提供了类似与

标签的作用

通过basePackageClasses或者basePackages属性来指定要扫描的包。

如果没有指定这些属性,那么将从声明这个注解的类所在的包开始,扫描包及子包

而我们的@SpringBootApplication注解声明的类就是main函数所在的启动类,

因此扫描的包是该类所在包及其子包。因此,一般启动类会放在一个比较前的包目录中。

Spring注解@Primary使用概述

在声明bean的时候,通过将其中一个可选的bean设置为首选
描述:在spring 中使用注解,常使用@Autowired, 默认是根据类型Type来自动注入的。但有些特殊情况,对同一个接口,可能会有几种不同的实现类,而默认只会采取其中一种。这种情况下 @Primary 的作用就出来了。下面是个简单的使用例子。
当一个接口有多个实现,且通过@Autowired注入属性,由于@Autowired是通过byType形式,用来给指定的字段或方法注入所需的外部资源。Spring无法确定具体注入的类(有多个实现,不知道选哪个),启动会报错并提示: Consider marking one of the beans as @Primary, updating the consumer to accept multiple beans, or using @Qualifier to identify the bean that should be consumed。
当给指定的组件添加@Primary是,默认会注入@Primary配置的组件。
访问结果如下:

网站数据信息

"spring组件注解,Spring注解总结"浏览人数已经达到18次,如你需要查询该站的相关权重信息,可以点击进入"Chinaz数据" 查询。更多网站价值评估因素如:spring组件注解,Spring注解总结的访问速度、搜索引擎收录以及索引量、用户体验等。 要评估一个站的价值,最主要还是需要根据您自身的需求,如网站IP、PV、跳出率等!