Spring的IOC代码解析

IOC通常就是我们所说的控制反转,它也是属于java中的重点,在面试的时候常常会被问到。

控制反转(Inversion of Control,英文缩写为IoC)把创建对象的权利交给框架,是框架的重要特征,并非面向对象编程的专用术语。它包括依赖注入(Dependency Injection,简称DI)和依赖查找(Dependency Lookup)。

IOC使得程序获取对象的方式发生了改变,由开始的new一个对象转变为第三方框架的创建和注入。第三方框架一般是通过配置指定具体注入哪一个实现,从而降低源代码的耦合性。

ioc最大的好处是什么?

因为把对象生成放在了XML里定义,所以当我们需要换一个实现子类将会变成很简单(一般这样的对象都是现实于某种接口的),只要修改XML就可以了,这样我们甚至可以实现对象的热插拨(有点象USB接口和SCIS硬盘了)。

IOC依据实现的方式不同可分为依赖注入(DI)和依赖查找

DI是控制反转的主要技术途径,分为setter注入和构造器注入

setter注入

通过调用无参构造器或者static无参工厂方法实例化bean之后,调用bean的setter方法实现setter注入。

public class JDBCDataSource(){
	private String driver;
	public void setDriver(String driver){
		Class.forName(driver);
		this.driver=driver;
	}
}
.........
 ........

下来实现setter注入配置xml文件

<bean id="dataSource" class="org.csdn.JDBCDataSource">
 <property name="driver" value="oracle.jdbc.OracleDriver"/>
 <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"/>
 <property name="user" value="andreny"/>
 <property name="password" value="root"/>
 </bean>

构造器注入

这个是通过调用带参数的构造器来实现的,容器在bean被实例化的时候,会根据参数类型执行相应的构造器。

public class OracleUserDao implements UserDao{
	private JDBCDataSource dataSource;
	public OracleUserDao(JDBCDataSource dataSource){
		this.dataSource=dataSource;
	}
}
........
........

按构造参数索引指定注入

<bean id="dataSource" class="org.csdn.JDBCDataSource">
 <proerty name="driver" value="oracle.jdbc.OracleDriver"/>
 <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"/>
 <property name="user" value="andreny"/>
 <property name="password" value="root"/>
</bean>
<bean id="userDao" class="org.csdn.OracleUserDao">
 <construtor-argindex="0" ref="dataSource"/>
</bean>

总结

以上就是本文关于Spring的IOC代码解析的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:

spring的IoC和DI详解

Spring的Ioc模拟实现详细介绍

如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

(0)

相关推荐

  • 浅谈springioc实例化bean的三个方法

    1.构造器 也就是在上一篇讲的那个例子,调用默认的无参构造函数 2.静态工厂方法 1)创建需要执行的方法的类 public class HelloWorld { public HelloWorld(){ System.out.println("aaaa"); } public void hello(){ System.out.println("hello world"); } } 2)创建静态工厂 public class HelloWorldFactory { p

  • spring的IoC和DI详解

    这里先来简单介绍下IoC和DI的区别: IOC:翻译过来是控制反转,将对象的创建权由Spring管理,HelloService不需要自己去创建,Spring可以帮你创建. DI:依赖注入,在我们创建对象的过程中,把对象依赖的属性注入到我们的类中. 我们现在编写的类是没有其它的属性的,如果你学过UML这种设计的话,面向对象中对象中的几种关系 简单来书,IoC更像是一种思想,DI是一种行为. 另一种说法是,ioc是目的,di是手段.ioc是指让生成类的方式由传统方式(new)反过来,既程序员不调用n

  • Spring的Ioc模拟实现详细介绍

    简单来说就是当自己需要一个对象的时候不需要自己手动去new一个,而是由其他容器来帮你提供:Spring里面就是IOC容器. 例如: 在Spring里面经常需要在Service这个装配一个Dao,一般是使用@Autowired注解:类似如下 public Class ServiceImpl{ @Autowired Dao dao; public void getData(){ dao.getData(); } 在这里未初始化Dao直接使用是会报出空指针异常的,那么在Spring里面的做法就是通过反

  • Spring中IoC优点与缺点解析

    本文为大家分享了Spring中IoC优点与缺点,供大家参考,具体内容如下 1. 优点 我们知道,在Java基本教程中有一个定律告诉我们:所有的对象都必须创建:或者说:使用对象之前必须创建,但是现在我们可以不必一定遵循这个定律了,我们可以从Ioc容器中直接获得一个对象然后直接使用,无需事先创建它们. 这种变革,就如同我们无需考虑对象销毁一样:因为Java的垃圾回收机制帮助我们实现了对象销毁:现在又无需考虑对象创建,对象的创建和销毁都无需考虑了,这给编程带来的影响是巨大的. 我们从一个简单例子开始,

  • 简单理解Spring之IOC和AOP及代码示例

    Spring是一个开源框架,主要实现两件事,IOC(控制反转)和AOP(面向切面编程). IOC 控制反转,也可以称为依赖倒置. 所谓依赖,从程序的角度看,就是比如A要调用B的方法,那么A就依赖于B,反正A要用到B,则A依赖于B.所谓倒置,你必须理解如果不倒置,会怎么着,因为A必须要有B,才可以调用B,如果不倒置,意思就是A主动获取B的实例:Bb=newB(),这就是最简单的获取B实例的方法(当然还有各种设计模式可以帮助你去获得B的实例,比如工厂.Locator等等),然后你就可以调用b对象了.

  • 基于springioc bean 的几个属性介绍

    1.lazy-init="false" 默认值为false,指的是bean的创建时机的spring容器一启动就会加载这些类.有点是及时发现bean的相关错误,因为spring容器启动,bean也都会创建完毕,如果bean有什么差错都会报出,缺点就是如果bean对象的开销较大,那会提前占用内存. 如果设置为true,则等到spring容器去获取该bean的对象时才会创建.优缺点与false相反 2.scope="singleton" 默认值就是singleton,指的

  • 详谈Spring对IOC的理解(推荐篇)

    一.IOC控制反转和DI依赖注入 1.控制反转,字面可以理解为:主动权的转移,原来一个应用程序内的对象是类通过new去主动创建并实例化的,对对像创建的主动权在程序代码中.程序不仅要管理业务逻辑也要管理对的象创建和依赖关系.这是很累的,也跟软件工程 "低耦合高内聚" 的概念不十分符合. 有了spring的ioc容器之后,对象的实例化和依赖关系管理都由IOC容器进行统一管理,主体类只要依赖ioc容器就够了,需要啥,容器会给他注入进去,也就是只要声明对象不用再主动去new,ioc容器帮忙把相

  • 简单实现Spring的IOC原理详解

    控制反转(InversionofControl,缩写为IoC) 简单来说就是当自己需要一个对象的时候不需要自己手动去new一个,而是由其他容器来帮你提供:Spring里面就是IOC容器. 例如: 在Spring里面经常需要在Service这个装配一个Dao,一般是使用@Autowired注解:类似如下 public Class ServiceImpl{ @Autowired Dao dao; public void getData(){ dao.getData(); } 在这里未初始化Dao直接

  • Spring的IOC代码解析

    IOC通常就是我们所说的控制反转,它也是属于java中的重点,在面试的时候常常会被问到. 控制反转(Inversion of Control,英文缩写为IoC)把创建对象的权利交给框架,是框架的重要特征,并非面向对象编程的专用术语.它包括依赖注入(Dependency Injection,简称DI)和依赖查找(Dependency Lookup). IOC使得程序获取对象的方式发生了改变,由开始的new一个对象转变为第三方框架的创建和注入.第三方框架一般是通过配置指定具体注入哪一个实现,从而降低

  • Java之Spring注解配置bean实例代码解析

    前面几篇均是使用xml配置bean,如果有上百个bean,这是不可想象的.故而,请使用注解配置bean !!! [1]注解类别 @Component : 基本注解, 标识了一个受 Spring(点击这里可以下载<Spring应用开发完全手册>) 管理的组件 @Repository : 标识持久层组件 @Service : 标识服务层(业务层)组件 @Controller : 标识表现层组件 Spring 能够从 classpath 下自动扫描, 侦测和实例化具有特定注解的组件. 对于扫描到的组

  • Spring拦截器HandlerInterceptor接口代码解析

    Spring的HandlerMapping支持拦截器,拦截器必须实现HandlerInterceptor接口,此接口里面有下面3中方法: 1.preHandle()处理器执行前被调用,方法返回true标识继续调用其他拦截器或者处理器,返回false表示中断流程,后续的拦截器和处理器不再执行. 2.postHandle()处理器执行后,视图执行前调用,此时而已通过ModelAndView对象对数据模型数据进行处理或对视图进行处理. 3.afterCompletion()整个过程结束后调用,比如性能

  • mybatis开启spring事务代码解析

    1.事务 Spring事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,spring是无法提供事务功能的.最终都是调用数据库连接来完成事务的开启.提交和回滚. 2.模块 那么在对于spring事务而言,几个不可或缺的模块就是数据源.事务管理器以及事务编程 3.xml配置 <!--事务管理器--> <bean id="springTransactionManager" class="org.springframework.jdbc.datasourc

  • Spring实例化bean过程解析及完整代码示例

    提出问题 Spring中Bean的实例化是Bean生命周期的一个重要环节,通常Bean初始化后将不再改变. 那么Spring实例Bean的过程到底是怎么样的呢?! Spring实例化bean过程分析 要想获取到一个bean对象,得先通过BeanFactory的getBean()方法获取,期间会经过一系列步骤来实例化这个bean对象: 第一步:调用Bean的默认构造方法(当然也可以是指定的其它构造方法),生成bean实例:bean1. 第二步:检查Bean配置文件中是否注入了Bean的属性值,如果

  • 简单谈谈Spring Ioc原理解析

    业务场景: 在使用Java进行开发业务的过程中,很多时候一个业务是由各种组件组成,在每个使用到这些组件时都会毫不犹豫的new一个组件对象来使用,在小项目中这样的做法无可厚非,也不存在什么问题.但是在业务逻辑复杂并且多人协作开发的项目中,这会导致业务和组件之间的关系错综复杂而且不便于管理,对象之间的耦合度变得很高,这就是所谓的牵一发而动全身吧. 而这个问题在spring中得到了解决,它的核心在于Ioc思想: Ioc:全文是Inversion of Control.翻译过来就是控制反转,意思是对象之

  • spring中ioc是什么

    IoC--Inversion of Control,控制反转 在Java开发中,IoC意味着将你设计好的类交给系统去控制,而不是在你的类内部控制.IoC是一种让服务消费者不直接依赖于服务提供者的组件设计方式,是一种减少类与类之间依赖的设计原则. DI--Dependency Injection(依赖注入) 即组件之间的依赖关系由容器在运行期决定,形象的来说,即由容器动态的将某种依赖关系注入到组件之中. 依赖注入的目标并非为软件系统带来更多的功能,而是为了提升组件重用的概率,并为系统搭建一个灵活.

随机推荐