一.表现机制

当某个变量需要被赋值时,可以使用特定的语法,让Spring尝试从容器中找到合适的值,并自动完成赋值

最典型的表现就是添加@Autowired注解,Spring就会尝试从容器中找到合适的值为这个属性赋值

二.属性装配示例代码

1.先创建一个Spring组件扫描类

@Configuration
@ComponentScan("包名")
public class SpringConfig { }/*
*此类是配置类,将在启动时被加载
*此类配置了组件扫描,在被加载时将执行扫描
*/

2.创建另一个组件类(用于数据的交互类)

@Repository
public class UserMapper { public void insert() { System.out.println("UserMapper.insert() >> 将用户数据写入到数据库 中……"); }
}
/*
*此类是一个组件类
*在组件扫描的包找那个,且添加了组件注解@Repository
*这个注解表示该组件是操作数据的组件
*/

3.创建控制器类

@Controller
public class UserController { @Autowired // 注意:此处使用了自动装配的注解 private UserMapper userMapper;public void reg() { System.out.println("UserController.reg() >> 控制器即将执行用户注册……");  userMapper.insert();                                                     }
}
/*
*userMapper属性并未赋值,但是使用了@Autowired注解
*Spring框架会通过自动装配机制为此属性注入值
*如果注入成功,调用此属性的方法时将成功运行
*否则,就出现NPE
*/

4.创建测试类

public class SpringRunner { public static void main(String[] args) { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(SpringConfig.class); UserController userController = ac.getBean("userController",UserController.class);userController.reg(); ac.close(); }
}

三.方法自动装配

Spring的自动装配机制还可以用在方法上:

如果一个方法是由Spring框架自动调用的(通常是构造方法或@Bean注解的方法),当这个方法被声明了参数时,Spring框架也会自动的尝试从容器中找到匹配的对象用于调用此方法

对方法的参数自动装配时,如果方法有多个参数,各个参数的先后顺序是不重要的

示例:

1.创建一个配置类

@Configuration
public class SpringConfig { @Bean public UserMapper userMapper() { return new UserMapper(); }@Bean public UserController userController(UserMapper userMapper) { UserController userController = new UserController(); userController.userMapper = userMapper; return userController; }
}

首先,会根据需要装配的数据类型在Spring容器中统计匹配的Bean(对象)的数量

当匹配的Bean数量为0时,判断@Autowired注解的required属性值,这个属性默认值为true,即装配失败,项目启动时即抛出NoSuchBeanDefinitionException

我们需要将required的属性值设置为false,表示放弃自动装配,不会报告异常,后续直接使用此属性时,会报NPE

当匹配的Bean数量为1个,直接装配,且装配成功

当匹配的Bean数量超过1个,自动尝试按照名称进行装配(属性名要与beanName相同)

四.小结

1.当某个属性需要被注入值,且此值肯定存在于Spring容器中时,可以使用@Autowired注解,那么Spring框架就会自动为此属性注入值

2.如果某个方法是Spring调用的,当方法体中需要某个值,其次值存在于Spring容器中,可以将其声明为方法的参数,那么Spring框架会自动从容器中找到此值并且调用此方法

如果声明了多个参数,那么各参数的先后顺序是不重要的

3.自动装配的前提是Spring会自动创建此类的对象,否则Spring不可能为属性注入值,也不可能调用类中的方法

4.@Autowired的装配机制的表现是可以根据类型实现装配,并且,当匹配类型的Bean有多个时,还可以根据名称匹配,从而实现装配

Spring框架的自动装配相关推荐

  1. Spring框架之自动装配

    Spring的IoC容器通过Java反射机制了解了容器中所存在Bean的配置信息,这包括构造方法的结构,属性的信息,而正是由于这个原因,Spring容器才能通过某种规则来对Bean进行自动装配,而无须 ...

  2. Spring框架中 自动装配的详解 属性值的详解

    手动装配实现属性注入 <bean id="studentDao" class="com.xz.dao.impl.StudentDaoImpl">&l ...

  3. java 自动装载_java_详解Java的Spring框架下bean的自动装载方式,Spring容器可以自动装配相互协 - phpStudy...

    详解Java的Spring框架下bean的自动装载方式 Spring容器可以自动装配相互协作bean之间的关系,这有助于减少对XML配置,而无需编写一个大的基于Spring应用程序的较多的和元素. 自 ...

  4. Spring精华问答 | Spring Bean的自动装配是怎么回事?

    戳蓝字"CSDN云计算"关注我们哦! Spring框架是由于软件开发的复杂性而创建的.Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情.然而,Sprin ...

  5. Spring Boot(一) 自动装配--约定大于配置

    欢迎去我的个人博客--晓坞坐坐,里面有很多有趣的文章,不止是技术.www.lixiaodongisme.com 随着spring体系的发展,我们在开发时需要配置整合的东西也越来越多,在进行开发时,繁琐 ...

  6. Spring 由构造函数自动装配

    转载自  Spring 由构造函数自动装配 Spring 由构造函数自动装配 这种模式与 byType 非常相似,但它应用于构造器参数.Spring 容器看作 beans,在 XML 配置文件中 be ...

  7. Spring IOC容器-自动装配

    1 autowire="byName" 根据名称自动装配,自动去IOC容器中找与属性名同名的引用的对象,并自动注入. <!-- ###############自动装配#### ...

  8. Spring中的自动装配和Autowired

    彻底搞明白Spring中的自动装配和Autowired 一.自动装配 当Spring装配Bean属性时,有时候非常明确,就是需要将某个Bean的引用装配给指定属性.比如,如果我们的应用上下文中只有一个 ...

  9. Spring按类型自动装配注入数组、集合、Map

    Spring按类型自动装配注入数组.集合.Map时,是把应用上下文中对应类型的bean装配进集合,而不是直接查找一个对应类型的集合然后注入.以下面这段代码为例: import org.springfr ...

最新文章

  1. mac 4k分辨率 字太小 27寸 hidpi_4K,就在眼前!视网膜级桌面显示器AOC U2790PQU评测报告...
  2. 【Android 应用开发】自定义View 和 ViewGroup
  3. 英雄会挑战失败求原因
  4. 服务器硬盘维修工具,服务器硬盘镜像备份和恢复工具_OO DiskImage Server V8.5.39 服务器版...
  5. select()函数用法
  6. 计算机网络封装过程图,网络传输过程是怎样的?网络数据传输的过程图解
  7. QT5开发及实例学习之九基本对话框(二)
  8. python基础系列教程——python面向对象编程全解
  9. python需要excel基础吗_Python实现和Excel基础功能对应关系
  10. 提高Office2010等高版的启动速度文章链接收集-Office2010打开慢速度怎么办?
  11. anaconda双版本python_Anaconda中安装多版本Python及切换
  12. 比较一下几款常用的SSH工具
  13. 什么耳机适合华为手机?通话质量好的蓝牙耳机
  14. win远程桌面连接服务器,WIN2016远程桌面服务器如何同时发布APP和桌面
  15. 1-15 Burpsuite Sequencer介绍
  16. android消除锯齿原理分析
  17. 金彩教育:店铺推广要注意的小知识
  18. Win10 Outlook打不开,无法启动Microsoft Outlook。无法打开Outlook窗口。无法打开此文件夹集合。客户端操作失败
  19. 2021全球十大外盘期货交易平台排名
  20. shell编程之sort、uniq、tr

热门文章

  1. 如何在Mac电脑上删除APFS分区?
  2. 如何处理文字中的emoji?
  3. Element-UI中走马灯图片无法显示的问题
  4. TFS二次开发系列:七、TFS二次开发的数据统计以PBI、Bug、Sprint等为例(一)
  5. 亲爱的,你是吃屎了么
  6. python:大球吃小球
  7. zynq 7000 的流水灯实验
  8. 百度搜索引擎排名规则都有哪一些?
  9. 极客战记[森林]CHALLENGE:MAGIC EXAM
  10. 百度巨变的2019年,都经历了什么鬼?