spring核心技术IOC,DI
在介绍Spring中IOC之前,先说说Spring的优势有哪些。首先1.方便解耦,简化开发:就是说将对象间的依赖关系交给Spring进行控制,避免了编码造成的过度耦合。2.AOP编程的支持:方便进行切面编程。3.声明式事务的支持:进行事务的管理,提高开发效率和质量。4.方便程序的测试:可以用非容器的依赖的编程方式进行几乎所有的测试工作。5.方便集成各种优秀的框架:Spring降低各种框架的难度,提供各种框架的支持。6.降低API的难度:Spring对(JDBC,javaMail,远程调用等)进行了薄薄的封装层,使这些API使用难度大大降低。
以上讲述了Spring的好处,接下来说说Spring的核心技术IOC。官方是这样介绍IOC的:控制反转,表示将对象的创建权利反转给Spring框架。它主要解决的是“程序耦合性高的问题”。以前创建对象,直接new,利用反射,调用对象克隆,运用序列化手段调用java.io.ObjectInputStream 对象的 readObject()方法。IOC已经帮我们解决了这个问题,创建对象的动作直接交给Spring,它相当于一个大容器,将已经创建好的对象放到容器中,需要那个对象,直接到容器中去取就可以了。
Spring提供了2个工厂接口:1.ApplicationContext接口 :该接口可以获得具体的Bean对象,而且这个接口有2个具体的实现类分别是ClassPathXmlApplicationContext:加载类路径下的Spring配置文件 FileSystemXmlApplicationContext:加载本地磁盘下的Spring配置文件。2.BeanFactory:是Spring框架早期的创建Bean对象工厂接口。代码如下:
看如下代码:
@Test
public void test() { // 创建Spring工厂,IOC容器
ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
//BeanFactory ac=new XmlBeanFactory(new ClassPathResource("applicationContext.xml")); //Beanfactory创建对象
UserDao userDao =(UserDao) ac.getBean("userDao"); userDao.save(); }
对于以上两个接口还是有区别的,BeanFactory采取延迟加载,第一次getBean时才会初始化Bean。而applicationContext.xml中就会创建具体的Bean对象,除此之外具有事件传递,Bean自动装配,各种不同的应用层的Context实现。对于IOC入门学习者,了解一下Spring核心配置文件的标签。id属性:id属性是Bean的唯一标识 class属性是Bean的全路径名 scope属性代表Bean的作用范围,其中single:单例(默认值) prototype:多例 request:应用在Web应用层,将创建的对象存入到request域中 session:应用在web应用中,将创建的对象存入到session中 globalsession:应用在porlet环境下使用,将创建的对象存入到全局的session中。注意:当设置为多例时,每次getBean时,都会重新实例化。
init-method属性:当Bean被载入到容器的时候调用init-method指定的方法。destroy-method属性:当Bean从容器中删除的时候调用destroy-method属性指定的方法,想查看destroy-method的效果,必须满足scope=singleton有效,Web容器会自动调用,需要手动ClassPathXmlApplicationContext的close方法。
public class UserDaoImpl implements UserDao{ public void save() {
System.out.println("持久层,用户保护");
} public void firstInit(){
System.out.println("初始化方法启动");
} public void lastdestroy(){
System.out.println("销毁方法启动");
} }
核心配置文件的配置如下:
<bean id="userDao" class="com.user.dao.impl.UserDaoImpl" init-method="firstInit" destroy-method="lastdestroy"></bean>
测试代码:
@Test
public void test() { // 创建Spring工厂,IOC容器
ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml"); UserDao userDao =(UserDao) ac.getBean("userDao"); userDao.save(); // 手动关闭close,才能调用destroy-method方法
((ClassPathXmlApplicationContext)ac).close(); }
2.依赖注入DI:在Spring框架负责创建Bean对象时,动态的将依赖对象注入到Bean组件中!可以通过构造(提供构造方法)注入,set注入(提供Set方法)等,除了以上常用注入以外,还有特殊类型的注入。比如数组或list注入,Map注入,properties注入。特殊类型的注入式放在Bean中注入的,这里实体类需要提供属性,并且提供set方法,以下分别列出其注入的代码:
<!-- 构造方法注入 -->
<bean id="car" class="com.domain.Car">
<constructor-arg name="name" value="大奔"></constructor-arg>
<constructor-arg name="price" value="1234.00"></constructor-arg>
</bean> <!-- set方法注入 -->
<bean id="people" class="com.domain.People">
<property name="name" value="李斯特"></property>
<property name="address" value="上海黄浦区"></property>
<property name="car" ref="car"></property>
</bean> <bean id="cd" class="com.domain.CollectionBean">
<!--list注入 -->
<property name="list">
<list>
<value>测试1</value>
<value>测试2</value>
<value>测试3</value>
</list>
</property>
<!-- Map注入 -->
<property name="map">
<map>
<entry key="id" value="1"></entry>
<entry key="name" value="测试"></entry>
</map>
</property>
<!-- properties注入 -->
<property name="properties">
<props>
<prop key="name">测试2</prop>
<prop key="age">22</prop>
</props>
</property>
</bean>
spring核心技术IOC,DI的更多相关文章
- Spring的IOC/DI使用到的技术
一.了解Spring IOC/DI 1:Spring有两大核心技术,控制反转(Inversion of Control, IOC)/依赖注入(Dependency Injection,DI)和面向切面 ...
- Spring框架-IOC/DI详细学习
一.IOC/DI概念 参考博客:https://www.cnblogs.com/xdp-gacl/p/4249939.html IOC(inversion of control, 控制反转)是一种设计 ...
- spring的IOC/DI功能实践
一.写在前面: 做这个Demo主要是为了能够更好的理解Spring的原理,看再多的文章,听再多的讲解最终都最好自己去实现一遍,可以将Spring的功能分块实现,最终自然比较容易将各个功能组合起来. 这 ...
- Spring之IOC/DI(反转控制/依赖注入)_入门Demo
在平时的java应用开发中,我们要实现某一个功能或者说是完成某个业务逻辑时至少需要两个或以上的对象来协作完成,在没有使用Spring的时候,每个对象在需要使用他的合作对象时,自己均要使用像new ob ...
- Spring框架——IOC&DI
Spring Spring 目标 内容 Spring与web整合的原理 Spring 中包含的关键特性 Spring架构图 企业级框架 企业级系统 IOCDI IOC DI IOC和DI 为什么使用依 ...
- 个人对spring的IOC+DI的封装
暂时支持8种基本数据类型,String类型,引用类型,List的注入. 核心代码 package day01; import java.lang.reflect.Field;import java.l ...
- Spring基础[IOC/DI、AOP]
一.Spring作用:管理项目中各种业务Bean(service类.Dao类.Action类),实例化类,属性赋值 二.Spring IOC(Inversion of Control )控制反转,也被 ...
- Spring理解IOC,DI,AOP作用,概念,理解。
IOC控制反转:创建实例对象的控制权从代码转换到Spring容器.实际就是在xml中配置.配置对象 实例化对象时,进行强转为自定义类型.默认返回类型是Object强类型. ApplicationCon ...
- Spring注解IOC/DI(4)
2019-03-08/11:10:17 演示:使用注解的方式完成注入对象中的效果 注解参考链接:https://www.cnblogs.com/szlbm/p/5512931.html Spring中 ...
随机推荐
- Duilib教程-简单介绍
在读这篇博客的时候,可能您已经对duilib有一定的了解.所以,我并不打算对duilib进行过多的介绍.它的内核首先由外国人编写,后来由国人一个小组接过来继续编写,于是就有了现在的Duilib. 1. ...
- JS循环语句的理解
循环语句就是让程序重复性去做某些工作 最常见的就是for循环 那它的写法都有哪些呢? 1.必须要有初始值 2.要有条件判断 3.状态的改变 4.循环体 一定要控制循环多少次结束,否则就变成了死循环,消 ...
- c语言加密算法头文件下载(base64、md5、sha1)
1.base64 网上有一份开头就是 // Encoding lookup table char base64encode_lut[] = { 的base64.h, 在loadrunner中加密有b ...
- html ; css ; javascript ; json ;
[说明]今天因为看到了前端的js页面和html页面,觉得有必要熟悉一下他们的基本语法,所以花了一天的时间去复习巩固了一下(之前学习过),包括html语法,css语法,javascript语法,对象.B ...
- 【BZOJ2090/2089】[Poi2010]Monotonicity 2 动态规划+线段树
[BZOJ2090/2089][Poi2010]Monotonicity Description 给出N个正整数a[1..N],再给出K个关系符号(>.<或=)s[1..k].选出一个长度 ...
- 局域网查看工具Lansee注册码
相信好多人为查看局域网IP发愁,今天给大家推荐一个工具 lansee 猛戳下载
- Express入门教程:一个简单的博客
来自: http://ourjs.com/detail/56b2a6f088feaf2d031d2468 Express 简介 Express 是一个简洁而灵活的 node.js Web应用框架, ...
- visual studio 下 C++生成dump文件
1 lib配置 项目-->属性-->配置属性-->链接器-->输入-->附加依赖项 增加dbghelp.lib 2 头文件 #include <imagehlp.h ...
- jQuery EasyUI 简介
简介 jQuery EasyUI 是一个基于 jQuery 的框架,集成了各种用户界面插件. 特点: ①easyui 是一个基于 jQuery 的框架,集成了各种用户界面插件. ②easyui 提供建 ...
- Java线程安全和非线程安全
ArrayList是非线程安全的,Vector是线程安全的:HashMap是非线程安全的,HashTable是线程安全的:StringBuilder是非线程安全的,StringBuffer是线程安全的 ...