• Spring IoC与DI(依赖注入)


    Spring Ioc

    所谓控制反转,即将传统的需要代码进行的操作,交由Spring容器来做。下面以添加book为例进行比较一下:
    BookService.java

    public interface BookService {
    	void addBook();
    }
    

    BookServiceImpl .java

    public class BookServiceImpl implements BookService {
    	@Override
    	public void addBook() {
    		System.out.println("add book by ioc");
    	}
    
    }
    

    Spring 配置文件

    <?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 definitions here -->
    <bean id="bookService" class="[包名].bookServiceImpl"></bean>
    </beans>
    

    测试:

    public class TestIoc {
    	
    	@Test
    	public void demo01(){
    		//传统方法
    		BookService bookService= new bookServiceImpl();
    		bookService.addBook();
    	}
    	
    	@Test
    	public void demo02(){
    		//从spring容器获得
    		//1 获得容器
    		ApplicationContext applicationContext = 
                                    new ClassPathXmlApplicationContext("com/spring/ioc/beans.xml");
    		
    	    //2获得内容 --不需要自己new,都是从spring容器获得
    		BookService bookService= (BookService ) applicationContext.getBean("bookService");
    		bookService.addBook();
    	}
    
    }
    
    

    DI(Dependency Injection)

    has a:有一个,成员变量,依赖。
    class B {
    private A a; //B类依赖A类
    }
    依赖:一个对象需要使用另一个对象
    注入:通过setter方法进行另一个对象实例设置。
    举例如下:

    public interface BookDao {
    	void save();
    }
    
    public class BookDaoImpl implements BookDao{
    	@Override
    	public void save(){
    		System.out.println("DI -> add a book");
    	}
    }
    
    public interface BookService {
    	void addBook();
    }
    
    public class BookServiceImpl implements BookService {
    	private BookDao bookDao;
    	
    	public void setBookDao(BookDao bookDao){
    		this.bookDao=bookDao;
    	}
    
    	@Override
    	public void addBook() {
    		this.bookDao.save();
    	}
    
    }
    
    public class TestDI {
    	
    	@Test
    	public void demo01(){	
    		String xmlPath = "com/*/spring/ioc2/beans.xml";
    		ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
    		BookService bookService = (BookService) applicationContext.getBean("bookService");
    		bookService.addBook();
    	}
    }
    
    <?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">
    
    <!-- 
    	模拟spring执行过程
    		创建service实例:BookService bookService = new BookServiceImpl()	IoC  <bean>
    		创建dao实例:BookDao bookDao = new BookDaoImpl()			IoC
    		将dao设置给service:bookService.setBookDao(bookDao);		DI   <property>
    		
    		<property> 用于进行属性注入
    			name: bean的属性名,通过setter方法获得
    			ref :另一个bean的id值的引用
    	 -->
    
    <bean id="bookService" class="[包名].BookServiceImpl">
    	<property name="bookDao" ref="bookDao"></property>
    </bean>
    
    <bean id="bookDao" class="[包名].BookDaoImpl"></bean>
    </beans>
    

    大家有兴趣也可以关注我的公众号查看文章。

  • 相关阅读:
    3.创建第一个android项目
    2.SDK目录结构和adb工具及命令介绍
    1.安卓开发之环境搭建
    组成原理习题(一)
    微软职位内部推荐-Software Development Engineer II
    微软职位内部推荐-Enterprise Architect
    微软职位内部推荐-Senior NLP Scientist & Developer
    微软职位内部推荐-Sr DEV Lead, Bing Search Relevance
    微软职位内部推荐-Principal DEV Manager for Bing Client
    微软职位内部推荐-Principal Dev Manager for Windows Phone Shell
  • 原文地址:https://www.cnblogs.com/caozz/p/iocanddi.html
Copyright © 2020-2023  润新知