Spring.Net控制翻转、依赖注入、面向切面编程

Spring.Net快速入门:控制翻转、依赖注入、面向切面编程

Spring.Net主要功能:

1.IoC:控制翻转(Inversion of Control)  理解成抽象工厂
翻转控制:就是创建对象的权利由开发人员自己控制New,转到了由容器来控制。

2.DI:依赖注入(Dependency Injection)
依赖注入:就是在通过容器开创建对象的时候,在对象的初始化是可以给一些属性、构造方法的参数等注入默认值(可以是复杂的类型).

3.AOP:面向切面编程  (类似:管道、MVC过滤器等)

一、IoC示例Demo:

1.新建WinForm项目

2.在解决方案下新建文件夹Lib,用来存放Spring.Net用到的dll和文件

Spring.Core.dll、Common.Logging.dll(Spring.Core.dll内部使用到的)、Spring.Core.pdb、Spring.Core.xml

3.首先添加Spring.Net核心dll:Spring.Core.dll 和 Common.Logging.dll引用

4.配置app.config文件:

5.代码调用:

using Spring.Context;
using Spring.Context.Support;
using System;
using System.Windows.Forms;

namespace CZBK.HeiMaOA.SpringNetDemo
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            IApplicationContext context = ContextRegistry.GetContext();//创建容器
            IUserInfoService userInfoService = (IUserInfoService)context.GetObject("UserInfoService");
            MessageBox.Show(userInfoService.ShowMsg());

        }
    }
}

UserInfoService类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CZBK.HeiMaOA.SpringNetDemo
{
    public class UserInfoService : IUserInfoService
    {
        public string ShowMsg()
        {
            return "Hello World";
        }
    }
}

IUserInfoService接口:

namespace CZBK.HeiMaOA.SpringNetDemo
{
    public interface IUserInfoService
    {
        string ShowMsg();
    }
}

6.效果:

7.Demo源码下载:点击下载>>

二、DI:依赖注入示例Demo:

1.添加一个复杂类型:

namespace CZBK.HeiMaOA.SpringNetDemo
{
    public class Person
    {
        public int Age { get; set; }
    }
}

2.修改下之前代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CZBK.HeiMaOA.SpringNetDemo
{
    public class UserInfoService : IUserInfoService
    {
        public string Name { get; set; }
        public Person Person { get; set; }

        public string ShowMsg()
        {
            return "Hello World:" + Name + " 年龄是:" + Person.Age;
        }

    }
}

3.修改App.config配置:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <sectionGroup name="spring">
      <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core"/>
      <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />
    </sectionGroup>
  </configSections>
  <spring>
    <context>
      <resource uri="config://spring/objects"/>
    </context>
    <objects xmlns="http://www.springframework.net">
      <object name="UserInfoService" type="CZBK.HeiMaOA.SpringNetDemo.UserInfoService, CZBK.HeiMaOA.SpringNetDemo">
        <property name="Name" value="张三"/>
        <property name="Person" ref="Person"/>
      </object>

      <object name="Person" type="CZBK.HeiMaOA.SpringNetDemo.Person, CZBK.HeiMaOA.SpringNetDemo">
        <property name="Age" value="20"/>
      </object>

    </objects>
  </spring>
</configuration>

4.运行效果:

5.源码下载:点击下载>>

三、改进:

将app.config中的objects节点配置放到一个单独的xml文件中存放

1.将objects节点剪切到objects.xml文件中:

<?xml version="1.0" encoding="utf-8" ?>

<objects xmlns="http://www.springframework.net">

<object name="UserInfoService" type="CZBK.HeiMaOA.SpringNetDemo.UserInfoService, CZBK.HeiMaOA.SpringNetDemo">
  <property name="Name" value="张三"/>
  <property name="Person" ref="Person"/>
</object>

<object name="Person" type="CZBK.HeiMaOA.SpringNetDemo.Person, CZBK.HeiMaOA.SpringNetDemo">
  <property name="Age" value="20"/>
</object>

</objects>

2.修改app.confgi文件:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <sectionGroup name="spring">
      <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core"/>
      <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />
    </sectionGroup>
  </configSections>
  <spring>
    <context>
      <resource uri="config://spring/objects"/>
      <resource uri="file://objects.xml"/>   <!--指定xml文件位置(这里程序会到bin\debug或release目录下找这个文件,需要修改下xml文件属性,改为始终复制到输出目录)-->
    </context>

    <objects xmlns="http://www.springframework.net">  <!--这个节点需要保留-->    </objects>
  </spring>
</configuration>

3.修改objects.xml文件属性:

4.运行效果:

5.源码下载:点击下载>>

四、在MVC4中使用Spring.Net

1.Web工程添加dll引用:点击下载需要的dll文件>>

2.在Web工程下新建Config文件夹和控制器xml文件:

3.控制器代码:

namespace WebApp.Controllers
{
    public class UserInfoController : Controller
    {
        //
        // GET: /UserInfo/

        //IUserInfoService userInfoService = new UserInfoService();
        //修改成下面的:
       CZBK.HeiMaOA.IBLL.IUserInfoService userInfoService { get; set; }  //这样就完成了Web层与BLL层的解耦

        public ActionResult Index()
        {
            return View();
        }
}

4.controllers.xml文件配置内容:

<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net">

  <object type="WebApp.Controllers.UserInfoController,WebApp" singleton="false" >  <!--指定命名空间、程序集、是否单例-->
    <property name="userInfoService" ref="userInfoService" />  <!--配置UserInfoController中用到的复杂类型userInfoService-->
  </object>

  <object type="CZBK.HeiMaOA.BLL.UserInfoService,CZBK.HeiMaOA.BLL" singleton="false" >  </object>

</objects>

5.修改Web工程中的web.config文件,添加如下节点:

 <configSections>
    <!--Spring.Net配置-->
    <sectionGroup name="spring">
      <section name="context" type="Spring.Context.Support.MvcContextHandler, Spring.Web.Mvc4"/>  <!--指定为MVC4-->
    </sectionGroup>
  </configSections>

  <!--Spring.Net配置-->
  <spring>
    <context>
      <resource uri="file://~/Config/controllers.xml"/>   <!--指定控制器xml文件-->
    </context>
  </spring>
  <!--Spring.Net配置结束-->

6.源码下载:点击下载>>

五、小结:

Spring.Net实质上底层就是用反射去读取配置文件,以后需要变动就不需要修改代码,直接修改配置文件就可以了,方便灵活。

六、Spring.Net中文帮助文档(联网版):

点击下载>>

时间: 2024-08-08 22:04:00

Spring.Net控制翻转、依赖注入、面向切面编程的相关文章

大话依赖倒置?控制反转?依赖注入?面向接口编程

那些年,空气中仿佛还能闻到汉唐盛世的余韵,因此你决不允许自己的脸上有油光,时刻保持活力.然而,你一定曾为这些“高深术语”感到过困扰——依赖倒置•控制反转•依赖注入•面向接口编程.也许时至今日,你仍对它们一知半解.不过就在今天,这一切都将彻底改变!我将带领你以一种全新的高清视角进入奇妙的编程世界,领略涵泳在这些“高深术语”中的活泼泼的地气,以及翩跹于青萍之末的云水禅心. ·内聚 内聚,通俗的来讲,就是自己的东西自己保管,自己的事情自己做. 经典理论告诉我们,程序的两大要素:一个是数据(data),

Spring框架使用(控制反转,依赖注入,面向切面AOP)

参见:http://blog.csdn.net/fei641327936/article/details/52015121 Mybatis: 实现IOC的轻量级的一个Bean的容器 Inversion of control 控制反转:由容器控制程序之间的关系,不是程序代码操作 Depend Inject 依赖注入 Aspect oriented programming 面向切面编程 Spring能帮助我们根据配置文件创建及组装对象之间的依赖关系: Spring面向切面编程能帮助我们无耦合的实现日

那些年搞不懂的高深术语——依赖倒置?控制反转?依赖注入?面向接口编程

那些年,空气中仿佛还能闻到汉唐盛世的余韵,因此你决不允许自己的脸上有油光,时刻保持活力.然而,你一定曾为这些“高深术语”感到过困扰.也许时至今日,你仍对它们一知半解.不过就在今天,这一切都将彻底改变!我将带领你以一种全新的高清视角进入奇妙的编程世界,领略涵泳在这些“高深术语”中的活泼泼的地气,以及翩跹于青萍之末的云水禅心. ·内聚 内聚,通俗的来讲,就是自己的东西自己保管,自己的事情自己做. 经典理论告诉我们,程序的两大要素:一个是数据(data),一个是操作(opration).而 PASCA

Spring(二):AOP(面向切面编程),Spring的JDBC模板类

1 AOP概述 1.2 什么是AOP 在软件业,AOP为Aspect Oriented Programmig的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型.利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率. AOP解决了OOP遇到一些问题,采取横向抽取机制,取代了传统

spring入门(四)【面向切面编程】

开发过程中很多时候会用到日志.事务等操作,这些操作如果要写在业务代码中会相当麻烦,这时就会用到面向切面编程(AOP),AOP作为一种编程思想,和OOP有着不同的侧重点,面向对象侧重于万事万物皆对象,而面向切面编程则侧重于事务的一个方面.在面向切面编程过程中有几个比较重要的概念:切面.切点.连接点.通知, 通知:描述了切面要完成的工作,例如,要向某个方法注入日志功能,这里的日志功能就是通知:通知分为5种:Before.After.After-returning.After-throwing.Aro

[Spring实战系列](16)面向切面编程(AOP)概述

1. 简介 在软件中,有些行为对于大多数应用都是通用的.日志,安全和事务管理的确很重要,但他们是都是应用对象主动参与的行为呢?如果让应用对象只关注自己所针对的业务领域问题,而其他方面的问题由其他应用对象来处理,这样会不会更好? 在软件开发中,分布于应用中多处的功能被称为横切关注点.通常,这些横切关注点从概念上是与应用的业务逻辑相分离的(但是往往直接嵌入到应用的业务逻辑中).将这些横切关注点与业务逻辑相分离是面向切面编程索要解决的. 上图展示了一个被划分为模块的典型应用.每个模块的核心功能都是为特

Spring(三)--AOP【面向切面编程】、通知类型及使用、切入点表达式

1.概念:Aspect Oriented Programming 面向切面编程 在方法的前后添加方法 2.作用:本质上来说是一种简化代码的方式 继承机制 封装方法 动态代理 -- 3.情景举例 ①数学计算器接口[MathCalculator] int add(int i,int j); int sub(int i,int j); int mul(int i, int j); int div(int i,int j); 因为后面的通知方法需要返回值,所以在这里类型声明为 int 类型 public

Spring详解(五)------面向切面编程

.AOP 什么? AOP(Aspect Oriented Programming),通常称为面向切面编程.它利用一种称为"横切"的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为"Aspect",即切面.所谓"切面",简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性. 什么是切面,什么是公共模块,那么我们

Spring基础、IOC(控制反转)、AOP(面向切面编程)、Log4j、注解配置

学习示例代码,包含本篇介绍的Spring常用操作示例和所有所需jar文件下载地址:http://download.csdn.net/detail/daijin888888/9556697 1.什么是Spring,有什么作用 --Spring框架属于一个解决方案框架,可以对其他技术和框架进行整合应用. --*好处是:将程序中的各个组件和框架技术进行解耦,便于日后系统维护,升级和扩展操作. --在SSH中,会将Action,DAO组件都交给Spring框架管理,由Spring框架创建这些对象,建立这

Spring总结六:AOP(面向切面编程)

概述: AOP(Aspect-Oriented Programming,面向切面的编程),它是可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术.它是一种新的方法论,它是对传统OOP编程的一种补充.AOP是希望能够将通用需求功能从不相关的类当中分离出来,能够使得很多类共享一个行为,一旦发生变化,不必修改很多类,而只需要修改这个行为即可. AOP就是将公用功能提取出来,如果以后公用功能的需求发生变化,只需要改动公用的模块的代码即可,多个调用的地方则不需要改