• IOC和DI入门案例


    IOC案例

    1. 创建BookDao接口、BookDaoImpl类和BookService接口、BookServiceImpl类

    1.BookDao

    package dao;
    
    public interface BookDao {
        public void save();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2.BookDaoImpl类

    package dao;
    
    public class BookDaoImpl implements BookDao{
     public void save(){
         System.out.println("book dao save ...");
     }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    3.BookService接口

    package impl;
    
    public interface BookService {
        public void save();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    4.BookServiceImpl类

    package impl;
    
    import dao.BookDao;
    import dao.BookDaoImpl;
    
    public class BookServiceImpl implements BookService{
        //5.删除业务层中使用new方式创建的对象
        private BookDao bookDao=new BookDaoImpl();
        public void save(){
            System.out.println("book service save...");
            bookDao.save();
        }
        //6.提供set方法
        public void setBookDao(BookDao bookDao) {
            this.bookDao = bookDao;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    1. 添加spring依赖jar包

    pom.xml插入一下代码

    
            
                org.springframework
                spring-context
                5.2.10.RELEASE
            
        
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    1. 添加配置文件
      resources 下添加 spring 配置文件 applicationContext.xml
      在这里插入图片描述
    2. 在配置文件中文成bean的配置
    
    
        
        
        
    
        
        
        
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    bean定义id属性在同一个配置文件中不能重复。

    1. 获取IOC容器
      使用Spring提供的接口完成IOC容器的创建,创建App类,编写main方法
    public class App {
        public static void main(String[] args) {
            //获取Ioc容器
            ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    1. 从容器中获取对象进行方法调用
    public class App {
       public static void main(String[] args) {
           //获取Ioc容器
           ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
           //4.获取bean
           BookDao bookDao= (BookDao) ctx.getBean("bookDao");
           bookDao.save();
    
           BookService bookService= (BookService) ctx.getBean("bookService");
           bookService.save();
       }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    1. 运行结果
      在这里插入图片描述

    DI案例

    1. 在BookServiceImpl类中,删除业务层中使用new的方式创建的dao对象并提供set方法
    public class BookServiceImpl implements BookService{
        //5.删除业务层中使用new方式创建的对象
        private BookDao bookDao;//=new BookDaoImpl();
        public void save(){
            System.out.println("book service save...");
            bookDao.save();
        }
        //6.提供set方法
        public void setBookDao(BookDao bookDao) {
            this.bookDao = bookDao;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    1. 修改配置applicationContext.xml配置文件,在配置文件中添加依赖注入配置
    
    
        
        
        
    
        
        
                
                
                
                
        
        
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    配置中的两个bookDao的含义不一样

    • name="bookDao"中的bookDao的作用是让Spring的IOC容器在获取到名称后,将首字母大写,前面加set找对应的setBookDao()方法进行对象注入。
    • ref="bookDao"中的bookDao的作用是让Spring能在IOC容器中找到id为bookDao的Bean对象给bookService进行注入。
      在这里插入图片描述
    1. 运行结果
      在这里插入图片描述
  • 相关阅读:
    代码随想录训练营 DP
    集美大学校赛 B,C
    【洛谷 P3853】[TJOI2007] 路标设置 题解(二分答案+循环)
    Estimation with Bootstrap
    技术对接43
    内网穿透工具 Cpolar 帮您实现用友U8 Cloud 的外网部署,一键畅享云端ERP
    区块链分片
    线性结构和非线性结构
    掌握 Figma 的自动布局,轻松设计 - 简化指南!
    fork()函数与僵尸进程
  • 原文地址:https://blog.csdn.net/m0_46550052/article/details/127973989