Spring 2.5 中除了提供 @Component 注释外,还定义了几个拥有特殊语义的注释,它们分别是:@Repository、@Service 和 @Controller。在目前的 Spring 版本中,这 3 个注释和 @Component 是等效的,但是从注释类的命名上,很容易看出这 3 个注释分别和持久层、业务层和控制层(Web 层)相对应。虽然目前这 3 个注释和 @Component 相比没有什么新意,但 Spring 将在以后的版本中为它们添加特殊的功能。所以,如果 Web 应用程序采用了经典的三层分层结构的话,最好在持久层、业务层和控制层分别采用 @Repository、@Service 和 @Controller 对分层中的类进行注释,而用 @Component 对那些比较中立的类进行注释。

在一个稍大的项目中,通常会有上百个组件,如果这些组件采用xml的bean定义来配置,显然会增加配置文件的体积,查找以及维护起来也不太方便。 Spring2.5为我们引入了组件自动扫描机制,他可以在类路径底下寻找标注了 @Component,@Service,@Controller,@Repository注解的类,并把这些类纳入进spring容器中管理。它的作用和在xml文件中使用bean节点配置组件时一样的。要使用自动扫描机制,我们需要打开以下配置信息:
Java代码

1. <?xml version="1.0" encoding="UTF-8" ?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans   http://www.springframework.org/schema/beans/spring-beans-2.5.xsd   http://www.springframework.org/schema/context   http://www.springframework.org/schema/context/spring-context-2.5.xsd" 
2. > 
3.  
4. <context:component-scan base-package=”com.eric.spring”>  
5. </beans>  
6. 其中base-package为需要扫描的包(含所有子包) @Service用于标注业务层组件,@Controller用于标注控制层组件(如struts中的action),@Repository用于标注数据访问组件,即DAO组件,而@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。  
7. @Service public class VentorServiceImpl implements iVentorService {  
8. } @Repository public class VentorDaoImpl implements iVentorDao { 
9. } getBean的默认名称是类名(头字母小写),如果想自定义,可以@Service(“aaaaa”)这样来指定,这种bean默认是单例的,如果想改变,可以使用@Service(“beanName”) @Scope(“prototype”)来改变。可以使用以下方式指定初始化方法和销毁方法(方法名任意): @PostConstruct public void init() { 
10. } 
11. @PreDestroy public void destory() { 
12. }

注入方式:

把DAO实现类注入到service实现类中,把service的接口(注意不要是service的实现类)注入到action中,注

入时不要new 这个注入的类,因为spring会自动注入,如果手动再new的话会出现错误,然后属性加上

@Autowired后不需要getter()和setter()方法,Spring也会自动注入。至于更具体的内容,等对注入的方式更

加熟练后会做个完整的例子上来。

注解:

在 spring的配置文件里面只需要加上<context:annotation-config/> 和<context:component-scan base-package="需要实现注入的类所在包"/>,可以使用base-package="*"表示全部的类。

<context:component-scan base-package=”com.eric.spring”>

其中base-package为需要扫描的包(含所有子包)

在接口前面标上@Autowired和@Qualifier注释使得接口可以被容器注入,当接口存在两个实现类的时候必须指定其中一个来注入,使用实现类首字母小写的字符串来注入,如:

  1. @Autowired
  2. @Qualifier("chinese")
  3. private Man man;

否则可以省略,只写@Autowired   。

@Service服务层组件,用于标注业务层组件,表示定义一个bean,自动根据bean的类名实例化一个首写字母为小写的bean,例如Chinese实例化为chinese,如果需要自己改名字则:@Service("你自己改的bean名")。

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

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

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

@Service
public class VentorServiceImpl implements iVentorService {
}

@Repository
public class VentorDaoImpl implements iVentorDao {
}

getBean 的默认名称是类名(头字母小写),如果想自定义,可以@Service(“aaaaa”) 这样来指定,这种

bean默认是单例的,如果想改变,可以使用@Service(“beanName”) @Scope(“prototype”)来改变。

可以使用以下方式指定初始化方法和销毁方法(方法名任意):

@PostConstruct

public void init() {

}

@PreDestroy

public void destory() {

}

转载于:https://www.cnblogs.com/suncoolcat/p/3343490.html

Spring注解的使用和区别:@Component、@Service、@Repository、@Controller相关推荐

  1. Spring注解的使用步骤,@Component注解创建的对象名称,常用注解Component、Repository、Service以及Controller的区别

    1. 注解的使用 1.1 pom.xml文件加入spring-context依赖,间接加入了spring-aop依赖,有aop依赖才能使用注解 1.2 在spring配置文件中加入组件扫描器标签< ...

  2. Spring 注解比较,@Bean 和 @Component的区别

    点击下方"IT牧场",选择"设为星标" 本文打算介绍几个不太容易说出其区别,或者用途的 Spring 注解,比如 @Component 与 @Bean 的比较, ...

  3. Spring注解@Resource和@Autowired区别对比

    @Resource和@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Sprin ...

  4. Spring注解创建Bean的几种方式

    Spring注解创建Bean的几种方式 1.@Component系列 @Component @Service @Repository @Controller @Configuration 2. 依附于 ...

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

    1.创建一个配置类,在配置类上添加 @ComponentScan 注解.该注解默认会扫描该类所在的包下所有的配置类,相当于之前的 <context:component-scan>. pac ...

  6. SSM框架---Spring注解@Component、@Repository、@Service、@Controller区别

    原文链接 很长时间没做web项目都把以前学的那点框架知识忘光了,今天把以前做的一个项目翻出来看一下发现用·@Component标记一个组件,而网上有的用@Service标记组件,我晕就查了一下资料: ...

  7. Spring 注解 @bean 和 @component 的区别, 你知道吗?

    本文打算介绍几个不太容易说出其区别,或者用途的 Spring 注解,比如 @Component 与 @Bean 的比较,@ControllerAdvice 是如何处理自定义异常的等等. Spring ...

  8. Spring中的@ Component,@ Repository和@Service批注有什么区别?

    @Repository @Component , @Repository和@Service批注可以在Spring中互换使用吗,或者除了充当注解设备外,它们还提供任何特定功能吗? 换句话说,如果我有一个 ...

  9. Spring @Autowired、@Resource、@Required、@Component、@Repository、@Service、@Controller注解的用法和作用...

    Spring @Autowired,@Resource,@Required注解的用法和作用 Spring中 @Autowired标签与 @Resource标签 的区别 Spring注解@Compone ...

最新文章

  1. [置顶] 异步加载图片,使用LruCache和SD卡或手机缓存,效果非常的流畅
  2. 从零开始--系统深入学习android(实践-让我们开始写代码-Android框架学习-2.service)...
  3. 初学__Python——Python的流程控制语句 if、for、while
  4. win10redis闪退
  5. Packet for query is too large
  6. 添加右键菜单_如何在Windows文件夹的右键菜单中添加“打开PowerShell”
  7. 前端学习(3250):一个简单的文件
  8. springboot2——MyBatis入门
  9. vuedraggle choose_如何拆分员工工资条,教你一招一学就会。(五)函数CHOOSE
  10. QtCreate编译器在调试程序时,右侧的变量表达式值视图被不小心关闭了
  11. 基于Spark机器学习和实时流计算的智能推荐系统
  12. ISP缓存机制及登录串号现象
  13. python arp 网关_python使用arp欺骗伪造网关的方法
  14. 存储简单数据——Preferences
  15. 2021年软件测试工具总结——十大新UI功能测试工具
  16. windows下网络诊断基本命令
  17. 多线程练习(龟兔赛跑)
  18. outlook qr码在哪里_爱奇艺极速版邀请码是多少在哪里填写 邀请码怎么输入方法...
  19. Delta3d 2.8 版本终于发版
  20. 这段代码不讲武德,劝你耗子尾汁

热门文章

  1. java 显示图片的一部分_求只显示图片上半部分三分之一的写法
  2. 关于 IMPP/XMPP/SIMPLE 这几种即时通讯协议和NAT traversal
  3. 限制滥用举报功能的小建议
  4. 可运行的C语言程序的拓展名,可运行的c语言程序的扩展名为什么?
  5. 7个现象告诉你手游圈为什么会有寒冬
  6. golang面向对象思想和实现
  7. MFC 教程【11_MFC下的文件类 】
  8. 微软 服务器系统,微软正在开发Windows Server 2022服务器系统
  9. 链路聚合_链路聚合实验
  10. api获取控件窗口的矩形大小_DevExpress 通用控件系列(4):SimpleButton