说明:

  使用注解和使用配置文件实现的功能是一样的,都是为了解耦,但是配置文件语法属于非编程语言法语,无法调试,难以定位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. JSF的分析

    一.JSF的有关定义 JavaServer Faces (JSF) 是一种用于构建Java Web 应用程序的标准框架 它提供了一种以组件为中心来开发 Java Web 用户界面的方法,从而简化了开发 ...

  2. 初学io

    IO流: 01.File 创建文件 //创建文件夹 private static void mkdirs() { System.out.println("请您输入创建的文件夹名称:(默认是E ...

  3. [ 随手记 4 ]C/C++ 模板(Template)使用/重载区别

    (原创)个人理解: 模板,故名思义,就是一个模子: 模板分为:类模板和函数模板(也可叫模板类和模板函数): 模板特点:(1)函数名字一样: (2)调用的形参的数据类型不同,但形参个数相同: (3)函数 ...

  4. Dictionary用法

    https://www.cgjoy.com/thread-106639-1-1.html 1.新建字典,添加元素  dictionary<string,string>dic=newdict ...

  5. 在typeScript+vue项目中使用ref

    因为vue项目是无法直接操作dom的,但是有时候开发需求迫使我们去操作dom. 两个办法,一个是很low的再引入jq,然后通过jq来操作,但是这样就失去了我们使用vue的意义, 可惜的是我曾经这样干过 ...

  6. 04PHP HTML状态保持

    HTTP无状态:会话时没有储存数据 HTTP状态保持: 1.Cookie:保存在浏览器   $_COOKIE[ ] 超全局变量  数组 不安全,用户可清楚数据时把Cookie清除 ==目的:多页面之间 ...

  7. 腾讯广告联盟 Android SDK(广点通)demo的使用方式

    1. 下载示例文件. 2. 解压之后的目录: 3. 使用android studio,选择import project,导入如图所示文件夹: 4. 重点来了,由于官方demo的上传时间很久远(大概是上 ...

  8. Mac os x 系统的发展史

    ·Mac OS 9:发布时间:1999年 于1999年发布的Mac OS 9操作系统(图片来自互联网) 在OS X之前,1999年发布的Mac OS 9看起来就是一个普通的桌面操作系统.并且现在已经被 ...

  9. Eclipse上传新项目到GitLab

    E&T: Eclipse; GitLab; GitLab和GitHub一样属于第三方基于Git开发的作品,免费且开源(https://github.com/gitlabhq/gitlabhq  ...

  10. SQL注入学习(一)

    注入攻击的本质:web应用程序没有过滤用户输入或过滤不严谨,直接把用户输入的恶意数据当做代码执行 两个条件: 1.用户能够控制输入 2.原本程序要执行的代码,拼接了用户输入的数据 注入类型 SQL注入 ...