依赖注入:属性和构造函数的注入

一个简单的Demo:

IUserInfoDal接口:

  1. public interface IUserInfoDal
  2. {
  3. void Show();
  4. string Name { get; set; }
  5. }
  6. }

UserInfoDal继承IUserInfoDal:

  1. public class UserInfoDal:IUserInfoDal
  2. {
  3.  
  4. public void Show()
  5. {
  6. Console.WriteLine("hellow world");
  7. }
  8. }

建立SpringNetDemo的控制台应用程序:

  1. static void Main(string[] args)
  2. {
  3. //IUserInfoDal userInfoDal = new UserInfoDal();
  4. //userInfoDal.Show();
  5.  
  6. //容器来 创建UserInfoDal实列
  7.  
  8. //第一步 初始化容器
  9. IApplicationContext ctx = ContextRegistry.GetContext();
  10.  
  11. IUserInfoDal dal = ctx.GetObject("UserInfoDal") as IUserInfoDal;
  12. dal.Show();
  13.  
  14. Console.ReadKey();
  15. }

在App中进行配置:(<configuration> 节点中

  1. <!--sectionGroup 中的name要与 下面的标签名字一样 spring-->
  2. <configSections>
  3. <sectionGroup name="spring">
  4. <!--spring 分成两个子块-->
  5. <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core"/>
  6. <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />
  7. </sectionGroup>
  8. </configSections>

对sectionGroup的name进行配置:

  1. <spring>
  2. <!--Spring.Net对象容器的配置-->
  3. <context>
  4. <!--容器里面的所有的对象在哪里配置的?-->
  5.  
  6. <!--使用xml文件的配置-->
  7. <!--<resource uri="file://Dals.xml"/>-->
  8. <!--使用程序集的配置-->
  9. <!--<resource uri="assembly://SpringNetDemo/SpringNetDemo/Dals.xml"/>-->
  10.  
  11. <resource uri="config://spring/objects"/>
  12.  
  13. </context>
  14. <!--objects:配置的容器的里面的对象的-->
  15. <objects xmlns="http://www.springframework.net">
  16. <description>An example that demonstrates simple IoC features.</description>
  17.  
  18. <!--名字为类名-->
  19. <!--<object name="UserInfoDal" type="SpringNetDemo.UserInfoDal, SpringNetDemo">-->
  20. <object name="UserInfoDal" type="SpringNetDemo.EFUserInfoDal, SpringNetDemo">
    <!--属性的配置-->
  21. <property name="Name" value="Spring牛"/>
  22. </object>
  23. <!-- 把UserInfoDal属性注入到UserInfoServce-->
  24. <!--<object name="UserInfoServce" type="SpringNetDemo.UserInfoServce, SpringNetDemo">
  25. <property name="UserInfoDal" ref="UserInfoDal"/>
  26. </object>-->
  27.  
  28. </objects>
  29. </spring>

XMl文件中的配置:

  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <objects xmlns="http://www.springframework.net"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://www.springframework.net
  5. http://www.springframework.net/xsd/spring-objects.xsd">
  6.  
  7. <object name="UserInfoDal1" type="SpringNetDemo.UserInfoDal, SpringNetDemo">
  8. <!--<constructor-arg index="0" value="movies.txt"/>-->
  9. </object>
  10.  
  11. </objects>

Spring.Net与项目结合:

1.在Web.Config中configuration  节点中进行配置

  1. <configSections>
  2. <!-- Entity Framework 块配置-->
  3. <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  4.  
  5. <!--Spring.Net块配置-->
  6. <sectionGroup name="spring">
  7. <section name="context" type="Spring.Context.Support.MvcContextHandler, Spring.Web.Mvc4"/>
  8. </sectionGroup>
  9. </configSections>
  10.  
  11. <!--Spring.Net 的容器的配置节点-->
  12. <spring>
  13. <context>
  14. <resource uri="file://~/Config/services.xml"/>
  15. <resource uri="file://~/Config/controllers.xml"/>
  16. </context>
  17. </spring>

2.在Global.asax中改成Spring.Web

  1. public class MvcApplication :Spring.Web.Mvc.SpringMvcApplication

3.在packages中引入dll文件

4.在Portal中新建文件夹Config

1.controllers.xml

  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <objects xmlns="http://www.springframework.net">
  3.  
  4. <!--前面是类的全名称 后面是类的程序集 singleton="false" 每次都是创建一个心对象 不是共用一个对象 -->
  5. <object type="SunOA.UI.Portal.Controllers.UserInfoController,SunOA.UI.Portal" singleton="false" >
  6. <!--属性的注入-->
  7. <property name="UserInfoService" ref="UserInfoService" />
  8. </object>
  9. </objects>

2.services.xml

  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <objects xmlns="http://www.springframework.net">
  3.  
  4. <object name="UserInfoService" type="SunOA.BLL.UserInfoService, SunOA.BLL" singleton="false" >
  5. </object>
  6. <object name="OrderInfoService" type="SunOA.BLL.OrderInfoService, SunOA.BLL" singleton="false" >
  7. </object>
  8.  
  9. </objects>

3.控制器。

  1. public IUserInfoService UserInfoService { get; set; }
  2. public ActionResult Index()
  3. {
  4. ViewData.Model = UserInfoService.GetEntites(u => true);
  5. return View();
  6. }

BLL层的代码(继承于接口):
  

  1. public class OrderInfoService : BaseService<OrderInfo>, IOrderInfoService
  1. public interface IUserInfoService : IBaseService<UserInfo>

IBLL层的代码:

  1. public interface IOrderInfoService : IBaseService<OrderInfo>

Spring.Net程序的作用:

1.程序加载的时候,第一次请求过来的时候,初始化容器对象。

2.加载XML文件放到内存里面。

3.根据容器里面的XML配置创建对象

4.第二次和以后请求过的时候重复 第三个步骤

OA项目Ioc DI(二)的更多相关文章

  1. OA项目实战(二) 开发准备

    上次的博文OA系统实践(一) 概述中,我们已经了解了OA的相关概念.从本次博文开始,我们做一个简单的OA实例. 在OA开发之前,有几个工作们需要提前做.一个是对需求进行分析,另一个是对开发环境进行选择 ...

  2. 第一周博客之二---OA项目环境搭建及开发包部署

    OA项目环境搭建 一个项目想要能够在开发人员打包好项目包之后进行测试,就必须进行项目测试环境的搭建,要根据开发工程师的开发环境采用不同的测试环境,以下只是浅谈下Java项目OA(办公自动化平台)的环境 ...

  3. Spring系列(二):Spring IoC/DI的理解

    这几天重新学习了一下Spring,在网上找了相关的ppt来看,当看到Spring IoC这一章节的时候,先大致浏览了一下内容,有将近50页的内容,内心窃喜~QAQ~,看完这些内容能够对IoC有更深层次 ...

  4. Spring 学习教程(二): IOC/DI+AOP

    1. IOC / DI Spring是一个基于IOC和AOP的结构J2EE系统的框架 IOC 反转控制 是Spring的基础,Inversion Of Control 简单说就是创建对象由以前的程序员 ...

  5. Spring框架-IOC/DI详细学习

    一.IOC/DI概念 参考博客:https://www.cnblogs.com/xdp-gacl/p/4249939.html IOC(inversion of control, 控制反转)是一种设计 ...

  6. AutoFac IoC DI 依赖注入

    AutoFac IoC DI 依赖注入 记录点点滴滴知识,为了更好的服务后来者! 一.为什么使用AutoFac? 之前介绍了Unity和Ninject两个IOC容器,但是发现园子里用AutoFac的貌 ...

  7. SSH项目搭建(二)

    本章讲解SSH项目需要到哪些jar包,及各个jar包的作用 一.struts2 1.下载好struts2,struts2文件夹>>>>apps>>>>a ...

  8. 【Java EE 学习 67 上】【OA项目练习】【JBPM工作流的使用】

    OA项目中有极大可能性使用到JBPM框架解决流程控制问题,比如请假流程.报销流程等等. JBPM:JBoss Business Process Management,翻译过来就是业务流程管理.实际上就 ...

  9. 关于依赖注入IOC/DI的感想

    之前一直不明白依赖注入有什么好处,甚至觉得它是鸡肋,现在想想,当时真是可笑. 这个想法正如同说接口是没有用处一样. 当整个项目非常庞大,各个方法之间的调用非常复杂,那么,可以想象一下,假设说没有任何的 ...

随机推荐

  1. 利用solr实现商品的搜索功能

      后期补充: 为什么要用solr服务,为什么要用luncence? 问题提出:当我们访问购物网站的时候,我们可以根据我们随意所想的内容输入关键字就可以查询出相关的内容,这是怎么做到呢?这些随意的数据 ...

  2. An internal error occurred during: "Initializing Java Tooling". Eclipse启动发生的错误及解决办法

    1.关闭Eclipse.有时候不关闭eclipse 删除东西会引起其他莫名的错误. 2.删除 当前工作目录文件夹下的 /.metadata/.plugins/org.eclipse.core.reso ...

  3. 实验三:将读取数据功能从Repository中分离

    先理解下面这段话之后再开始做实验 经过实验二的改造之后,我们代码有一点结构的概念了: Listing.aspx:向Repository要Products,然后将得到的Products在页面中显示出来. ...

  4. NATS_02:NATS消息通信模型

    消息通信模型 NATS的消息通信是这样的:应用程序的数据被编码为一条消息,并通过发布者发送出去:订阅者接收到消息,进行解码,再处理.订阅者处理NATS消息可以是同步的或异步的. * 异步处理  异步处 ...

  5. POJ No 3259 Wormholes Bellman-Ford 判断是否存在负图

    题目:http://poj.org/problem?id=3259 题意:主要就是构造图, 然后判断,是否存在负图,可以回到原点 /* 2 3 3 1 //N, M, W 1 2 2 1 3 4 2 ...

  6. [洛谷P3643] [APIO2016]划艇

    洛谷题目链接:[APIO2016]划艇 题目描述 在首尔城中,汉江横贯东西.在汉江的北岸,从西向东星星点点地分布着 \(N\) 个划艇学校,编号依次为 \(1\) 到 \(N\).每个学校都拥有若干艘 ...

  7. android studio run得时候 选择开启对话框

    一个项目run 调试得时候,在Android studio3.0默认得设置是运行在上一个device上,我们通过改变设置,废话不多说,上图: 然后点击这个edit config 在miscellane ...

  8. spring框架学习(五)整合JDBCTemplate

    1.导包 2.JdbcTemplate package cn.cnki.JdbcTemplate; import java.util.List; import org.junit.Test; impo ...

  9. 微信小程序开发教程(七)逻辑层——.js详解

    逻辑层,是事务逻辑处理的地方.对于小程序而言,逻辑层就是.js脚本文件的集合.逻辑层将数据进行处理后发送给视图层,同时接收视图层的事件反馈. 微信小程序开发框架的逻辑层是由JavaScript编写.在 ...

  10. linux配置网路 设定主机名 ssh bash命令 通配符

    临时配置网络(ip,网关,dns) #ifconfig ens33 192.168.185/24 #ens33网卡名称.192.168.185/24是要配置的ip地址/子网掩码 #vim /etc/r ...