说明:

  使用注解和使用配置文件实现的功能是一样的,都是为了解耦,但是配置文件语法属于非编程语言法语,无法调试,难以定位bug,使用注解更易定位问题。

  配置步骤

      编译器必须先安装了STS插件

    第一步

      导包:在基于注解配置中,我们还要拷贝一个aop的jar

    第二步

      使用规则文件创建配置文件(上一篇有详细过程)

      注意:基于注解整合时,Spring配置文件导入约束时需要添加一条context名称空间下的约束

      

    第三步:创建一个普通类

      使用注解配置,需要在spring启动时就创建对象的类标记为组件类

      

  用于对象的注解

    我们将用于被扫描创建对象的注解统称为组件注解,包括:

      @Component    @Controller     @Service   @Repository

      这四个类都在context/stereotype下

    四个组件注解在功能上没有任何区别,只是意义有所不同

    组件注解的功能都是标识类为注解的组件类,启动Spring框架的程序时,声明将这些组件类的对象注入到Spring容器里面。意味着,只有加了这四个注解任何一个注解的类,在程序启动的时候,Spring就通过配置文件指定的路径将该路径下的所有带组件注解的类创建对象并且放在容器里面。相当于配置文件中的<bean>标签

  用于依赖注入

    实现了配置文件中<property>的功能

      @Autowired注解:用于给引用注入容器中的对象

        其中该注解的required属性可以指定注入对象是否允许为空

      使用@Autowired纾解的三种情况

        1)在属性上注入

        

        2)在方法上面注入(要求方法必须有参数)作用是用容器中的对象传递给参数

        

        3)在构造方法中注入

        

      

        @Qualifier注解

          @Qualifier注解:用于指定注入对象名,使用@Autowired注入对象时,没有指定对象名,只能通过@Qualifier字段设置容器中的对象名

          value:指定注入Spring容器中对应对象名的对象给引用

        @Resource注解

        @Resource注解是Spring框架支持Sun官方制定的JSR-250标准注入对象的实现

        @Resource 功能等同 @Autowired + @Qualifier ,等同配置文件标签 <proprty name=”...” ref=”...”>

        @Resource注解:用于给引用注入容器的对象,可以通过name属性指定对象名

        注意:@Resource注解只能注入方法和属性,不能注入构造方法

        @Value注解

          @Value注解:注入基本数据类型以及它们的包装类和String类型数据的,支持${}注入Properties文件的键值对,等同 <proprty name=”...” value=”${Key}”>。

        

    注意:当一个类在容器中有两个对象的情况,为指定对象名使用依赖注入的话会报错。

       

首先我们必须要先理解Spring创建对象到注入对象的原理。
----------Spring对象创建流程
1. 在启动Spring框架的时候,框架先根据 <context:component-scan base-package="com.sxt">,去获得该包下的所有类名。
2. 通过反射技术,根据类名获得类结构的组件注解,如果有就创建对象,如果没有就忽略该类。
3. 创建对象后将对象放入Spring容器里面,如果不在组件注解的value指定对象名,使用的使用默认命名法:就是取类名的首字符修改为小写为对象名,如,CustomerDAOImpl的对象名为customerDAOImpl

--------------Spring对象注入流程
Spring将容器里面的对象注入给声明的引用
1. 首先匹配引用的类型在容器中是否兼容类型的对象。就是匹配引用的类型是否是父类或者相同的类型的类,如果匹配的类型的对象只有一个直接将对象注入到该引用。
2. 如果匹配的类型的对象不是唯一的,将将引用的属性名匹配Spring容器对象的对象名,如果找到对象名一样的,就注入相同对象名的对象。

根据Spring对象注入流程,如果出现两个类型一样的对象,必须要指定对应的对象名。
指定对象名的方式有两种

    为注入对象指定容器中的对象

      

    spring生命周期注解

      Spring通过@Scpoe注解来指定对象的生命周期

        参数:

        *singleton:单例
          对象出生:当程序加载配置文件创建容器时,创建
          对象活着:只要容器还在,一直活着
          对象死亡:应用停止,容器销毁,对象死亡
         *prototype:多例(原型对象)
          对象出生:当程序加载配置文件创建容器时,创建
          对象活着:只要对象被使用,一直活着
          对象死亡:对象长时间不用,会被Java垃圾回收机制回收
         *reqeust:web项目中,Spring将创建的对象放在request作用域中
         *session:web项目中,Spring将创建的对象放在session作用域中

    纯注解配置

      通过@Configuration注解 和 @ComponentScan注解实现

      

      

      

    

 

spring入门-注解的使用的更多相关文章

  1. Spring入门注解版

    参照博文Spring入门一,以理解注解的含义. 项目结构: 实现类:SpringHelloWorld package com.yibai.spring.helloworld.impl; import ...

  2. Spring入门(6)-使用注解装配

    Spring入门(6)-使用注解装配 本文介绍如何使用注解装配. 0. 目录 使用Autowired 可选的自动装配 使用Qualifier选择 1. 使用Autowired package com. ...

  3. Spring _day02_IoC注解开发入门

    1.Spring IoC注解开发入门 1.1 注解开发案例: 创建项目所需要的jar,四个基本的包(beans core context expression ),以及两个日志记录的包,还要AOP的包 ...

  4. (转)使用Spring的注解方式实现AOP入门

    http://blog.csdn.net/yerenyuan_pku/article/details/52865330 首先在Eclipse中新建一个普通的Java Project,名称为spring ...

  5. 【Spring Framework】Spring入门教程(三)使用注解配置

    本文主要介绍四个方面: (1) 注解版本IOC和DI (2) Spring纯注解 (3) Spring测试 (4) SpringJDBC - Spring对数据库的操作 使用注解配置Spring入门 ...

  6. spring mvc 注解入门示例

    web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi=" ...

  7. atititt.java定时任务框架选型Spring Quartz 注解总结

    atititt.java定时任务框架选型Spring Quartz 总结 1. .Spring Quartz  (ati recomm) 1 2. Spring Quartz具体配置 2 2.1. 增 ...

  8. Spring入门(7)-自动检测Bean

    Spring入门(7)-自动检测Bean 本文介绍如何自动检测Bean. 0. 目录 使用component-scan自动扫描 为自动检测标注Bean 1. 使用component-scan自动扫描 ...

  9. Spring入门(3)-Spring命名空间与Bean作用域

    Spring入门(3)-Spring命名空间与Bean作用域 这篇文章主要介绍Spring的命名空间和Bean作用域 0. 目录 Spring命名空间 Bean作用域 1. Spring命名空间 在前 ...

随机推荐

  1. Unity存储路径

    一.在项目根目录中创建Resources文件夹来保存文件 可以使用Resources.Load("文件名字,注:不包括文件后缀名");把文件夹中的对象加载出来注:此方可实现对文件实 ...

  2. Jquery easyUI datagrid遇到空行做判断

    点击[上月]按钮直到没有数据,上月按钮禁用.并提示无数据. 最直接的思路就是datagrid('reload',{month:-1}); 可是这样,想了很多办法无法获取加载的数据. 最简单的办法: $ ...

  3. HBase原理和设计

    转载 2016年1月10日:http://www.sysdb.cn/index.php/2016/01/10/hbase_principle/ 简介 架构 数据组织 原理 RS定位 region写入 ...

  4. 2018-2019-2 网络对抗技术 20165228 Exp2 后门原理与实践

    2018-2019-2 网络对抗技术 20165228 Exp2 后门原理与实践 (1)例举你能想到的一个后门进入到你系统中的可能方式? 在使用盗版软件,盗版系统,甚至游戏外挂时,往往会让我们关闭杀毒 ...

  5. Mybatis的分表实战

    前言: 以前写代码, 关于mysql的分库分表已被中间件服务所支持, 业务代码涉及的sql已规避了这块. 它对扩展友好, 你也不知道到底他分为多少库, 多少表, 一切都是透明的. 不过对于小的团队/工 ...

  6. EOS wallet API 报HTTP 400错误

    服务器:192.168.8.144 按照官方的docker方式运行的,因为keosd(钱包)开出来的API只容许本地访问,即: url --request POST --header 'Host: 0 ...

  7. 数据库中无数据时查询数据为空,但出现空指针异常的解决方案(转载https://blueskator.iteye.com/blog/2096026)

    异常:java.lang.NullPointerException 解决方案: try{ hotelImageList = ihotelImgManager.query(hiqc); }catch(E ...

  8. B/S与C/S的优缺点

     B/S:Browser/Server,即浏览器/服务器架构,一般用于网站: 优点:无需安装,不需要更新客户端: 缺点:交互性差,安全性低. C/S:Client/Server,即客户端/服务器端架构 ...

  9. Linux第八节课学习笔记

    su命令可以切换用户身份,一般不用,而是用sudo. visudo命令中可执行命令列表不用ALL,我们可以先使用whereis命令找出命令所对应的保存路径,然后把配置文件第99行的用户权限参数修改成对 ...

  10. 经典问题----最小生成树(prim普里姆贪心算法)

    题目简述:假如有一个无向连通图,有n个顶点,有许多(带有权值即长度)边,让你用在其中选n-1条边把这n个顶点连起来,不漏掉任何一个点,然后这n-1条边的权值总和最小,就是最小生成树了,注意,不可绕成圈 ...