说明:

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

    1. 生成Keystore文件 keytool -genkey -v -keystore /Users/shiyantao/Desktop/xxx.keystore -alias aliasName ...

  2. 使用vue-cli搭建项目

    在使用vue-cli搭建项目前提: 1.node.js环境 2.npm镜像 开始. 1.cmd打开命令行, npm install -g vue-cli 进行全局安装  (vue-V可以查看其版本) ...

  3. 最近的AI

    虚拟币和AI  两个大类怎么兴起?

  4. Golang微服务:Micro介绍

    官方文档地址 https://micro.mu/docs/index.html Tookit API HTTP接入网关.反向代理或将HTTP转为RPC请求调用后端服务 Web 一个web应用程序,默认 ...

  5. webpack 学习之旅

    首先理解wepack的打包原理:一般单页面应用,你的页面都会引入一个类似bundle.js的文件,在react项目中,你会发现index.html中并没有引入css,那么css哪里去了?答案是它被打包 ...

  6. Spring.NET在MVC中实现业务层和UI层解耦

    最近在项目中用到了Spring.NET,使用它来实现业务层和UI层解耦.使用过程中难免遇到问题,现把遇到的一些问题整理出来,留作笔记. 使用的开发工具是vs2017,.netframework 4.6 ...

  7. js复习--基础

    最近工作遇到了一些小困难,基础真的很重要,漫天高楼起于地. 一,script元素 包括type=“text/Javascript”,defer延迟到html加载完解析,src=“../../test. ...

  8. Linux 的终端及设置

    Linux 的终端及设置 终端是一种字符型设备,有多种类型,通常使用tty 来简称各种类型的终端设备.终端特殊设备文件一般有以下几种: /dev/ttySn 串行端口终端 (Serial Port T ...

  9. 关于我与小组成员逐步升级C代码时的一些感想【第二次作业】

    #include<stdio.h> #include<stdlib.h> #include <time.h> int main(){ srand(time(NULL ...

  10. H3C_IRF

    1.IRF的优点: 跨设备负载均衡 规避环路 强大的网络扩展能力 带宽/可靠性增加 2.IRF域编号存在的意义: 域是一个逻辑概念,一个 IRF 对应一个 IRF 域 如果IRF 1 和IRF 2 之 ...