二.Spring的IOC原理的原理分析和Demo

来源:互联网 发布:双十一淘宝不能付款 编辑:程序博客网 时间:2024/05/29 17:15

IOC介绍

IOC:Inversion of Control 控制反转. 指的是对象的创建权反转(交给)给Spring容器.
作用是实现了程序的解耦合.

特别注意: spring新建对象时,默认的是使用无参构造方法类实例化对象的,所以如果不是配置的使用构造方法注入来实例化对象,在类中一定要有无参构造方法.(不写构造方法,默认就是无参构造方法.)

IOC底层原理使用的技术

1)IOC过程
IOC过程

2)底层原理
这里写图片描述
运用到的技术包括:(1)xml配置文件,(2)dom4j解决xml,(3)工厂设计模式,(4)反射.

IOC的简单demo

1.新建spring-ioc项目
2.建立Spring需要的配置文件Application.xml(文件名任意,位置可以任意)
在Application.xml中加入需要的Spring模块的schema约束.
关于所有的约束查看见我的另外一篇文章.
Spring的schema模板
Application.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">    <bean id="user" class="cn.com.yves.spring.User"></bean></beans>

3.新建User类

/*** Filename:    User.java* Copyright:   Copyright (c)2016* Company:     Yves* @version:    1.0* Create at:   2017年9月12日* Description:** Author       Yves He*/package cn.com.yves.spring;public class User {    private String name;    private int age;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }}

4.编写测试用例

/*** Filename:    UserTest.java* Copyright:   Copyright (c)2016* Company:     Yves* @version:    1.0* Create at:   2017年9月12日* Description:** Author       Yves He*/package cn.com.yves.spring;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class UserTest {    @Test    public void test() {        // 1 加载spring配置文件,根据配置创建对象        ApplicationContext context = new ClassPathXmlApplicationContext("Application.xml");        // 2 配置文件中的id获取创建的对象        User user = (User) context.getBean("user");        System.out.println(user);    }}

spring-ioc的Demo下载