Spring基于注解的自动装配

基于XML的自动装配是在配置文件的bean里设置autowire属性,有byType,byName的方式。而基于注解的自动装配同样是这样只不过我们直接在成员变量上直接标注@Autowired注解即可完成自动装配

@Autowired:实现用户自动装配功能的注解

1.@Autowired注解能够标识的位置

a>标识在成员变量上,此时不需要设置成员变量的set方法(最推荐使用)
b>标识在set方法上
c>标识在为当前成员变量赋值的有参构造上

2.@Autowired:注解的原理

a>默认通过byType的方式,在IOC容器中通过类型匹配某个bean为属性赋值
b>若有多个类型匹配的bean,此时会自动转换为byName的方式实现自动装配的效果
c>若byType、byName的方式都无法实现自动装配,即IOC容器中有多个类型匹配的bean
且这些bean的id和要赋值的属性的属性名都不一致,此时会抛出异常
c.d>此时可以在成员变量上,添加一个@Qualifier
通过该注解的value属性值,指定某个bean的id,将这个bean为属性赋值

注意:若IOC容器中没有任何一个类型匹配的bean,此时会抛出异常:NoSuchBeanDefinitionException。在@Autowired注解中有一个属性required,默认值为true,要求必须完成自动装配。可以将required设置为false,此时能装配则装配,无法装配则使用默认值

以下为实现代码:

package com.qcw.spring.controller;import com.qcw.spring.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;@Controller
public class UserController {@Autowiredprivate UserService userService;public void saveUser(){userService.saveUser();}}
package com.qcw.spring.service;public interface UserService {//保存用户信息void saveUser();
}
package com.qcw.spring.service.impl;import com.qcw.spring.dao.UserDao;
import com.qcw.spring.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class UserServiceImpl implements UserService {@Autowiredprivate UserDao userDao;public void saveUser() {userDao.saveUser();}
}
package com.qcw.spring.dao;public interface UserDao {//保存用户信息void saveUser();
}
package com.qcw.spring.dao.impl;import com.qcw.spring.dao.UserDao;
import org.springframework.stereotype.Repository;@Repository
public class UserDaoImpl implements UserDao {public void saveUser() {System.out.println("保存成功");}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"><!--扫描组件--><context:component-scan base-package="com.qcw.spring"></context:component-scan></beans>

最后是测试方法:

package com.qcw.spring.test;import com.qcw.spring.controller.UserController;
import com.qcw.spring.dao.UserDao;
import com.qcw.spring.service.UserService;
import com.qcw.spring.service.impl.UserServiceImpl;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class IOCByAnnotationTest {/*** @Component:将类标识为普通组件* @Controller:将类标识为控制层组件* @Service:将类标识为业务层组件* @Repository:将类标识为持久层组件** 通过注解+扫描所配置的bean的id,默认值为类的小驼峰,即类名的首字母为小写的结果* 可以通过标识组件注解的value属性值自定义id** @Autowired:实现用户自动装配功能的注解* 1.@Autowired注解能够标识的位置*  a>标识在成员变量上,此时不需要设置成员变量的set方法*  b>标识在set方法上*  c>标识在为当前成员变量赋值的有参构造上** 2.@Autowired:注解的原理*  a>默认通过byType的方式,在IOC容器中通过类型匹配某个bean为属性赋值*  b>若有多个类型匹配的bean,此时会自动转换为byName的方式实现自动装配的效果*  c>若byType、byName的方式都无法实现自动装配,即IOC容器中有多个类型匹配的bean*   且这些bean的id和要赋值的属性的属性名都不一致,此时会抛出异常*  c.d>此时可以在成员变量上,添加一个@Qualifier*   通过该注解的value属性值,指定某个bean的id,将这个bean为属性赋值**  注意:若IOC容器中没有任何一个类型匹配的bean,此时会抛出异常:NoSuchBeanDefinitionException*   在@Autowired注解中有一个属性required,默认值为true,要求必须完成自动装配*   可以将required设置为false,此时能装配则装配,无法装配则使用默认值*/@Testpublic void test(){ClassPathXmlApplicationContext ioc = new ClassPathXmlApplicationContext("spring-ioc-annotation.xml");UserController userController = ioc.getBean("userController",UserController.class);System.out.println(userController);//        UserService userService  = ioc.getBean(UserService.class);
//        System.out.println(userService);
//
//        UserDao userDao = ioc.getBean(UserDao.class);
//        System.out.println(userDao);userController.saveUser();}
}

Spring基于注解的自动装配相关推荐

  1. Spring@Autowired注解与自动装配

    1   配置文件的方法 我们编写spring 框架的代码时候.一直遵循是这样一个规则:所有在spring中注入的bean 都建议定义成私有的域变量.并且要配套写上 get 和 set方法. Boss ...

  2. Spring依赖注入与自动装配

    Spring依赖注入与自动装配 首先推荐狂神说的Spring讲义 1.Beans.xml作用 简而言之,我们通过在beans.xml中进行配置,将各种类交给spring来管理. 2.依赖注入 推荐狂神 ...

  3. Spring基于注解TestContext 测试框架使用详解

    原创整理不易,转载请注明出处:Spring基于注解TestContext 测试框架使用详解 代码下载地址:http://www.zuidaima.com/share/1775574182939648. ...

  4. 详解Spring中Bean的自动装配~

    目录 1. 环境搭建 2. byName.byType 3. 使用注解实现自动装配 @Autowired @Resource 小结 自动装配是Spring满足bean依赖的一种方式 Spring会在上 ...

  5. Spring学习5之自动装配Bean01

    前言 之前我们都是手动装配Bean,但是Spring里面有一个自动装配的方法! 一.自动装配是什么? 自动装配是Spring满足bean依赖一种方式! Spring会在上下文中自动寻找,并自动给bea ...

  6. spring 基于注解的控制器配置

    http://ttaale.iteye.com/blog/787586 spring 基于注解的控制器配置 博客分类: spring SpringBeanServletMVCWeb 13.12. 基于 ...

  7. Spring 基于注解的配置

    转载自  Spring 基于注解的配置 基于注解的配置 从 Spring 2.5 开始就可以使用注解来配置依赖注入.而不是采用 XML 来描述一个 bean 连线,你可以使用相关类,方法或字段声明的注 ...

  8. Spring基于注解的方式二

    Spring基于注解二 上一次介绍了很多的关于spring的基本的注解,这篇文章描述一下关于Spring注解的基本的原理,从简单的例子入手 @Configuration @Import({Color. ...

  9. Spring之 Bean的自动装配

    什么是Spring Bean的自动装配? 自动装配是Spring满足bean依赖一种方式 Spring会在上下文种自动寻找,并自动给bean装配属性 Spring种有三种装配方式 1.在xml种显示配 ...

最新文章

  1. Docker构建Spark镜像手动执行命令示例
  2. C++静态成员和静态成员函数
  3. win10 远程桌面卡顿_Win10系统远程桌面连接缓慢卡顿解决措施
  4. 【java】【乱码】Java 读取本地 UTF8 txt文件乱码处理
  5. Java学习--泛型
  6. python的应用图标_python实现根据图标提取分类应用程序实例
  7. 快手小店电脑版_快手抖音主播同款谷歌地球手机版+电脑版+使用教程(在家旅游神器)...
  8. 天平应什么放置_电子天平讲义全解(使用/维护/分类)
  9. IIS Express配置多站点同时运行
  10. 论文笔记_S2D.59_2015-ICRA_V-LOAM_低漂移、鲁棒和快速的视觉-激光 里程计和建图
  11. 大数据理论与实践9 分布式数据仓库Inceptor
  12. 开源3D游戏引擎Irrlicht简介
  13. 十大著名黑客-----凯文-米特尼克
  14. vue 如何对两个文本比较
  15. finecms存在任意文件上传漏洞复现
  16. 自动机器学习-H2O.ai
  17. 搭建gos_快速浏览gOS –但不要称其为Google
  18. 安全生产六步法是什么_安全生产六步法
  19. php的persion是,php创建Persion类,反射过程,反射后使用流程详解
  20. react-native打包图片资源的大坑啊

热门文章

  1. 我爱android studio
  2. 工业互联网:4 数据平台
  3. opensuse 系统升级
  4. 电路 -串联谐振电路分析
  5. adb命令 -- 性能相关
  6. 联易融成为BSN合格开发者,供应链金融平台入选官方指定应用
  7. 汇川机器人视觉标定_汇川视觉定位程序
  8. 安徽省2016“京胜杯”程序设计大赛_K_纸上谈兵
  9. 华为OD机试 - 任务调度(Java JS Python)
  10. 商务部发布首个“新零售”报告:一文读懂中国新零售现状