说明:

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

    常用命令 1>keys 返回满足给定pattern 的所有key redis 127.0.0.1:6379> keys mylist* 1) "mylist" 2) & ...

  2. 自定义注解(spring)

    终于有时间可以在这里写一篇博文了,今天写一下我在项目中用到的自定义注解,就是在每次操作项目的时候,想把它的操作加在我的数据库中,简单地说就是日志管理,这些东西都写完之后,我就问我自己,问什么要自定义注 ...

  3. rm: cannot remove ' xxx': Permission denied

    一般出现这个问题的原因是权限被改变了,使用chown 修改即可 可参考:chmod.chgrp.chown详解 linux chmod命令和chown命令

  4. pagerank 数学基础

    网页排序的任务中,最核心的难点在于判别网页质量. 将互联网上的网页模拟为一个节点,而这个网页的“出链”看做是指向其他节点的一条“有向边”,而“入链”则是其他节点指向这个节点的有向边.这样整个网络就变成 ...

  5. VirtualBox 使用物理硬盘

    /******************************************************************************* * VirtualBox 使用物理硬盘 ...

  6. Vue.js devtool插件安装后无法使用的解决办法【最简单有效的解决方法】

    在开发vue相关的项目时,使用vue devtools工具是一件极其有趣的事,你所有的操作都马上给你实时反馈. 然而有时候安装好的工具,在chrome中不显示. 在网上找过多次,一直没有找到有效解决方 ...

  7. python笔记-数学、元组、日期、文件

    python在很多地方和C++相似,比如都会有关系.逻辑等运算符,但也有不同的地方,比如:#Python Number 类型转换int(x [,base ]) 将x转换为一个整数 long(x [,b ...

  8. Blob与Clob转字符串

    /** * blob转字符串 * * @param blob * @return * @throws IOException * @throws SQLException */ public stat ...

  9. Spock - Document - 03 - Data Driven Testing

    Data Driven Testing Peter Niederwieser, The Spock Framework TeamVersion 1.1 Oftentimes, it is useful ...

  10. htop的安装和使用

    1.Ubuntu16.04中htop安装很简单 sudo apt-get install htop 2.htop的使用,直接以普通用户输入htop命令即可执行 关于其基本介绍和使用方式在见下 http ...