框架:Spring IoC
Spring篇
第二章、Spring IoC简介
一、基本概念
控制反转是一个比较抽象的概念,是Spring框架的核心,用来消减计算机程序的耦合问题。
依赖注入是IoC的另外一种说法,只是从不同的角度描述相同的概念。
二、控制反转和依赖注入
- 控制反转:当Spring框架出现后,对象的实例(汽车)不再由调用者(我)来创建,而是由Spring容器(汽车店)来创建。Spring容器负责控制程序之间的关系(汽车店控制我和汽车零件的关系),而不是由调用者的程序代码直接控制。这样,控制权由调用者转移到Spring容器,控制权发生了反转,这就是Spring的控制反转。
 - 依赖注入:从Spring容器角度上看,Spring容器负责将被依赖对象赋值给调用者的成员变量,相当于为调用者注入它所依赖的实例,这就是Spring的依赖注入。
 
【附】:依赖注入采用的Java 的反射机制
三、代码操作
1、布局

2、构造方法注入
2.1、接口
- 在包dao中添加接口TestDao
 
package dao;
public interface TestDao {
    public void sayHello();
}
- 在包server中添加接口TestDIService
 
package server;
public interface TestDIService {
    public void sayHello();
}
2.2、接口实现类
- 在包dao中添加接口实现类TestDaoImpl
 
package dao; /**
* 接口实现类
* lin
* 2018/11/22
*/
public class TestDaoImpl implements TestDao {
@Override
public void sayHello() {
System.out.println("TestDiDaoSay:“Spring,Make persistent efforts!”");
}
}
- 在包server中添加接实现类TestDIServiceImpl
 
package server;
import dao.TestDao;
public class TestDIServiceImpl implements TestDIService {
    private TestDao testDao;
    //构造方法,用于实现依赖注入接口对象testDiDao
    public TestDIServiceImpl(TestDao testDao){
        super();
        this.testDao=testDao;
    }
    @Override
    public void sayHello() {
        //调用testDIDao中的sayHello方法
        testDao.sayHello();
        System.out.println("TestDIService构造方法注入say:Study Hard!");
    }
}
2.3、配置文件
添加配置文件applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--将指定类TextDaoImpl配置给Spring,让Spring创建其实例-->
<bean id="test" class="dao.TestDaoImpl"/>
<!--使用构造方法注入-->
<bean id="testDIService" class="server.TestDIServiceImpl">
<!--将myTestDIDao注入到TestDIServiceImpl类的属性testDIDao-->
<constructor-arg index="0" ref="test"/>
<!--constructor-arg:用于定义类的构造方法的参数-->
<!--index:定义参数的位置-->
<!--ref:某一个实例的引用-->
</bean>
</beans>
2.4、测试类
在包test添加测试类TestDI
package test; import dao.TestDao;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import server.TestDIService; public class Test {
public static void main(String[] args) {
//初始化Spring容器ApplicationContest,加载配置文件
ApplicationContext appCon=new ClassPathXmlApplicationContext("applicationContext.xml");
//通过容器获取test实例
TestDIService testDIService=(TestDIService)appCon.getBean("testDIService");
testDIService.sayHello();
}
}
3、使用属性setter方法注入
3.1、接口实现类
在包server中添加TestDIServiceImpl_setter类
package server; import dao.TestDao;
import dao.TestDaoImpl; public class TestDIServiceImpl_setter implements TestDIService {
private TestDao testDao;
//添加testDIDao属性的setter方法,用于实现依赖注入o
public void setTestDIDao(TestDao testDIDao) {
this.testDao=testDIDao;
} @Override
public void sayHello() {
//调用testDIDao中的sayHello方法
testDao.sayHello();
System.out.println("setter方法注入say:Study Hard!");
}
}
3.2、配置文件
在原有的配置文件applicationContext.xml中添加bean属性
<bean id="testDIServicel" class="server.TestDIServiceImpl_setter">
<!--调用TestDIServiceImpl_setter中的setter方法,将myTestDIDao注入到TestDIServiceImpl_setter类的testDIDao上-->
<property name="testDIDao" ref="test"/>
</bean>
总:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--将指定类TextDaoImpl配置给Spring,让Spring创建其实例-->
<bean id="test" class="dao.TestDaoImpl"/>
<!--使用构造方法注入-->
<bean id="testDIService" class="server.TestDIServiceImpl">
<!--将myTestDIDao注入到TestDIServiceImpl类的属性testDIDao-->
<constructor-arg index="" ref="test"/>
<!--constructor-arg:用于定义类的构造方法的参数-->
<!--index:定义参数的位置-->
<!--ref:某一个实例的引用-->
</bean>
<!--使用setter方法注入-->
<bean id="testDIServicel" class="server.TestDIServiceImpl_setter">
<!--调用TestDIServiceImpl_setter中的setter方法,将myTestDIDao注入到TestDIServiceImpl_setter类的testDIDao上-->
<property name="testDIDao" ref="test"/>
</bean>
</beans>
3.3、测试类
在test中插入代码
//通过容器获取testDIService实例,测试setter方法注入
TestDIService testDIService1=(TestDIService)appCon.getBean("testDIServicel");
testDIService1.sayHello();
总
package test; import dao.TestDao;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import server.TestDIService; public class Test {
public static void main(String[] args) {
//初始化Spring容器ApplicationContest,加载配置文件
ApplicationContext appCon=new ClassPathXmlApplicationContext("applicationContext.xml");
//通过容器获取test实例
TestDIService testDIService=(TestDIService)appCon.getBean("testDIService");
testDIService.sayHello();
//通过容器获取testDIService实例,测试setter方法注入
TestDIService testDIService1=(TestDIService)appCon.getBean("testDIServicel");
testDIService1.sayHello();
}
}
框架:Spring IoC的更多相关文章
- [Spring框架]Spring IOC的原理及详解。
		
这里感谢 CSDN 的原博客:http://blog.csdn.net/m13666368773/article/details/7802126 看后 受益匪浅,这里再重温一遍Spring IOC ...
 - AS3 IOC框架Spring Actionscript 的使用总结
		
Spring Actionscript 是众多围绕依赖注入提供解决方案的Flex控制反转框架之一 AS3 下经典的IOC框架有Spring ActionScript.Parsley.Flicc和Swi ...
 - Spring框架(3)---IOC装配Bean(注解方式)
		
IOC装配Bean(注解方式) 上面一遍文章讲了通过xml来装配Bean,那么这篇来讲注解方式来讲装配Bean对象 注解方式需要在原先的基础上重新配置环境: (1)Component标签举例 1:导入 ...
 - Spring框架之IOC(控制反转)
		
[TOC] 第一章Spring框架简介 IOC(控制反转)和AOP(面向方面编程)作为Spring框架的两个核心,很好地实现了解耦合.所以,简单来说,Spring是一个轻量级的控制反转(IoC)和面向 ...
 - 框架源码系列六:Spring源码学习之Spring IOC源码学习
		
Spring 源码学习过程: 一.搞明白IOC能做什么,是怎么做的 1. 搞明白IOC能做什么? IOC是用为用户创建.管理实例对象的.用户需要实例对象时只需要向IOC容器获取就行了,不用自己去创建 ...
 - Spring框架学习02——Spring IOC 详解
		
1.Spring IOC的基本概念 IOC(Inverse of Control)反转控制的概念,就是将原本在程序中手动创建对象的控制权,交由Spring框架管理.当某个Java对象(调用者)需要调用 ...
 - 十七、Spring框架(IOC/DI)
		
一.Spring框架 Spring是一个基于IOC和AOP的结构J2EE系统的框架. 1.IOC反转控制是Spring的基础(Inversion Of Control).也就是说创建对象由以前的程序员 ...
 - Spring框架中IoC(控制反转)的原理(转)
		
原文链接:Spring框架中IoC(控制反转)的原理 一.IoC的基础知识以及原理: 1.IoC理论的背景:在采用面向对象方法设计的软件系统中,底层实现都是由N个对象组成的,所有的对象通过彼此的合作, ...
 - Spring框架的IOC核心功能快速入门
		
2. 步骤一:下载Spring框架的开发包 * 官网:http://spring.io/ * 下载地址:http://repo.springsource.org/libs-release-local/ ...
 
随机推荐
- php   url处理
			
http_build_query() $data = array("name"=>"callback" , "value"=>& ...
 - P3489 付公主的背包
			
题意:n<=1e5,m<=1e5,跑n个物品1到m容量的完全背包. 考虑暴力的做法就是把一些1/(1+x^a)的多项式乘起来即可. 考虑优化,取一下ln,转化为加法,然后exp回去就好了.
 - Selenium-WebDriver驱动对照表
			
Chrome 对于chrome浏览器,有时候会有闪退的情况,也许是版本冲突的问题,我们要对照着这个表来对照查看是不是webdriver和chrome版本不对 chromedriver版本 支持的Chr ...
 - 多线程总结2之volatile和synchronized(转)
			
本文转自 http://www.jasongj.com/java/thread_safe/ 一.多线程编程中的三个核心概念 本篇文章将从这三个问题出发,结合实例详解volatile如何保证可见性及一定 ...
 - 【Oracle】【5】主键、外键管理
			
前言: 1,事实上我是不使用外键的,所以本文只介绍主键 正文: (1)创建表的同时创建主键约束 create table STUDENT ( ID int , NAME varchar(8), AGE ...
 - python format格式化字符串
			
自python2.6开始,新增了一种格式化字符串的函数str.format() 语法 它通过{}和:来代替%. “映射”示例 通过位置 In [1]: '{0},{1}'.format('kzc',1 ...
 - MongoDB\BSON\UTCDateTime::toDateTime
			
示例# 1 MongoDB \ BSON \ UTCDatetime:toDateTime()例子 <?php $utcdatetime = new MongoDB\BSON\UTCDateTi ...
 - vijos 清点人数
			
背景 NK中学组织同学们去五云山寨参加社会实践活动,按惯例要乘坐火车去.由于NK中学的学生很多,在火车开之前必须清点好人数. 描述 初始时,火车上没有学生:当同学们开始上火车时,年级主任从第一节车厢出 ...
 - redis的文件事件
			
redis的文件事件:即与io相关的事件. /* File event structure */ typedef struct aeFileEvent { int mask; /* one of AE ...
 - weblogic启动比一般机器慢原因
			
weblogic启动慢一般先看setDomainEnv.sh中分配给JVM的内存大小,如果分配足够(没部应用一般也要1G以上)那么再用free -g看本机剩余内存是否充足.如果都没问题还是比一般机器启 ...