Spring实现IoC的多种方式小结

论坛 期权论坛 脚本     
niminba   2021-5-23 02:55   1527   0

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

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

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

一、使用XML配置的方式实现IOC

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

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如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>

 <groupId>com.zhangguo</groupId>
 <artifactId>Spring051</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 <packaging>jar</packaging>

 <name>Spring051</name>
 <url>http://maven.apache.org</url>

<properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  <spring.version>4.3.0.RELEASE</spring.version>
 </properties>
 <dependencies>
  <dependency>
   <groupId>junit</groupId>
   <artifactId>junit</artifactId>
   <scope>test</scope>
   <version>4.10</version>
  </dependency>
  <dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-context</artifactId>
   <version>${spring.version}</version>
  </dependency>
  <dependency>
   <groupId>org.aspectj</groupId>
   <artifactId>aspectjweaver</artifactId>
   <version>1.8.9</version>
  </dependency>
  <dependency>
   <groupId>cglib</groupId>
   <artifactId>cglib</artifactId>
   <version>3.2.4</version>
  </dependency>
 </dependencies>
</project>

业务类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如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 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">
 <bean id="bookdao" class="com.zhangguo.Spring051.ioc01.BookDAO"></bean>
</beans>

测试类Test如下:

package com.zhangguo.Spring051.ioc01;

public class Test {
 @org.junit.Test
 public void testStoreBook()
 {
  BookService bookservice=new BookService();
  bookservice.storeBook("《Spring MVC权威指南 第一版》");
 }
}
1U"C*|4(4(4(
nO7jnO7jе{4(	nOrZWJ3Σ"rZWC>?QС5Q!=99=QQ%=9}QeA3ZWB7nO^"j4(驅4)顅M4)
4(4)
Р4)UUM"oUMM"oMR4(4(4("w/2[j&7r'4(驅4)顅M4)й
4)йхх

4(4)QйQ4(M	4(7SR/k
"w/2[4(
Ёх

С
	M	M	)M5Yv26\no&#,UUUU4(4(4(j"w/2[kz/3"Ck
"w/2[^bBn3j	F4(S#bBkjr
b;jZU;rZkUΣ
РnO>4(zs4(顽ō協ń4(73ΣfZ7rgjZv{>[S{'.[B#Wj7bj7>GB;4(屔/4(4(v輽酤мM%
}х}%
}4(4(brZj3ro疒j惚r'&*rokkR2
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:1060120
帖子:212021
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP