在介绍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的更多相关文章

  1. Spring的IOC/DI使用到的技术

    一.了解Spring IOC/DI 1:Spring有两大核心技术,控制反转(Inversion of Control, IOC)/依赖注入(Dependency Injection,DI)和面向切面 ...

  2. Spring框架-IOC/DI详细学习

    一.IOC/DI概念 参考博客:https://www.cnblogs.com/xdp-gacl/p/4249939.html IOC(inversion of control, 控制反转)是一种设计 ...

  3. spring的IOC/DI功能实践

    一.写在前面: 做这个Demo主要是为了能够更好的理解Spring的原理,看再多的文章,听再多的讲解最终都最好自己去实现一遍,可以将Spring的功能分块实现,最终自然比较容易将各个功能组合起来. 这 ...

  4. Spring之IOC/DI(反转控制/依赖注入)_入门Demo

    在平时的java应用开发中,我们要实现某一个功能或者说是完成某个业务逻辑时至少需要两个或以上的对象来协作完成,在没有使用Spring的时候,每个对象在需要使用他的合作对象时,自己均要使用像new ob ...

  5. Spring框架——IOC&DI

    Spring Spring 目标 内容 Spring与web整合的原理 Spring 中包含的关键特性 Spring架构图 企业级框架 企业级系统 IOCDI IOC DI IOC和DI 为什么使用依 ...

  6. 个人对spring的IOC+DI的封装

    暂时支持8种基本数据类型,String类型,引用类型,List的注入. 核心代码 package day01; import java.lang.reflect.Field;import java.l ...

  7. Spring基础[IOC/DI、AOP]

    一.Spring作用:管理项目中各种业务Bean(service类.Dao类.Action类),实例化类,属性赋值 二.Spring IOC(Inversion of Control )控制反转,也被 ...

  8. Spring理解IOC,DI,AOP作用,概念,理解。

    IOC控制反转:创建实例对象的控制权从代码转换到Spring容器.实际就是在xml中配置.配置对象 实例化对象时,进行强转为自定义类型.默认返回类型是Object强类型. ApplicationCon ...

  9. Spring注解IOC/DI(4)

    2019-03-08/11:10:17 演示:使用注解的方式完成注入对象中的效果 注解参考链接:https://www.cnblogs.com/szlbm/p/5512931.html Spring中 ...

随机推荐

  1. SSH原理记录

    一.什么是SSH? 简单说,SSH是一种网络协议,用于计算机之间的加密登录. 如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会 ...

  2. vijos P1740 聪明的质检员

    题目链接:传送门 题目大意:给你n个物品,每件物品有重量 W 和价值 V,给m个区间,和一个标准值.(n,m最大200000) 要求找到一个值x,使得m个所有区间的权值和与标准值的差的绝对值最小.单个 ...

  3. async 的三大返回类型

    序 博主简单数了下自己发布过的异步文章,已经断断续续 8 篇了,这次我想以 async 的返回类型为例,单独谈谈. 异步方法具有三个可让开发人员选择的返回类型:Task<TResult>. ...

  4. XMLHttpRequest 对象 status 和statusText 属性对照表

    XMLHttpRequest 对象 status 和statusText 属性对照表 status statusText 说明 0** - 未被始化 1** - 请求收到,继续处理 100 Conti ...

  5. angualar入门学习-- 自定义指令 指令编译执行过程

    3个阶段: 一.加载阶段 加载angular.js的源码,找到ng-app确定应用边界范围. 二.编译阶段 compile 查找所有指令,保存在一个列表中 对所有指令按优先级(property属性值) ...

  6. HDU 1695 GCD (欧拉函数,容斥原理)

    GCD Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  7. submit按钮修改宽高的坑

    近些天对h5非常感兴趣,边工作边学习,虽然比较累,但过得很踏实.每天都要学习一点东西,这样才能对得起自己.好了,废话不多说,进入今天的主题. 今天遇到了一个非常有趣的东西,就是在修改submit按钮的 ...

  8. MySQL(多表的表记录的查询)

    一.外键约束 1.创建外键 --- 每一个班主任会对应多个学生 , 而每个学生只能对应一个班主任 ----主表 CREATE TABLE ClassCharger( id TINYINT PRIMAR ...

  9. java.net.SocketException四大异常解决方案(转)

    java.net.SocketException如何才能更好的使用呢?这个就需要我们先要了解有关这个语言的相关问题.希望大家有所帮助.那么我们就来看看有关java.net.SocketExceptio ...

  10. 微信小程序组件scroll-view

    视图容器scroll-view :官方文档 Demo Code var order = ['red', 'yellow', 'blue', 'green', 'red'] Page({ data: { ...