自己实现的依赖注入小玩具

package app10e.util;

import javax.sql.DataSource;

import com.mchange.v2.c3p0.ComboPooledDataSource;
import com.mchange.v2.c3p0.DataSources;

import app10d.action.GetProductsAction;
import app10d.action.SaveProductAction;
import app10d.dao.ProductDAO;
import app10d.dao.ProductDAOImpl;
import app10d.validator.ProductValidator;

public class DependencyInjector {
  private DataSource dataSource;

  public void start()
  {
      //使用C3P0连接池
      ComboPooledDataSource cpds=new ComboPooledDataSource();
      try
      {
          cpds.setDriverClass("com.mysql.jdbc.Driver");
      }
      catch(Exception e)
      {
          e.printStackTrace();
      }

      cpds.setJdbcUrl("jdbc:mysql://localhost:3306/test");
      cpds.setUser("root");
      cpds.setPassword("123");

      cpds.setMinPoolSize(5);
      cpds.setAcquireIncrement(5);
      cpds.setMaxPoolSize(20);
      dataSource=cpds;
  }

  public void shutDown()
  {
      try
      {
          DataSources.destroy(dataSource);
      }
      catch(Exception e)
      {
          e.printStackTrace();
      }
  }

  public Object getObject(Class type)
  {
      if(type==ProductValidator.class)
      {
          return new ProductValidator();
      }
      else if(type==ProductDAO.class)
      {
        return createProductDAO();
      }
      else if(type==GetProductsAction.class)
      {
          return  createGetProductAction();
      }
      else if(type==SaveProductAction.class)
      {
          return createSaveProductAction();
      }
      return null;
  }

      private GetProductsAction createGetProductAction()
      {
          GetProductsAction getProductsAction=new GetProductsAction();
          getProductsAction.setProductDAO(createProductDAO());
          return getProductsAction;
      }

      private SaveProductAction createSaveProductAction()
      {
          SaveProductAction saveProductAction=new SaveProductAction();
          saveProductAction.setProductDAO(createProductDAO());
          return saveProductAction;
      }

      private ProductDAO createProductDAO()
      {
          ProductDAO productDAO=new ProductDAOImpl();
          productDAO.setDataSource(dataSource);
          return productDAO;

      }

  }
时间: 2025-01-04 19:18:45

自己实现的依赖注入小玩具的相关文章

浅析依赖注入框架Autofac的使用

Autofac是一款IOC框架,比起Spring.NET,Unity,Castle等等框架,它很轻量级且性能也很高,下面小编给大家介绍下依赖注入框架Autofac的使用. 下面通过代码给大家分享下依赖注入框架Autofac的使用,具体如下所示:  Autofac是一款IOC框架,比较于其他的IOC框架,如Spring.NET,Unity,Castle等等所包含的,它很轻量级性能上也是很高的. 1)解压它的压缩包,主要看到Autofac.dll,Autofac.Configuration.dll,

ASP.NET Web API中的依赖注入

小分享:我有几张阿里云优惠券,用券购买或者升级阿里云相应产品最多可以优惠五折!领券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03 什么是依赖注入 依赖,就是一个对象需要的另一个对象,比如说,这是我们通常定义的一个用来处理数据访问的存储,让我们用一个例子来解释,首先,定义一个领域模型如下: namespace Pattern.DI.MVC.Models{ public cl

spring四种依赖注入方式

平常的java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提出了依赖注入的思想,即依赖类不由程序员实例化,而是通过spring容器帮我们new指定实例并且将实例注入到需要该对象的类中.依赖注入的另一种说法是"控制反转",通俗的理解是:平常我们new一个实例,这个实例的控制权是我们程序员,而控制反转是指new实例工作不由我们程序员来做而是交给spring容器来做. spring有多种

AngularJS(十):依赖注入

本文也同步发表在我的公众号"我的天空" 依赖注入 依赖注入不是AngularJS独有的概念,而是现代软件开发与架构的范畴,但是在AngularJS中"依赖注入"是其核心思想之一,所以我们专门来学习一下. 观察除"AngularJS路由"这节之前的控制器代码,发现我们把所有的业务逻辑都写在控制器代码部分,当代码规模小还好处理,随着代码规模扩大,这样的做法很快就会使代码变的难以维护,控制器将变成一个代码垃圾场,我们要做的所有东西都会倒在里面,它们会变

Asp.Net Core 项目实战之权限管理系统(4) 依赖注入、仓储、服务的多项目分层实现

0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之权限管理系统(2) 功能及实体设计 3 Asp.Net Core 项目实战之权限管理系统(3) 通过EntityFramework Core使用PostgreSQL 4 Asp.Net Core 项目实战之权限管理系统(4) 依赖注入.仓储.服务的多项目分层实现 5 Asp.Net Core 项目实

spring 四种依赖注入方式以及注解注入方式

平常的java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提出了依赖注入的思想,即依赖类不由程序员实例化, 而是通过spring容器帮我们new指定实例并且将实例注入到需要该对象的类中.依赖注入的另一种说法是“控制反转”,通俗的理解是:平常我们new一个实例,这个实例的控制权是我们程序员, 而控制反转是指new实例工作不由我们程序员来做而是交给spring容器来做. spring有多种依赖注

ASP.NET Web API实践系列02,在MVC4下的一个实例, 包含EF Code First,依赖注入, Bootstrap等

本篇体验在MVC4下,实现一个对Book信息的管理,包括增删查等,用到了EF Code First, 使用Unity进行依赖注入,前端使用Bootstrap美化.先上最终效果: →创建一个MVC4项目,选择Web API模版. →在Models文件夹创建一个Book.cs类. namespace MyMvcAndWebApi.Models { public class Book { public int Id { get; set; } public string Name { get; set

讲解依赖注入的好文-目前唯一

以前对于依赖注入概念很模糊,甚至已经用到了但是我却不知道它就是依赖注入.直到看到这篇文章. 如果看了之后还是很模糊,可以进入页终链接,找到博主上一篇文章的有趣小例子. 2.2 正式定义依赖注入 下面,用稍微正式一点的语言,定义依赖注入产生的背景缘由和依赖注入的含义.在读的过程中,读者可以结合上面的例子进行理解. 依赖注入产生的背景: 随着面向对象分析与设计的发展,一个良好的设计,核心原则之一就是将变化隔离,使得变化部分发生变化时,不变部分不受影响(这也是OCP的目的).为了做到这一点,要利用面向

浅谈依赖注入

最近几天在看一本名为Dependency Injection in .NET 的书,主要讲了什么是依赖注入,使用依赖注入的优点,以及.NET平台上依赖注入的各种框架和用法.在这本书的开头,讲述了软件工程中的一个重要的理念就是关注分离(Separation of concern, SoC).依赖注入不是目的,它是一系列工具和手段,最终的目的是帮助我们开发出松散耦合(loose coupled).可维护.可测试的代码和程序.这条原则的做法是大家熟知的面向接口,或者说是面向抽象编程. 关于什么是依赖注