欢迎进入《一起学spring》系列博文第二篇,

我们接着上一篇博文'我的第一个spring程序--简单粗暴易懂',我们讲到spring的依赖注入中的设值注入,所谓的设值注入,就是让spring容器使用setter方式来帮我们实例化相关对象,是相对“构造方法”注入来说的。我们还是采用对比的方式,用实例来说话。

一、设值注入:

1、这是不用spring的情况:

我们先来写两个类,具体见下面代码:

package com.huai.first;public class Book {public void doBookPrint(){System.out.println("method -- doBookPrint");}
}
package com.huai.first;public class Student {private Book book;public void setBook(Book book){this.book = book;}public void doStudentPrint(){this.book.doBookPrint();}
}

接下来我想让代码跑起来,好,我们来写一个main函数:

package com.huai.first;public class MainTest {public static void main(String[] args) {Student stu = new Student();Book book = new Book();stu.setBook(book);stu.doStudentPrint();}
}

好,搞定。

(注意,在main函数中我们的对象都是通过new的方式实例化的,下面,我们使用spring框架,直接从spring容器中获取对象,因为spring容器已经帮我们实例化好了)

2、这是使用spring的情况:

我们同样需要写两个类:Student和Book,代码和上面一样。只是main函数不同

package com.huai.first;import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class SpringTest {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");Student stu = context.getBean(Student.class);stu.doStudentPrint();}
}

分析一下上面这个main函数:

(1)、首先,我们肯定要创建一个spring容器

(2)、从spring容器中获取我们想要的对象stu

为什么不获取book对象,然后通过stu.setBook(book);的方式写呢?回答是:你这样的想法是没有问题的,完全行得通。而我上面这样子写也是可以的。

在Student类中,book作为Student的属性,所以需要在某个地方实例化book对象,否者会报空指针异常。可是,上面的代码中并没有看到实例化book对象的语句。为什么?具体原因等到我们看完我们的配置文件之后再讨论。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans  http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context-3.0.xsd  http://www.springframework.org/schema/aop  http://www.springframework.org/schema/aop/spring-aop-3.0.xsd  http://www.springframework.org/schema/tx   http://www.springframework.org/schema/tx/spring-tx-3.0.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"><bean id="student" class="com.huai.first.Student"><property name="book" ref="bookID"/></bean><bean id="bookID" class="com.huai.first.Book"/>
</beans>

分析spring配置文件:

(1)、配置两个<bean>,目的是告诉spring容器,帮我实例化这两个类的对象,也就是student和book。

(2)、实例化两个对象之后,再帮忙把book对象作为Student类的一个属性传进去。对应的是:<property name="book" ref="bookID">(注:这里传进去的是book对象)

(ref表示:reference,引用的意思;其中name=“book”中的book需和Student类中的book属性名一样)

二、构造注入:

同样地,我们写两个类:

package com.huai.first;public class Book {public void doBookPrint(){System.out.println("method -- doBookPrint");}
}
package com.huai.first;public class Student {private Book book;//    public void setBook(Book book){
//      this.book = book;
//  }public Student(Book book){this.book = book;}public void doStudentPrint(){this.book.doBookPrint();}
}

注:Student类中增加了一个有参的构造方法;setBook方法可以保留的。

下面我们写一个main函数:(它和上面的设值注入的main函数相同)

<span style="font-size:14px;">package com.huai.first;</span><span style="font-size: 18px;"></span><span style="font-size:14px;">import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class SpringTest {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");Student stu = context.getBean(Student.class);stu.doStudentPrint();}
}</span>

看看配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans  http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context-3.0.xsd  http://www.springframework.org/schema/aop  http://www.springframework.org/schema/aop/spring-aop-3.0.xsd  http://www.springframework.org/schema/tx   http://www.springframework.org/schema/tx/spring-tx-3.0.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"><bean id="student" class="com.huai.first.Student"><!-- <property name="book" ref="bookID"/> --><constructor-arg name="book" ref="bookID"/></bean><bean id="bookID" class="com.huai.first.Book"/>
</beans>

请注意<constructor-arg>属性,name=“book”中的book是和Student类中的构造函数中的形参对应的。

分析:

设值注入:通过无参的构造方法来示例话,通过setter方法初始化属性。

构造注入:通过有参的构造函数实例化和初始化。

思考:似乎,使用spring框架比不使用更加麻烦了!我们这样使用spring-framework有必要吗?

回答:使用spring框架的目的不是本博文所涉及的内容,这里只是跟大家谈谈spring-framework的用法。谢谢

如果需要下载spring的jar包,请找上一篇博文最下面的链接

一起学spring--依赖注入---简单粗暴的例子展示相关推荐

  1. Spring依赖注入:注解注入总结

    更多11 spring 依赖注入 注解 java 注解注入顾名思义就是通过注解来实现注入,Spring和注入相关的常见注解有Autowired.Resource.Qualifier.Service.C ...

  2. spring依赖注入_Spring源码阅读:Spring依赖注入容器

    依赖注入 依赖注入是Spring框架最核心的能力,Spring框架提供的AOP,WebMVC等其它功能都是以依赖注入容器作为基础构建的,Spring依赖注入容器类似于一个用于组装对象的框架内核,任何应 ...

  3. spring依赖注入_Spring依赖注入

    spring依赖注入 介绍: 在设计良好的Java应用程序中,这些类应尽可能独立. 这样的设计提高了组件的可重用性. 它还使对各个组件进行单元测试变得更加容易. 依赖注入的概念促进了Java对象之间的 ...

  4. spring依赖注入_Spring依赖注入技术的发展

    spring依赖注入 回顾Spring框架的历史,您会发现在每个发行版中实现依赖注入的方法越来越多. 如果您使用该框架已经超过一个月,那么在这篇回顾性文章中可能不会发现任何有趣的东西. 除了Scala ...

  5. Spring依赖注入技术的发展

    回顾Spring框架的历史,您会发现实现依赖注入的方式在每个发行版中都在增加. 如果您使用该框架已经超过一个月,那么在这篇回顾性文章中可能不会发现任何有趣的东西. 除了Scala中的最后一个示例,没有 ...

  6. 【Spring】Spring 依赖注入之手动注入

    文章目录 1.概述 2.依赖回顾 2.依赖对象的初始化方式 2.1 通过构造器设置依赖对象 2.2 通过set方法设置依赖对象 3.spring依赖注入 3.1 通过构造器注入 3.1.1 根据构造器 ...

  7. Spring 依赖注入的理解及三种注入方式

    Spring 依赖注入概念和三种注入方式(理解及应用) 什么是注入 要了解Spring的三种注入方式首先前提是得先了解一下什么是注入,相信很多人对这个概念都是模糊不清的,网上的解释是这样的: 依赖注入 ...

  8. spring依赖注入原理详解(转载)

    spring依赖注入原理详解----转载 所谓依赖注入就是指:在运行期,由外部容器动态地将依赖对象注入到组件中.当spring容器启动后,spring容器初始化,创建并管理bean对象,以及销毁它.所 ...

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

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

最新文章

  1. PCB Editor 布线后操作
  2. 号称最安全的苹果TEE被黑客攻破了,怎么办?
  3. 为什么计算机存储的是二进制补码?
  4. red linux安装mysql_RedHat下安装MySQL5.5
  5. IOS开发基础之使用AFNetworking框架下载服务器资源图片
  6. 编程基本功:变量局部化的教训
  7. Java核心技术 卷1
  8. 好用的工程项目管理软件推荐
  9. git reset,rebase,amend 使用实战
  10. 计算机应用助理师证,计算机应用助理工程师考的简单吗?吗?
  11. JAVA家庭记账软件
  12. Python 修改图像中的像素值
  13. java如何返回一个空数组?
  14. python多条曲线拟合成一条
  15. GBase产品学习-GBase 8s中查看数据库
  16. AI大语音(八)——GMM-HMM声学模型(深度解析)
  17. 金融科技的下一战场:从金融普惠到技术普惠
  18. 关于Time_wait/2MSL的概念
  19. 用直接分解法求方程组的C语言程序,c语言编程求解线性方程组论文
  20. java写脸萌_Linux环境下配置JDK,java环境

热门文章

  1. 挡d挡切换_吉行贴士 | 从N-D换挡,就是如此轻松
  2. php报500怎么抛出来,PHP将日期爆炸为值并使用if语句抛出500个错误
  3. IOS 从系统图库中获取 图片 并设置为头像
  4. 解决 /var/run/nginx.pid failed
  5. SQL SERVER 性能优化四: 创建分区表
  6. (转载)如何学好iphone游戏开发
  7. 记linux与Windows之间实现文件实时同步的方案
  8. 深度 | 解决真实世界问题:如何在不平衡类上使用机器学习?
  9. 安卓 发送短信两种方式
  10. Discriminative Modeling vs Generative Modeling