Spring学习--IOC容器的概念及一个简单IOC容器使用案例

IOC容器的概念:
IOC容器就是具有依赖注入功能的容器,IOC容器负者实例化、定位、配置应用程序中的对象及监理这些对象间的依赖,应用程序无需直接在对象中new对象,而是由IOC容器进行组装。在Spring中BeanFactory是IOC容器的实际代表。
Spring IoC容器如何知道哪些是它管理的对象呢?这就需要配置文件,Spring IoC容器通过读取配置文件中的配置元数据,通过元数据对应用中的各个对象进行实例化及装配。一般使用基于xml配置文件进行配置元数据,而且Spring与配置文件完全解耦的,可以使用其他任何可能的方式进行配置元数据,比如注解、基于java文件的、基于属性文件的配置都可以。
Bean的概念:
IoC容器管理的那些组成你应用程序的对象我们就叫它Bean, Bean就是由Spring容器初始化、装配及管理的对象,除此之外,bean就与应用程序中的其他对象没有什么区别了。那IoC怎样确定如何实例化Bean、管理Bean之间的依赖关系以及管理Bean呢?这就需要配置元数据,配置元数据指定如何实例化Bean、如何组装Bean等。


写代码了,开心吧(使用的是IDEA)SpringIOC项目,下图是创建一个Spring项目以及项目目录情况:
这里写图片描述

User.java

package org.liang.entity;

/**
 * Created by rcc on 2018/1/19.
 * 实体类
 */

public class User {
    private String name;
    private String gender;
    private Integer age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", gender='" + gender + '\'' +
                ", age=" + age +
                '}';
    }
}

UserServiceImpl.java

package org.liang.service;

import org.liang.entity.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;


/**
 * Created by rcc on 2018/1/19.
 */
public class UserServiceImpl {
    public User getUser(){
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
        User user = context.getBean(User.class);
        user.setName("liang");
        user.setGender("man");
        user.setAge(18);

        return user;
    }

}

spring-config.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="org.liang.entity.User" />

    <bean id="userService" class="org.liang.service.UserServiceImpl" >

    </bean>

</beans>

TestUser.java

package org.liang.test;

import org.liang.service.UserServiceImpl;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * Created by rcc on 2018/1/19.
 * 测试类
 */
public class TestUser {
    public static void main(String [] args){
        //原先需要进行创建对象时需要new对象的,如下
        UserServiceImpl userService = new UserServiceImpl();
        System.out.print(userService.getUser());   //User{name='liang', gender='man', age=18}

        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
        UserServiceImpl userServiceBean = (UserServiceImpl) context.getBean("userService");
        System.out.println(userServiceBean.getUser());

    }
}

.详解IOC:
Spring Ioc容器的代表就是org.springframework.beans包中的BeanFactory接口,BeanFactory接口提供了IoC容器最基本功能;而org.springframework.context包下的ApplicationContext接口扩展了BeanFactory,还提供了与Spring AOP集成、国际化处理、事件传播及提供不同层次的context实现 (如针对web应用的WebApplicationContext)。简单说, BeanFactory提供了IoC容器最基本功能,而 ApplicationContext 则增加了更多支持企业级功能支持。ApplicationContext完全继承BeanFactory,因而BeanFactory所具有的语义也适用于ApplicationContext。

**ApplicationContext接口获取Bean方法简介:**

• **Object getBean(String name) 根据名称返回一个Bean,客户端需要自己进行类型转换;**

• T getBean(String name, Class<T> requiredType) 根据名称和指定的类型返回一个Bean,客户端无需自己进行类型转换,如果类型转换失败,容器抛出异常;

• **T getBean(Class<T> requiredType) 根据指定的类型返回一个Bean,客户端无需自己进行类型转换,如果没有或有多于一个Bean存在容器将抛出异常;**

• Map<String, T> getBeansOfType(Class<T> type) 根据指定的类型返回一个键值为名字和值为Bean对象的 Map,如果没有Bean对象存在则返回空的Map

那么,IOC容器到底是如何工作的呢?
    一、准备配置文件(spring-config.xml):在配置文件中声明Bean的定义,也就是Bean配置元数据。
    二、由IOC容器进行解析元数据:IOC容器的Bean Reader读取并解析配置文件、更具定义生成Bean Definition配置元数据对象,IOC容器根据Bean Definition进行实例化、   
        配置和组装Bean。
    三、实例化IOC容器:由客户端实例化容器、获取需要的Bean。

这里写图片描述

猜你喜欢

转载自blog.csdn.net/WJHelloWorld/article/details/79108203