Spring IoC入门

一. 什么是spring,它能够做什么?
Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。
Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。
然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。
目的:解决企业应用开发的复杂性
功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能
范围:任何Java应用
简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。

  1. 中间层框架、万能胶
    struts2
    spring
    hibernate
    2 容器框架
    JavaBean 项目中的一个个类
    IOC和AOP

spring包含的模块

二 、Spring-IoC入门

  1. 什么是IoC控制反转(或依赖注入)

控制反转(IoC=Inversion of Control)IoC,用白话来讲,就是由容器控制程序之间的(依赖)关系,而非传统实现中,由程序代码直接操控。这也就是所谓“控制反转”的概念所在:(依赖)控制权由应用代码中转到了外部容器,控制权的转移,是所谓反转。
IoC还有一个另外的名字:“依赖注入 (DI=Dependency Injection)” ,即由容器动态的将某种依赖关系注入到组件之中
案例:实现Spring的IoC

IOC/DI
将以前由程序员实例化对象/赋值的工作交给了spring处理

下面举一个简单的demo供大家理解,代码如下:

IUserDao.java

public interface IFileDao {

void upload();

}
UserDaoImpl.java

public class FileDaoImpl implements IFileDao{

@Override
public void upload() {
        System.out.println("文件上传!");
}

}
假如在项目实际开发中有个上传文件的接口FileService,在这个接口中要实现文件上传,需要通过调用FileDaoImpl中的upload()方法来实现。
我们的正常做法是在FileService中先new FileDaoImpl(),然后再调用FileDaoImpl中相关方法。

正常做法的代码如下:

public class FileService{

private IFileDao ifd=new FileDaoImpl();

public void upload(){
    ifd.upload();
}

}
而IoC的思想即是,在你需要依赖对象的时候,IoC容器即可提供一个已经实例化好的对象给你,这样你就不需要自己去新建相应的依赖类。
看下面这段代码,来感受下IoC的过程:

FileService中声明的ifd无需再实例化,但是要提供set方法
public class FileService {

private IFileDao ifd;
    //set方法注入
public void setIfd(IFileDao ifd) {
	this.ifd = ifd;
}

public void upload() {
	System.out.println(ifd.upload());
}

}
2.在spring的配置文件spring-context.xml中配置FileDaoImpl 与FileService(spring-context.xml配置文件是自己创建的xml文件)



        
        
    
测试方法调用FileService的upload方法:

public class FileServiceTest {

@Test
public void testUpload() {
	ApplicationContext applicationContext=new ClassPathXmlApplicationContext("spring-context.xml");
	FileService fileService = (FileService)applicationContext.getBean("fileService");
	fileService.upload();
}

}

2.依赖注入的3种方式
· set方法注入

上面的实例用的就是set方法注入

· 构造方法注入

FileService.java中将set方法改为构造函数

public class FileService {

private IFileDao ifd;
public FileService(IFileDao ifd) {
	this.ifd = ifd;
}
public void upload() {
	System.out.println(iuda.upload());
}

}
spring-context.xml中将property标签改为constructor-arg标签



        
        
    
· 自动装配

FileService.java中提供set方法

public class FileService {

private IFileDao ifd;
    //自动装配
public void setIfd(IFileDao ifd) {
	this.ifd = ifd;
}

public void upload() {
	System.out.println(ifd.upload());
}

}
spring-context.xml中的beans标签中设置 default-autowire 属性,默认值为default,注释中对default-autowire的值有解释:

    


你可能感兴趣的:(学习资料)