spring的IOC入门

Spring的核心机制

管理Bean

程序主要是通过Spring容器来访问容器中的Bean,ApplicationContext是Spring容器最常用的接口,该接口有如下两个实现类:

ClassPathXmlApplicationContext: 从类加载路径下搜索配置文件,并根据配置文件来创建Spring容器。

FileSystemXmlApplicationContext: 从文件系统的相对路径或绝对路径下去搜索配置文件,并根据配置文件来创建Spring容器。

package com.xue.test;

import com.xue.service.BookService;
import com.xue.service.Impl.BookServiceImpl;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test01 {
    BookService bookService;

    @Test
    public void Test01() {
        //创建对象执行方法。对象的创建由Spring框架创建,此处可以直接问Ioc容器要就可以
        //bookService = new BookServiceImpl();
        //1.通过ClassPathXmlApplicationContext加载application.xml获取IOC容器
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("application.xml");
        //2.从IOC容器中根据名字获取对象
        bookService = (BookService) context.getBean("bookService");
        bookService.save();
    }
}

依赖注入=控制反转

Spring框架的核心功能有两个:

Spring容器作为超级大工厂,负责创建、管理所有的Java对象,这些Java对象被称为Bean。

Spring容器管理容器中Bean之间的依赖关系,Spring使用一种被称为"依赖注入"的方式来管理Bean之间的依赖关系。

当某个Java对象(调用者)需要调用另一个Java对象(被依赖对象)的方法时,在传统模式下通常有两种做法:

  1. 原始做法: 调用者主动创建被依赖对象,然后再调用被依赖对象的方法。

  1. 简单工厂模式: 调用者先找到被依赖对象的工厂,然后主动通过工厂去获取被依赖对象,最后再调用被依赖对象的方法。

注意:使用Spring框架之后,调用者无需主动获取被依赖对象,调用者只要被动接受Spring容器为调用者的成员变量赋值即可,由此可见,使用Spring后,调用者获取被依赖对象的方式由原来的主动获取,变成了被动接受——所以Rod Johnson称之为控制反转

1.创建项目,导入spring的jar包

spring的IOC入门_第1张图片

2.按照如下目录结构创建接口及其实现类

spring的IOC入门_第2张图片

dao层代码

//接口
package com.xue.dao;

public interface BookDao {
    void add();
}
//实现类
package com.xue.dao.Impl;

import com.xue.dao.BookDao;

public class BookDaoImpl implements BookDao {
    @Override
    public void add() {
        System.out.println("BookDaoImpl....add");
    }
}

service层代码

//接口
package com.xue.service;

public interface BookService {
    void save();
}
//实现类
package com.xue.service.Impl;

import com.xue.dao.BookDao;
import com.xue.dao.Impl.BookDaoImpl;
import com.xue.service.BookService;

public class BookServiceImpl implements BookService {
    //BookServiceImpl依赖bookDao的对象
    private BookDao bookDao;
    public String name;
    private int age;

    public void setBookDao(BookDao bookDao) {
        this.bookDao = bookDao;
    }

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

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

    @Override
    public void save() {
        System.out.println("BookServiceImpl...save"+"姓名:"+name+"年龄:"+age);
        bookDao.add();
    }
}

3.使用spring完成IOC的配置和DI依赖注入

创建spring的核心配置文件



    
    
    

        
        
        
    

bean标签表示把对应class的对象创建到IOC容器中,如果当前对象有依赖的其他对象,那么可以通过property对依赖的对象使用ref引用容器中已经注册过的对象。

注意:BookServiceImpl需要给bookDao属性设置setter方法,框架才能自动注入

public class BookServiceImpl implements BookService {
    //BookServiceImpl依赖bookDao的对象
    private BookDao bookDao;
    public String name;
    private int age;

    public void setBookDao(BookDao bookDao) {
        this.bookDao = bookDao;
    }

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

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

4.在servlet中进行测试

1.首先获取IOC的容器;

2.从容器中获取bookService对象;

3.执行方法:servlet执行---service执行,由于spring完成了依赖注入------dao层执行

package com.xue.test;

import com.xue.service.BookService;
import com.xue.service.Impl.BookServiceImpl;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test01 {
    BookService bookService;

    @Test
    public void Test01() {
        //创建对象执行方法。对象的创建由Spring框架创建,此处可以直接问Ioc容器要就可以
        //bookService = new BookServiceImpl();
        //1.通过ClassPathXmlApplicationContext加载application.xml获取IOC容器
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("application.xml");
        //2.从IOC容器中根据名字获取对象
        bookService = (BookService) context.getBean("bookService");
        bookService.save();

        BookServiceImpl b = new BookServiceImpl();
        
    }
}

运行结果如下:

spring的IOC入门_第3张图片

你可能感兴趣的:(spring,java,后端)