zoukankan      html  css  js  c++  java
  • Spring IOC 的实现

    软件152段聪

    IOC

    IoC 容器:最主要是完成了完成对象的创建和依赖的管理注入等等。

    先从我们自己设计这样一个视角来考虑:

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

    对象和对象关系怎么表示?

    可以用 xml , properties 文件等语义化配置文件表示。

    描述对象关系的文件存放在哪里?

    可能是 classpath , filesystem ,或者是 URL 网络资源, servletContext 等。

    回到正题,有了配置文件,还需要对配置文件解析。

    不同的配置文件对对象的描述不一样,如标准的,自定义声明式的,如何统一? 在内部需要有一个统一的关于对象的定义,所有外部的描述都必须转化成统一的描述定义。

    如何对不同的配置文件进行解析?需要对不同的配置文件语法,采用不同的解析器

     IOC和DI

    DI—Dependency Injection,即“依赖注入”:组件之间依赖关系由容器在运行期决定,形象的说,即由容器动态的将某个依赖关系注入到组件之中。依赖注入的目的并非为软件系统带来更多功能,而是为了提升组件重用的频率,并为系统搭建一个灵活、可扩展的平台。通过依赖注入机制,我们只需要通过简单的配置,而无需任何代码就可指定目标需要的资源,完成自身的业务逻辑,而不需要关心具体的资源来自何处,由谁实现。

    从注入方法上看,主要可以划分为三种类型:构造函数注入、属性注入和接口注入。

    使用XML配置的方式实现IOC

    IBookDao接口如下:

    1 package com.cqvie.onemethod.xml;
    2 
    3 public interface IBookDao {
    4 
    5     public void storeBook(String bookName);    //到货情况
    6     public void addBook(String bookName);    //添加图书
    7 }

    BookDao实现类如下:

     1 package com.cqvie.onemethod.xml;
     2 
     3 public class BookDao implements IBookDao {
     4 
     5     @Override
     6     public void storeBook(String bookName) {
     7         System.out.println("《" + bookName + "》" + "已到货。");
     8     }
     9     
    10     @Override
    11     public void addBook(String bookName) {
    12         System.out.println("添加图书 《" + bookName + "》 成功!");
    13     }
    14 
    15 }

    业务类IBookService接口如下:

    1 package com.cqvie.onemethod.xml;
    2 
    3 public interface IBookService {
    4 
    5     public void addBook(String bookName);
    6 }

    业务类实现BookService如下:

     1 package com.cqvie.onemethod.xml;
     2 
     3 public class BookService implements IBookService {
     4 
     5     private BookDao bookDao;
     6     
     7     public void setBookDao(BookDao bookDao) {
     8         this.bookDao = bookDao;
     9     }
    10 
    11     @Override
    12     public void addBook(String bookName) {
    13         bookDao.storeBook(bookName);
    14         System.out.println("准备上架······");
    15         bookDao.addBook(bookName);
    16     }
    17 
    18 }

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

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4      xmlns:context="http://www.springframework.org/schema/context"
     5      xsi:schemaLocation="http://www.springframework.org/schema/beans
     6          http://www.springframework.org/schema/beans/spring-beans.xsd
     7          http://www.springframework.org/schema/context
     8          http://www.springframework.org/schema/context/spring-context.xsd">
     9          
    10     <!-- 
    11         name="bookDao" 对应类 BookService 的 private BookDao bookDao;
    12      -->
    13     <bean id="bookDao" class="com.cqvie.onemethod.xml.BookDao"></bean>
    14     <bean id="bookService" class="com.cqvie.onemethod.xml.BookService">
    15         <property name="bookDao" ref="bookDao"></property>
    16     </bean>
    17          
    18 </beans>

    测试类Test如下:

     1 package com.cqvie.onemethod.xml;
     2 
     3 import org.springframework.context.ApplicationContext;
     4 import org.springframework.context.support.ClassPathXmlApplicationContext;
     5 
     6 public class Test {
     7 
     8     public static void main(String[] args) {
     9         @SuppressWarnings("resource")
    10         ApplicationContext cxt = new ClassPathXmlApplicationContext("applicationContext01.xml");
    11         BookService bookService = (BookService)cxt.getBean("bookService");
    12         bookService.addBook("面向对象程序设计 第一版");
    13     }
    14     
    15 }

    运行结果:

  • 相关阅读:
    pgspider sqlite mysql docker 镜像
    pgspider docker 镜像
    pgspider基于pg 的高性能数据可视化sql 集群引擎
    diesel rust orm 框架试用
    golang 条件编译
    Performance Profiling Zeebe
    bazel 学习一 简单java 项目运行
    一个好用node http keeplive agnet
    gox 简单灵活的golang 跨平台编译工具
    mailhog 作为smtp server mock工具
  • 原文地址:https://www.cnblogs.com/DCJAMES/p/7092737.html
Copyright © 2011-2022 走看看