spring中实现ioc的方法详解

编程实验

72人已加入

描述

所谓控制反转,就是把原先我们代码里面需要实现的对象创建、依赖的代码,反转给容器来帮忙实现。那么必然的我们需要创建一个容器,同时需要一种描述来让容器知道需要创建的对象与对象的关系。这个描述最具体表现就是我们可配置的文件。

IoC基础

控制反转IoC(Inversion of Control),是一种设计思想,DI(依赖注入)是实现IoC的一种方法,也有人认为DI只是IoC的另一种说法。没有IoC的程序中我们使用面向对象编程对象的创建与对象间的依赖关系完全硬编码在程序中,对象的创建由程序自己控制,控制反转后将对象的创建转移给第三方,个人认为所谓控制反转就是:获得依赖对象的方式反转了。

spring

IoC是Spring框架的核心内容,使用多种方式完美的实现了IoC,可以使用XML配置,也可以使用注解,新版本的Spring也可以零配置实现IoC。Spring容器在初始化时先读取配置文件,根据配置文件或元数据创建与组织对象存入容器中,程序使用时再从Ioc容器中取出需要的对象。

spring

采用XML方式配置Bean的时候,Bean的定义信息是和实现分离的,而采用注解的方式可以把两者合为一体,Bean的定义信息直接以注解的形式定义在实现类中,从而达到了零配置的目的。

使用XML配置的方式实现IOC

假设项目中需要完成对图书的数据访问服务,我们定义好了IBookDAO接口与BookDAO实现类

创建maven项目:

spring

IBookDAO接口如下:

package com.zhangguo.Spring051.ioc01;

/**

* 图书数据访问接口

*/

public interface IBookDAO {

/**

* 添加图书

*/

public String addBook(String bookname);

}

BookDAO实现类如下:

package com.zhangguo.Spring051.ioc01;

/**

* 图书数据访问实现类

*/

public class BookDAO implements IBookDAO {

public String addBook(String bookname) {

return “添加图书”+bookname+“成功!”;

}

}

Maven项目的pom.xml如下:

xsi:schemaLocation=“http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”>

4.0.0< P modelVersion><>

com.zhangguo< P groupId><>

Spring051< P artifactId><>

0.0.1-SNAPSHOT< P version><>

jar< P packaging><>

Spring051< P name><>

HTTP: P url>< maven.apache.org<>

< P>

UTF-8< P project.build.sourceEncoding><>

4.3.0.RELEASE< P spring.version><>

<>

< P>

< P>

junit< P groupId><>

junit< P artifactId><>

test< P scope><>

4.10< P version><>

<>

< P>

org.springframework< P groupId><>

spring-context< P artifactId><>

${spring.version}< P version><>

<>

< P>

org.aspectj< P groupId><>

aspectjweaver< P artifactId><>

1.8.9< P version><>

<>

< P>

cglib< P groupId><>

cglib< P artifactId><>

3.2.4< P version><>

<>

<>

业务类BookService如下:

package com.zhangguo.Spring051.ioc01;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

/**

* 图书业务类

*/

public class BookService {

IBookDAO bookDAO;

public BookService() {

//容器

ApplicationContext ctx=new ClassPathXmlApplicationContext(“IOCBeans01.xml”);

//从容器中获得id为bookdao的bean

bookDAO=(IBookDAO)ctx.getBean(“bookdao”);

}

public void storeBook(String bookname){

System.out.println(“图书上货”);

String result=bookDAO.addBook(bookname);

System.out.println(result);

}

}

容器的配置文件IOCBeans01.xml如下:

spring

<?xml version=“1.0” encoding=“UTF-8”?>

xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”

xmlns:p=“http://www.springframework.org/schema/p”

xsi:schemaLocation=“http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd”>

测试类Test如下:

package com.zhangguo.Spring051.ioc01;

public class Test {

@org.junit.Test

public void testStoreBook()

{

BookService bookservice=new BookService();

bookservice.storeBook(“”);< MVC权威指南>

}

}

运行结果:

3.2.4<>cglib<>cglib<>1.8.9<>aspectjweaver<>org.aspectj<>${spring.version}<>spring-context<>org.springframework<>4.10<>test<>junit<>junit<>4.3.0.RELEASE<>UTF-8<>Spring051<>jar<>0.0.1-SNAPSHOT<>Spring051<>com.zhangguo<>4.0.0<>

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分