zoukankan      html  css  js  c++  java
  • 【开发者笔记】揣摩Spring-ioc初探,ioc是不是单例?

    前言:

      控制反转(Inversion of Control,英文缩写为IoC)把创建对象的权利交给框架,是框架的重要特征,并非面向对象编程的专用术语。它包括依赖注入(Dependency Injection,简称DI)和依赖查找(Dependency Lookup)。初探Spring,当看到这句话的时候,突发奇想其实IOC是不是就是一个单例模式的对象创建工具呢。Spring在创建之初会根据配置文件和代码中的注解,分析哪些Bean是需要创建的,于是将该类对象一一创建到缓存中,当接收到前端请求时,调用到对应的对象就去缓存池里面找,那么到底是不是这个意思呢?于是我来做一个小小的测试。

    实验原理:

      1、搭建Spring框架,使之能正常进行依赖注入

      2、注入一个带有属性的普通对象A到容器中,这个普通对象A有一个带有getter和setter的属性

      3、编写对A对象进行读写的Controller

      4、调用一次A对象的写操作

      5、调用多次A对象的读操作

      6、如果多次调用A对象的读操作得到的结果都是第4步中写的结果,那么证明注入的结果和单例模式得到的结果是一样的,实验成功,如果多次读取操作得到的结果并不是第4步中写的结果,那么理解有偏差。

    实验步骤:

      1、编写A对象:

     

    package com.wyb.serviceimpl;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import com.wyb.dao.BookDao;
    import com.wyb.dao.UserMapper;
    import com.wyb.model.User;
    import com.wyb.service.UserService;
    
    @Service
    public class UseServiceImpl implements UserService {
    	
    	private String name;
    	@Autowired
    	private UserMapper userMapper;
    
    	public User findUserById(int id) {
    		User user = userMapper.selectByPrimaryKey(id);
    		return user;
    	}
    
    	public String getName() {
    		// TODO Auto-generated method stub
    		return name;
    	}
    
    	public void setName(String name) {
    		// TODO Auto-generated method stub
    		this.name = name;
    	}
    	
    	public String myToString(){
    		return "IocTest:"+super.toString()+",this.name="+this.name;
    	}
    	
    }
    

      

      2、编写A对象的读写操作Controller

    	@RequestMapping(value = "/list", method = RequestMethod.GET)
    	@ResponseBody
    	private String list(Model model,HttpServletRequest request) {
    		String name = request.getParameter("name");
    		String result  = null;
    		if(!"".equals(name)&&name != null){
    			userService.setName(name);
    			result = "success to set name,the value is: "+userService.getName();
    		}else{
    			result = userService.myToString();
    		}
    		
    		return result;
    	}
    

      

      3、运行程序,并按步骤调用读写操作。

        3.1  写操作

      

        3.2 读操作

      

    实验结论:

      IOC的任务就是创建对象,创建的是公用对象,是单例对象,一次创建,到处使用。

      个人觉得,在对象创建这一方面,ioc就是一个单例工具,作用是让程序员不会再在Controller里面到处new Service对象,集中管理,统一分配,减少内存开销。

      

  • 相关阅读:
    JAVA中final关键字的作用
    JAVA作用域和排序算法介绍
    JAVA的控制结构
    Java概述
    P6329 【模板】点分树 | 震波[点分树]
    BZOJ #4771. 七彩树 [主席树,链并,差分]
    CF1276F Asterisk Substrings [后缀自动机]
    P4173 残缺的字符串 [FFT]
    CF528D Fuzzy Search [FFT]
    #4589. Hard Nim [FWT]
  • 原文地址:https://www.cnblogs.com/wyongbo/p/spring_ioc_test1.html
Copyright © 2011-2022 走看看