spring入门案例(IoC和DI)

入门案例IoC

IoCInverse of Control 反转控制的概念,就是将原本在程序中手动创建HelloService对象的控制权,交由Spring框架管理,

简单说,就是创建HelloService对象控制权被反转到了Spring框架


1、导入jar包

4 + 1  : 4个核心(beans、core、context、expression) + 1个依赖(commons-loggins...jar)


spring入门案例(IoC和DI)_第1张图片

2、目标类

l  提供UserService接口和实现类

l  获得UserService实现类的实例

       之前开发中,直接new一个对象即可。

       学习spring之后,将由Spring创建对象实例--> IoC 控制反转(Inverse of  Control)

              之后需要实例对象时,从spring工厂(容器)中获得,需要将实现类的全限定名称配置到xml文件中

case:
UserService:
package com.itheima.a_ioc;

public interface UserService {
	
	public void addUser();

}


UserServiceImpl:
package com.itheima.a_ioc;

public class UserServiceImpl implements UserService {

	@Override
	public void addUser() {
		System.out.println("a_ico add user");
	}

}


3、配置文件

l  位置:任意,开发中一般在classpath下(src)

l  名称:任意,开发中常用applicationContext.xml

l  内容:添加schema约束

       约束文件位置:spring-framework-3.2.0.RELEASE\docs\spring-framework-reference\html\xsd-config.html

beans.xml:


	
	



4、测试

TestIoC:
package com.itheima.a_ioc;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestIoC {
	
	@Test
	public void demo01(){
		//之前开发
		UserService userService = new UserServiceImpl();
		userService.addUser();
		
	}
	
	@Test
	public void demo02(){
		//从spring容器获得
		//1 获得容器
		String xmlPath = "com/itheima/a_ioc/beans.xml";
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
		//2获得内容 --不需要自己new,都是从spring容器获得
		UserService userService = (UserService) applicationContext.getBean("userServiceId");
		userService.addUser();
		
	}

}



入门案例DI

DI:Dependency Injection 依赖注入,在Spring框架负责创建Bean对象时,动态的将依赖对象注入到Bean组件。

    getBean("helloService")从spring容器中获得指定名称对象的实例时,

通过此设置<propertyname="info"value="">property>相当于执行 servcie.setInfo("传播");


l  DI Dependency Injection ,依赖注入

       isa :是一个,继承。

       hasa:有一个,成员变量,依赖。

              classB {

          private A a;   //B类依赖A类

       }

       依赖:一个对象需要使用另一个对象

       注入:通过setter方法进行另一个对象实例设置。

l  例如:

       classBookServiceImpl{

       //之前开发:接口 = 实现类 (service和dao耦合)

              //privateBookDao bookDao = new BookDaoImpl();

             //spring之后 (解耦:service实现类使用dao接口,不知道具体的实现类)

              privateBookDao bookDao;

              setter方法

   }

       模拟spring执行过程

       创建service实例:BookService bookService = newBookServiceImpl()         -->IoC 

       创建dao实例:BookDao bookDao = new BookDaoImple()                          -->IoC

       将dao设置给service:bookService.setBookDao(bookDao);                          -->DI  


1、目标类

l  创建BookService接口和实现类

l  创建BookDao接口和实现类

l  将dao和service配置 xml文件

l  使用api测试

dao层:

BookDao:
package com.itheima.b_di;

public interface BookDao {
	
	public void save();

}


BookDaoImpl:
package com.itheima.b_di;

public class BookDaoImpl implements BookDao {

	@Override
	public void save() {
		System.out.println("di  add book");
	}
	
	

}


service层:
BookService:
package com.itheima.b_di;

public interface BookService {

	public abstract void addBook();

}



BookServiceImpl:
package com.itheima.b_di;

public class BookServiceImpl implements BookService {
	
	// 方式1:之前,接口=实现类
//	private BookDao bookDao = new BookDaoImpl();
	// 方式2:接口 + setter
	private BookDao bookDao;
	public void setBookDao(BookDao bookDao) {
		this.bookDao = bookDao;
	}
	
	@Override
	public void addBook(){
		this.bookDao.save();
	}

	
}


2、配置文件

beans.xml:

	

	
	
		
	
	
	
	
	


spring入门案例(IoC和DI)_第2张图片

3、测试

@Test
	public void demo01(){
		//从spring容器获得
		String xmlPath = "com/itheima/b_di/beans.xml";
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
		BookService bookService = (BookService) applicationContext.getBean("bookServiceId");
		
		bookService.addBook();
		
	}



你可能感兴趣的:(JavaEE,spring)