说明:

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

    SQA 一.SQA过程 首先组成一个团队,遵循敏捷开发的原则,进行分工合作,为软件开发编造一个用例故事,画出相应的图,小组讨论合作后写代码,软件质量保证(SQA-Software Quality As ...

  2. 配置trunk

    SW1 Switch>en Switch#conf t Enter configuration commands, one per line. End with CNTL/Z. Switch(c ...

  3. Ubuntu 安装 uget

    PPA方式 sudo add-apt-repository ppa:plushuang-tw/uget-stable sudo apt update sudo apt install uget -y ...

  4. bug狩猎

    最近需求少了,终于有时间修一下底层的bug,做一点工具方便查bug,写篇文章简单记录一下. 一是优化了一个玩法进程的启动速度.这个玩法需要用战力做匹配,玩家按战力分段放进不同的桶里,每个桶用skipl ...

  5. java GMT时间转换为CST时间

    今天在获取windchill的“上次修改时间”的时候发现获取的是GMT时间,但是我们常用的是CST时间 一开始尝试直接设置为CST时区,TimeZone.getTimeZone("CST&q ...

  6. Egret_时间与运行

    1.加载资源 2.将显示对象添加到显示列表 /////////////*****************************动态帧频******************************** ...

  7. 最基础的 swift 语言

    import Foundation //打印函数 print("Hello, World!") //不用加分号, 字符串就是"", 不用加@ print(&qu ...

  8. Apache Commons 工具类简单使用

    Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下面是我这几年做开发过程中自己用过的工具类做简单介绍. 组件 功能介绍 BeanUtils 提供了对于 ...

  9. Spring(转载一)

    学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的,今天和大家 ...

  10. Linux第九节课学习笔记

    fdisk可添加.删除.转换分区. 创建主分区:n-p-w:扩展分区:n-e:逻辑分区:n-l. SWAP分区专用格式化命令mkswap,专用挂载命令swapon. 磁盘容量配额中,硬限制必须,软限制 ...