1. public class AutoWiringDao {
  2. private String daoName;
  3.  
  4. public void setDaoName(String daoName) {
  5. this.daoName = daoName;
  6. }
  7.  
  8. public String getDaoName() {
  9. return daoName;
  10. }
  11.  
  12. public void say(String word) {
  13. System.out.println(daoName + "===AutoWiringDao===" + word);
  14. }
  15.  
  16. }
  1. public class AutoWiringService {
  2.  
  3. private AutoWiringDao autoWiringDao1;
  4.  
  5. private AutoWiringService() {
  6. System.out.println("无参构造方法");
  7. }
  8.  
  9. private AutoWiringService(AutoWiringDao autoWiringDao3) {
  10. autoWiringDao1 = autoWiringDao3;
  11. System.out.println("有参构造方法===" + autoWiringDao1.getDaoName());
  12. }
  13.  
  14. public void setAutoWiringDao1(AutoWiringDao autoWiringDao) {
  15. autoWiringDao1 = autoWiringDao;
  16. }
  17.  
  18. public void say(String word) {
  19. autoWiringDao1.say(word);
  20. }
  21. }

以上是所需要的类AutoWiringService与类AutoWiringDao。

1、byName

spring-autowiring.xml文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans
  5. http://www.springframework.org/schema/beans/spring-beans-4.0.xsd"
  6. default-autowire="byName" >
  7. <bean id="autoWiringDao" class="com.wangzhu.spring.autowiring.AutoWiringDao">
  8. <property name="daoName" value="autoWiringDao"/>
  9. </bean>
  10. <bean id="autoWiringDao1" class="com.wangzhu.spring.autowiring.AutoWiringDao">
  11. <property name="daoName" value="autoWiringDao1"/>
  12. </bean>
  13.  
  14. <bean id="autoWiringDao2" class="com.wangzhu.spring.autowiring.AutoWiringDao">
  15. <property name="daoName" value="autoWiringDao2"/>
  16. </bean>
  17. <bean class="com.wangzhu.spring.autowiring.AutoWiringDao">
  18. <property name="daoName" value="null"/>
  19. </bean>
  20.  
  21. <bean id="autoWiringService" class="com.wangzhu.spring.autowiring.AutoWiringService"></bean>
  22. </beans>

测试:

  1. AutoWiringService service = getBean("autoWiringService");
  2. service.say("this is a test autowire!");

输出:

  1. 无参构造方法
  2. autoWiringDao1===AutoWiringDao===this is a test autowire!

备注:通过byName方法进行自动装配,

1)、需要无参构造方法;

2)、需要有同名的成员变量,以及该变量的set方法。

2、byType

只需要更改spring-autowiring.xml文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans
  5. http://www.springframework.org/schema/beans/spring-beans-4.0.xsd"
  6. default-autowire="byType" >
  7. <bean class="com.wangzhu.spring.autowiring.AutoWiringDao">
  8. <property name="daoName" value="null"/>
  9. </bean>
  10.  
  11. <bean id="autoWiringService" class="com.wangzhu.spring.autowiring.AutoWiringService"></bean>
  12. </beans>

输出:

  1. 无参构造方法
  2. null===AutoWiringDao===this is a test autowire!

备注:通过byType方法进行自动装配,

1)、需要无参构成方法;

2)、同类型的Bean只能存在一个,否则将抛出异常;

3)、需要该成员变量的set方法,其变量名随意,故在spring-autowiring.xml中只需指定该Bean的class即可。

3、constructor

只需要更改spring-autowiring.xml文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans
  5. http://www.springframework.org/schema/beans/spring-beans-4.0.xsd"
  6. default-autowire="constructor" >
  7.  
  8. <bean class="com.wangzhu.spring.autowiring.AutoWiringDao">
  9. <property name="daoName" value="null"/>
  10. </bean>
  11.  
  12. <bean id="autoWiringService" class="com.wangzhu.spring.autowiring.AutoWiringService"></bean>
  13. </beans>

输出:

  1. 有参构造方法===null
  2. null===AutoWiringDao===this is a test autowire!

备注:通过constructor方法进行自动装配,

1)、需要对应的有参构造方法,若无则抛出异常,当然若有无参构造方法,则不会抛出异常;

2)、当只有一个同类型的成员变量的Bean时,直接指定该Bean的class即可;

3)、同有多个同类型的成员变量的Bean时,其会根据该Bean的名称与构造方法中的形参名进行比较,若不一样,则直接调用无参构造方法。

自动装配【Spring autowire】的更多相关文章

  1. Spring笔记04(DI(给属性赋值),自动装配(autowire))

    给不同数据类型注入值: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="h ...

  2. 深入理解Spring系列之七:web应用自动装配Spring配置

    转载 https://mp.weixin.qq.com/s/Lf4akWFmcyn9ZVGUYNi0Lw 在<深入理解Spring系列之一:开篇>的示例代码中使用如下方式去加载Spring ...

  3. Spring学习记录(三)---bean自动装配autowire

    Spring IoC容器可以自动装配(autowire)相互协作bean之间的关联关系,少写几个ref autowire: no ---默认情况,不自动装配,通过ref手动引用 byName---根据 ...

  4. [转载]Spring Autowire自动装配介绍

    转自: http://www.cnblogs.com/zhishan/p/3190757.html 在应用中,我们常常使用<ref>标签为JavaBean注入它依赖的对象.但是对于一个大型 ...

  5. Spring Autowire自动装配介绍

    在应用中,我们常常使用<ref>标签为JavaBean注入它依赖的对象.但是对于一个大型的系统,这个操作将会耗费我们大量的资源,我们不得不花费大量的时间和精力用于创建和维护系统中的< ...

  6. Spring Autowire自动装配

    在应用中,我们常常使用<ref>标签为JavaBean注入它依赖的对象.但是对于一个大型的系统,这个操作将会耗费我们大量的资源,我们不得不花费大量的时间和精力用于创建和维护系统中的< ...

  7. spring的自动装配基础

    当开始看别人的代码使用注解的时候,以为照着别人的代码写,也写一个注释就能实现这样的功能,但是,现在开始考虑自动装配时怎样实现的. 首先,如果如果知道如何手动在xml配置中"装配bean&qu ...

  8. spring的自动装配(default-autowire="byName")

    自动装配,官方给出的定义是这样:Spring IoC容器可以自动装配(autowire)相互协作bean之间的关联关系.因此,如果可能的话,可以自 动让Spring通过检查BeanFactory中的内 ...

  9. Spring入门(5)-自动装配Bean属性

    Spring入门(5)-自动装配Bean属性 本文介绍如何装配Bean属性. 0. 目录 ByName ByType constructor 默认自动装配 混合使用自动装配和显示装配 1. ByNam ...

  10. Spring(三)之自动装配、表达式

    自动装配 自动装配(autowire)协作者 Spring IoC容器可以自动装配(autowire)相互协作bean之间的关联关系.因此,如果可能的话,可以自动让Spring通过检查BeanFact ...

随机推荐

  1. SUID或SGID程序中能不能用system函数

    system()函数的声明和说明如下: 注意它的描述那里,system()执行一个由command参数定义的命令,通过调用/bin/sh -c命令来实现这个功能.也就是说它的逻辑是这样的! 进程调用s ...

  2. laravel框架少见方法详解

    1.whereDate() 方法 $q->where('created_at', '>=', date('Y-m-d').' 00:00:00')); 以前查数据时,直接用where条件来 ...

  3. Delphi XE5教程7:单元引用和uses 子句

    内容源自Delphi XE5 UPDATE 2官方帮助<Delphi Reference>,本人水平有限,欢迎各位高人修正相关错误! 也欢迎各位加入到Delphi学习资料汉化中来,有兴趣者 ...

  4. IDEA操作GIT说明

    公司的代码库从TFS升级到了GIT,我们的自动化测试代码就需要迁移到git上.操作如下: 1.安装GIT 安装完成后,在IDEA中配置git安装路径   2.在本地磁盘新建一个空目录,例如:D:\Wo ...

  5. openerp 经典收藏 Openerp开发进销存系统完毕总结(转载)

    原文地址:http://blog.csdn.net/heartrude/article/details/9142463 Openerp开发进销存系统完毕总结 分类: 代码历程 OpenERP 工程思想 ...

  6. 1097. Deduplication on a Linked List (25)

    Given a singly linked list L with integer keys, you are supposed to remove the nodes with duplicated ...

  7. 折腾了好久的macos+apache+php+phpmyadmin 终于成功了!

    由于最近需要布置mantis用来进行bug追踪,在此记录其过程. 由于PHP apache环境在Mac OS上是自带的,所以不需要另处下安装包,只需要简单配置一下即可. 首先打开终端输入命令: sud ...

  8. hifi/ headphone test

    https://www.youtube.com/watch?v=-r0gRjqN0N8 https://www.youtube.com/watch?v=sMh_zvCw6us

  9. JPA学习---第七节:使用JPA加载_更新_删除对象

    1.添加数据,代码如下: @Test public void save(){ EntityManagerFactory factory = Persistence.createEntityManage ...

  10. 使用IE10登录,URL出现SessionId的解决办法

    问题:用户登入之后,URL会出现一长串字符,类似SessionId,把这一长串字符删除之后重新进入页面,页面又会自动地跳转到登录页面,所以,应该是Session没记住用户已经登录的信息. 网站环境: ...