spring mvc常用注解@Component @Controller @Service @Repository

Spring-MVC配置项目框架、注释@Repository/@Service/@Controller/@RequestMapping入门讲解 主要讲解Mvc项目框架配置,以及部分后端基本运用的注解 阅读详情
注解用了之后,会在*.xml文件中大大减少配置量。以前我们每个Bean都得到配置文件中配置关联下。spring2.5后,引入了完整的annotation配置注解,使得我们的程序配置更简单更容易维护。 

@Component;@Controller;@Service;@Repository 

      在annotaion配置注解中用@Component来表示一个通用注释用于说明一个类是一个spring容器管理的类。即就是该类已经拉入到spring的管理中了。而@Controller, @Service, @Repository是@Component的细化,这三个注解比@Component带有更多的语义,它们分别对应了控制层、服务层、持久层的类。 

@Repository标签是用来给持久层的类定义一个名字,让Spring根据这个名字关联到这个类。 


例如: 

@Repository("userDao") 
public class UserDaoImpl  implements UserDao{ 

   ........................................ 

} 

声明了UserDaoImpl  在Spring容器中叫userDao这个名字。 

@Service是用于服务层的IServiceImpl类文件,功能与@Repository类似。 



另外标签:@Autowired 用来注入。 

例如: 

@Autowired 
private UserDao userDao; 

这样就注入进去了,相当于我们new了个实现类,我们就无需写setter方法了。 

我们还得有配置文件进行配置: 

Xml代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>   
  2. <beans xmlns="http://www.springframework.org/schema/beans"   
  3.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  4.        xmlns:aop="http://www.springframework.org/schema/aop"   
  5.        xmlns:tx="http://www.springframework.org/schema/tx"   
  6.        xmlns:context="http://www.springframework.org/schema/context"   
  7.        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd   
  8.      http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd   
  9.      http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd   
  10.      http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">   
  11.     <context:annotation-config/>   
  12.     <context:component-scan base-package="com.zxr.manager">   
  13.         <context:include-filter type="regex" expression=".*DaoImpl"/>   
  14.         <context:include-filter type="regex" expression=".*ServiceImpl"/>   
  15.     </context:component-scan>   
  16. </beans>   


这样就把com.zxr.manager包下的所有.*DaoImpl,.*ServiceImpl都注册关联到Spring容器中去了。 

------------------------------------------------------------- 
@Service用于标注业务层组件 

@Controller用于标注控制层组件(如struts中的action) 

@Repository用于标注数据访问组件,即DAO组件 

@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。 
注入方式: 

把DAO实现类注入到action的service接口(注意不要是service的实现类)中,注入时不要new 这个注入的类,因为spring会自动注入,如果手动再new的话会出现错误, 
然后属性加上@Autowired后不需要getter()和setter()方法,Spring也会自动注入。  

在接口前面标上@Autowired注释使得接口可以被容器注入,如: 

[java] view plaincopy 
@Autowired  
@Qualifier("chinese")  
private Man man;   

当接口存在两个实现类的时候必须使用@Qualifier指定注入哪个实现类,否则可以省略,只写@Autowired。

----------------------------------------------------------------------------------------------------------------------------------------

@Repository、@Service、@Controller 和 @Component 将类标识为Bean

spring 自 2.0 版本开始,陆续引入了一些注解用于简化 Spring 的开发。@Repository注解便属于最先引入的一批,它用于将数据访问层 (DAO 层 ) 的类标识为 Spring Bean。具体只需将该注解标注在 DAO类上即可。同时,为了让 Spring 能够扫描类路径中的类并识别出 @Repository 注解,需要在 XML 配置文件中启用Bean 的自动扫描功能,这可以通过<context:component-scan/>实现。如下所示:

 // 首先使用 @Repository 将 DAO 类声明为 Bean 
 package bookstore.dao; 
 @Repository 
 public class UserDaoImpl implements UserDao{ …… } 

 // 其次,在 XML 配置文件中启动 Spring 的自动扫描功能
 <beans … > 
    ……
 <context:component-scan base-package=”bookstore.dao” /> 
……
 </beans> 

如此,我们就不再需要在 XML 中显式使用 <bean/> 进行Bean 的配置。Spring 在容器初始化时将自动扫描 base-package 指定的包及其子包下的所有 class文件,所有标注了 @Repository 的类都将被注册为 Spring Bean。

为什么 @Repository 只能标注在 DAO 类上呢?这是因为该注解的作用不只是将类识别为Bean,同时它还能将所标注的类中抛出的数据访问异常封装为 Spring 的数据访问异常类型。 Spring本身提供了一个丰富的并且是与具体的数据访问技术无关的数据访问异常结构,用于封装不同的持久层框架抛出的异常,使得异常独立于底层的框架。

Spring 2.5 在 @Repository的基础上增加了功能类似的额外三个注解:@Component、@Service、@Constroller,它们分别用于软件系统的不同层次:

  • @Component 是一个泛化的概念,仅仅表示一个组件 (Bean) ,可以作用在任何层次。
  • @Service 通常作用在业务层,但是目前该功能与 @Component 相同。
  • @Constroller 通常作用在控制层,但是目前该功能与 @Component 相同。

通过在类上使用 @Repository、@Component、@Service 和 @Constroller 注解,Spring会自动创建相应的 BeanDefinition 对象,并注册到 ApplicationContext 中。这些类就成了 Spring受管组件。这三个注解除了作用于不同软件层次的类,其使用方式与 @Repository 是完全相同的。

另外,除了上面的四个注解外,用户可以创建自定义的注解,然后在注解上标注 @Component,那么,该自定义注解便具有了与所@Component 相同的功能。不过这个功能并不常用。

当一个 Bean 被自动检测到时,会根据那个扫描器的 BeanNameGenerator 策略生成它的 bean名称。默认情况下,对于包含 name 属性的 @Component、@Repository、 @Service 和@Controller,会把 name 取值作为 Bean 的名字。如果这个注解不包含 name值或是其他被自定义过滤器发现的组件,默认 Bean 名称会是小写开头的非限定类名。如果你不想使用默认 bean命名策略,可以提供一个自定义的命名策略。首先实现 BeanNameGenerator接口,确认包含了一个默认的无参数构造方法。然后在配置扫描器时提供一个全限定类名,如下所示:

 <beans ...> 
 <context:component-scan 
    base-package="a.b" name-generator="a.SimpleNameGenerator"/> 
 </beans> 

与通过 XML 配置的 Spring Bean 一样,通过上述注解标识的Bean,其默认作用域是"singleton",为了配合这四个注解,在标注 Bean 的同时能够指定 Bean 的作用域,Spring2.5 引入了 @Scope 注解。使用该注解时只需提供作用域的名称就行了,如下所示:

 @Scope("prototype") 
 @Repository 
 public class Demo { … } 

如果你想提供一个自定义的作用域解析策略而不使用基于注解的方法,只需实现 ScopeMetadataResolver接口,确认包含一个默认的没有参数的构造方法。然后在配置扫描器时提供全限定类名:

 <context:component-scan base-package="a.b"
 scope-resolver="footmark.SimpleScopeResolver" /> 

@Controller @Repository @Service @Component异同 在讨论异同之前我们看一下每个注解的源码是什么样的。 @Component @Service @Repository @Controller 相同点: @Controller,@Service,@Repository都有带@Component父注解,四个注解都可以说成是Component级别的注解,Spring框架自动扫描的注解也是检测是否有Component注解标记。把普通pojo实例化到spring容器中,相当于配置文件中的<bean id="" cla... 阅读详情

相关推荐

STM32 ST-LINK Utility 无法烧录程序的解决方法

当你打开STM32 ST-LINK Utility,硬件连接好st-link V2,打开了要烧写的文件,点那个Program verify烧录时, 如果出错了: Programming error @ 0x08000000! 我的方法是: 点你想要烧录那个HEX文件的小格,复制 然后去到你前面的文件的格子里,点粘贴: 成功! ...

wocute的博客 9521

解释@Component @Controller @Service @Repository

@Component大致可以分为以下几个注解 @controller控制器(注入服务),用于标注控制层组件(如struts中的action) @service服务(注入dao),用于标注业务层组件 @repository dao(实现dao访问),用于标注数据访问组件,即DAO组件 @component (把普通pojo实例化到spring容器中,相当于配置文件中的<bea...

我爱编程持之以恒 3331

vit的cam和注意力图: VIT模型的可解释性

VIT的热力图怎么画

YI_SHU_JIA的博客 1万+

Spring中的注解@Repository、@Service、@Controller、@Component

在目前的 Spring 版本中,@Repository、@Service、@Controller这 3 个注释和 @Component 是等效的,但是从注释类的命名上,很容易看出这 3 个注释分别和持久层、业务层和控制层(Web 层)相对应。 用注解来向Spring容器注册Bean 如:在base-package指明一个包,指自动扫描该包(com包)下面的所有注解 1.@Service 对应的是...

小马路的博客 528

【回归预测】GRNN广义回归神经网络-MATLAB

广义回归神经网络(GRNN)是一种基于径向基函数(RBF)的神经网络模型,主要用于非线性回归任务。与传统的回归分析方法相比,GRNN具有更强的非线性映射能力和学习速度,能够快速逼近复杂的非线性关系。输入层、模式层、求和层和输出层。输入层接收输入数据,模式层通过径向基函数将输入映射到高维空间,求和层对模式层的输出进行加权求和,最后输出层生成预测结果。GRNN的核心思想是利用高斯核函数计算输入与训练样本之间的相似度,然后根据相似度加权平均得到预测值。

2303_77200324的博客 1092

骚操作,尝试使用Xilinx XVC协议,通过Jlink来下载调试Xilink zynq FPGA芯片

最近一直在玩zynq芯片,手头使用的Xilinx Platform USB Cable 下载线真是辣鸡,速度慢如蜗牛,每次下载bit文件或者烧写flash文件都要大半天,实在是难以忍受。逻辑分析仪看了下xilinx的下载线,速度只有6.25M,并且数据间隔非常大,不懂这线的开发者咋想的,这总线利用率真是低到爆了 上图为xilinx DLC 10下载线波形,惨不忍睹! 为了不浪费生命在下载等待时间上,我打算找找看有没有别的仿真调试选择。经过一番查找后发现Xilinx的仿真器好像选择不是很多,要么贵死要

听我瞎扯淡的博客 1万+

SpringBoot-Spring Data JPA

什么是JPA? JPA的意思是Java Persistence API.JPA通过JDK5.0注解或XML描述对象-------关系表映射关系,并将运行期的实体对象持久化到数据库中。JPA是Sun官方提出的Java持久化规范,它为Java开发人员提供了一种对象/关系映射工具来管理Java应用中的关系数据。 什么是Spring Data? Sprng Data是一个用于简化数据库访问,并支持云...

qq_34144916的博客 435

用Multisim复刻经典收音机:从零搭建超外差中波调幅接收机(附仿真源文件)

本文详细介绍了如何使用Multisim软件从零搭建超外差中波调幅接收机,复刻经典收音机的设计过程。通过模块化搭建、稳定性优化和增益分配等实战指南,帮助读者掌握超外差架构的核心技术,并附赠仿真源文件供实践参考。

weixin_28744423的博客 475

彻底弄懂@Controller 、@Service、@Component

今天主要聊聊@Controller 、@Service和@Component这三个注解的关系和区别。网上很多人对这三个注解进行了详细的解释,但是仅仅局限于理论,个人对于没有经过自己验证的结果总是持怀疑态度,所有花时间研究了一下,也对这三个注解理解的更加透彻。(ps:网上好多回答不一定正确,所以只能自己花时间验证) 附上三个注解的源代码: @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Indexed

m0_53288098的博客 6175

一文带你完成ARMv8架构中的cache知识点

【摘要】 在最初开发ARM架构时,处理器的时钟速度和内存的访问速度大致相同。今天的处理器内核要复杂得多,其时钟速度可以快上几个数量级。但是,外部总线和内存设备的频率并没有扩大到同样的程度。有可能实现小块的片上SRAM,它可以以与内核相同的速度运行,但是与标准的DRAM块相比,这种RAM非常昂贵,因为后者的容量可以达到数千倍。在许多基于ARM处理器的系统中,访问外部存储器需要几十甚至几百个内核周期。 cache的技术背景 在最初开发ARM架构时,处理器的时钟速度和内存的访问速度大致相同。今天的处.

ABCCloud的博客 1854

基于STM32F4XX 、HAL库的SHT40-CD1B-R3温湿度传感器驱动应用C语言程序设计

define SHT40_ADDR_READ 0x8B // CD1B 读地址 ((0x45 << 1) + 1)#define SHT40_ADDR_WRITE 0x8A // CD1B 写地址 (0x45 << 1)// 初始化 I2C1 (根据 CubeMX 生成的函数)// 湿度: -6%RH + 125%RH * (raw / 2^16)// 温度: -45°C + 175°C * (raw / 2^16)// 返回值: 0=成功, 1=失败(CRC错误或I2C通信错误)

PP_Cottage的博客 236

spring mvc注解@Controller @Service @Repository @Component详解配置以及相关问题分析

@Controller control层注入@Service service层注入,业务逻辑@Repository dao层注入,数据业务@Component 在业务实体不明确时使用,在其他注解中包含此注解在application.xml文件中配置如下:&lt;context:component-scan basepackage=com.crp.business" &gt;&lt;context:...

jesson_c的博客 387

微观交通流仿真软件:SUMO (Simulation of Urban MObility)_(1).SUMO入门与基础概念

SUMO(Simulation of Urban MObility)是一个开源的微观交通流仿真软件,用于模拟城市交通系统中的各种动态行为。SUMO不仅可以模拟车辆的行驶,还可以模拟行人、自行车、公交车等交通参与者的运动。通过SUMO,研究人员和工程师可以对交通系统进行详细建模和分析,从而优化交通规划、评估交通政策和设计智能交通系统。车辆路径规划:SUMO可以模拟车辆在路网中的路径选择,包括动态路径选择和静态路径选择。交通信号控制:支持多种交通信号控制策略,包括固定时间控制、自适应控制等。多模式交通:模拟不同

kkchenjj的博客 1182

Spring 注解面面通 之 @Component、@Controller、@Service、@Repository

  注解简介   经典的MVC模式中,Model表示数据层、View表示视图层、Controller表示业务控制层。Spring通过@Controller、@Service、@Repository实现此模式,@Repository对应数据层(Model),@Controller和@Service对应业务控制层(Controller),但是进行了细分。   @Component、@Controller、@Service、@Repository四个注解均位于源码路径org.springframework.ste

键盘上流淌的日子 2159

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

SpringMVC常用注解@Controller,@Service,@repository,@Component

@SpringMVC常用注解@Controller,@Service,@repository,@Component spring注解的作用: 总述:spring作用在类上的注解有:@Component、@Responsity、@Service以及@Controller; 而@Autowired和@Resource是用来修饰字段、构造函数或者设置方法,并做注入的。 当注解作用在类上时,表明这些类是交给spring容器进行管理的,而当使用@Autowired和@Resource时,表明我需要某个属性、方法或字段

qq_41694542的博客 1259

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【SpringBoot】: 注解(@Repository、@Service、@Controller 和 @Component)

文章目录前言1. @Component2. @Controller3. @ Service4. @ Repository 前言 Spring 2.5 中除了提供 @Component 注释外,还定义了几个拥有特殊语义的注释,它们分别是:@Repository、@Service 和 @Controller。在目前的 Spring 版本中,这 3 个注释和 @Component 是等效的,但是从注释类...

hxcaifly的博客 1966

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

注解和注释以及Spring和SpringMVC常用的注解

1.两者区别注解 :参与代码编译,以@开头的。它是给应用程序看的,单独使用注解毫无意义,一定要跟工具一起使用,这个所谓的工具实际就是能读懂注解的应用程序 注释 :对代码没有影响。对代码起到解释、说明的作用2.spring常用注解使用解析spring没有采用约定优于配置的策略,spring要求显示指定搜索哪些路径下的Java文件。spring将会把合适的java类全部注册成spring Bean。

1万+

@Component, @Repository, @Service的区别

@Component, @Repository, @Service的区别 官网引用 引用spring的官方文档中的一段描述: 在Spring2.0之前的版本中,@Repository注解可以标记在任何的类上,用来表明该类是用来执行与数据库相关的操作(即dao对象),并支持自动处理数据库操作产生的异常 在Spring2.5版本中,引入了更多的Spring类注解:@Component,@Service,@Controller。@Component是一个通用的Spring容器管理的单例bean组件。而@R

daobuxinzi的博客 222

@controller,@service,@repository,@component区别

1、@controller 控制器(注入服务) 用于标注控制层,相当于struts中的action层 2、@service 服务(注入dao) 用于标注服务层,主要用来进行业务的逻辑处理 3、@repository(实现dao访问) 用于标注数据访问层,也可以说用于标注数据访问组件,即DAO组件. 4、@component(把普通pojo实例化到spring容器中,相当于配置文件中的 ) 泛指各种组件,就是说当我们的类不属于各种归类的时候(不属于@Controller、@Ser.

柒七的博客 1973

@bean注解和@component注解的区别_Spring系列十四:Spring @Component 等特殊化注解

少小虽非投笔吏,论功还欲请长缨。概述在spring自动装配中,@Autowired注解只处理连接部分。我们仍然需要定义bean,以便容器能够识别它们并为我们注入它们。使用@Component、@Repository、@Service和@Controller注解,并启用自动组件扫描,Spring将自动将bean导入容器并注入依赖项。这些注解也被称为原型注解。在开始使用这些注解之前,我们先快速了解一下...

weixin_36147585的博客 309

@Component, @Repository, @Service,@Controller 区别

这几个注解几乎可以说是一样的:被注解的类会被Spring扫描并注入到Spring的bean容器中。来替代它,同时这些注解会具备有更多的功能,而且功能各异。在Spring2.0之前的版本中,所注解,就意味着同样可以用。注解可以标记在任何的类上。

smhz147的博客 513

分开讲解:Spring和SpringMVC常用注解

1、spring常用注解使用解析 spring没有采用约定优于配置的策略,spring要求显示指定搜索哪些路径下的Java文件。spring将会把合适的java类全部注册成spring Bean。 问题:spring怎么知道把哪些Java类当初bean类处理?  这就需要使用annotation,spring使用一些特殊的annotation来标注bean类。 @Component:标准一个...

Hebbb. 1134
上一篇: Spring MVC 入门示例讲解
下一篇: 什么是SpringBoot
V5Eric
博客等级 码龄14年 8粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值