一起学spring--依赖注入---简单粗暴的例子展示
欢迎进入《一起学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--依赖注入---简单粗暴的例子展示相关推荐
- Spring依赖注入:注解注入总结
更多11 spring 依赖注入 注解 java 注解注入顾名思义就是通过注解来实现注入,Spring和注入相关的常见注解有Autowired.Resource.Qualifier.Service.C ...
- spring依赖注入_Spring源码阅读:Spring依赖注入容器
依赖注入 依赖注入是Spring框架最核心的能力,Spring框架提供的AOP,WebMVC等其它功能都是以依赖注入容器作为基础构建的,Spring依赖注入容器类似于一个用于组装对象的框架内核,任何应 ...
- spring依赖注入_Spring依赖注入
spring依赖注入 介绍: 在设计良好的Java应用程序中,这些类应尽可能独立. 这样的设计提高了组件的可重用性. 它还使对各个组件进行单元测试变得更加容易. 依赖注入的概念促进了Java对象之间的 ...
- spring依赖注入_Spring依赖注入技术的发展
spring依赖注入 回顾Spring框架的历史,您会发现在每个发行版中实现依赖注入的方法越来越多. 如果您使用该框架已经超过一个月,那么在这篇回顾性文章中可能不会发现任何有趣的东西. 除了Scala ...
- Spring依赖注入技术的发展
回顾Spring框架的历史,您会发现实现依赖注入的方式在每个发行版中都在增加. 如果您使用该框架已经超过一个月,那么在这篇回顾性文章中可能不会发现任何有趣的东西. 除了Scala中的最后一个示例,没有 ...
- 【Spring】Spring 依赖注入之手动注入
文章目录 1.概述 2.依赖回顾 2.依赖对象的初始化方式 2.1 通过构造器设置依赖对象 2.2 通过set方法设置依赖对象 3.spring依赖注入 3.1 通过构造器注入 3.1.1 根据构造器 ...
- Spring 依赖注入的理解及三种注入方式
Spring 依赖注入概念和三种注入方式(理解及应用) 什么是注入 要了解Spring的三种注入方式首先前提是得先了解一下什么是注入,相信很多人对这个概念都是模糊不清的,网上的解释是这样的: 依赖注入 ...
- spring依赖注入原理详解(转载)
spring依赖注入原理详解----转载 所谓依赖注入就是指:在运行期,由外部容器动态地将依赖对象注入到组件中.当spring容器启动后,spring容器初始化,创建并管理bean对象,以及销毁它.所 ...
- Spring依赖注入与自动装配
Spring依赖注入与自动装配 首先推荐狂神说的Spring讲义 1.Beans.xml作用 简而言之,我们通过在beans.xml中进行配置,将各种类交给spring来管理. 2.依赖注入 推荐狂神 ...
最新文章
- PCB Editor 布线后操作
- 号称最安全的苹果TEE被黑客攻破了,怎么办?
- 为什么计算机存储的是二进制补码?
- red linux安装mysql_RedHat下安装MySQL5.5
- IOS开发基础之使用AFNetworking框架下载服务器资源图片
- 编程基本功:变量局部化的教训
- Java核心技术 卷1
- 好用的工程项目管理软件推荐
- git reset,rebase,amend 使用实战
- 计算机应用助理师证,计算机应用助理工程师考的简单吗?吗?
- JAVA家庭记账软件
- Python 修改图像中的像素值
- java如何返回一个空数组?
- python多条曲线拟合成一条
- GBase产品学习-GBase 8s中查看数据库
- AI大语音(八)——GMM-HMM声学模型(深度解析)
- 金融科技的下一战场:从金融普惠到技术普惠
- 关于Time_wait/2MSL的概念
- 用直接分解法求方程组的C语言程序,c语言编程求解线性方程组论文
- java写脸萌_Linux环境下配置JDK,java环境
热门文章
- 挡d挡切换_吉行贴士 | 从N-D换挡,就是如此轻松
- php报500怎么抛出来,PHP将日期爆炸为值并使用if语句抛出500个错误
- IOS 从系统图库中获取 图片 并设置为头像
- 解决 /var/run/nginx.pid failed
- SQL SERVER 性能优化四: 创建分区表
- (转载)如何学好iphone游戏开发
- 记linux与Windows之间实现文件实时同步的方案
- 深度 | 解决真实世界问题:如何在不平衡类上使用机器学习?
- 安卓 发送短信两种方式
- Discriminative Modeling vs Generative Modeling