1.Spring.Net是一个开源的应用程序框架,可以简化开发
主要功能
(1)实现控制反转(IOC/DI),也就是不要直接new,依赖于接口
(2)面向切面编程(AOP),就是向程序中利用委托注册事件
简单来说:Spring.Net是一个轻量级的控制反转和面向切面的容器框架。

2.Spring.Net提供的dll说明
Spring.Core.dll:包含Spring.Net框架基于的核心工具类,Spring.Net其他组件都要使用这里的类,是其他组件的基本核心
Spring.Aop.dll:Spring.Net的AOP框架
Spring.Web.dll:提供了对Web的支持
Spring.Web.Mvc3.dll:Spring.Net自己的Web框架
Common.Logging.dll:Spring.Net日志功能

3.Spring.Net的两个重要的容器类
IObjectFactory通常称为Object容器
IApplicationContext通常称为应用上下文。它的功能要多于IObjectFactory,如它可以加载外部的资源文件、可以自动进行AOP切面、可以识别自动代理的类等

区别:
IObjectFactory只有当需要获取一个对象时才会去创建。
IApplicationContext在启动时一次初始化所有的实例,可以自动识别代理类、可以识别自动加载等(推荐使用)

4.理解IOC和DI
IOC(Inversion of Control,控制反转),控制反转就是应用程序本身不负责依赖对象的创建及维护,依赖对象的创建和维护是由外部容器负责。这样控制权就由应用程序本身转移到了外部容器,控制权的转移就是所谓的反转。
DI(Dependency Injection,依赖注入)就是在运行期由外部容器动态的将依赖对象注入到组件中或是在运行期,由外部容器决定具体执行的类。

5.通过属性注入
注入值类型属性
给Object注入集合
给Object注入其他Object

6.通过构造函数注入
7.通过配置文件中实例的对象默认是单例的,可以进行设置singleton="false"
8.自动装配autowire="byName" autowire="byType"
根据属性名称去查找object中name相同的对象
根据类型去查找object中类型相同的对象

核心代码:

Web.config

<?xml version="1.0" encoding="utf-8"?>
<!--
有关如何配置 ASP.NET 应用程序的详细信息,请访问
http://go.microsoft.com/fwlink/?LinkId=169433
-->
<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="assembly://SpringDemo/SpringDemo/Objects.xml" /><!--使用外部的资源文件,程序集命名空间/程序集名称/配置文件名称-->
<!--<resource uri="config://spring/objects"/>-->
<!--使用配置文件中的配置-->
</context>
<!--<objects> </objects>-->
</spring>
<system.web>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />
</system.web>
</configuration>

Objects.xml

<?xml version="1.0" encoding="utf-8"?>
<objects xmlns="http://www.springframework.net">
<object id="XiaoLei" type="SpringDemo.Models.Student,SpringDemo">
<property name="Name" value="通过配置文件属性注入的小雷"></property>
<property name="Pet">
<object type="SpringDemo.Models.Dog,SpringDemo">
<property name="Name" value="Ruiky" />
</object>
</property>
<!--属性对象注入-->
<property name="Names">
<list element-type="string">
<value>张三</value>
<value>张三1</value>
<value>张三2</value>
</list>
</property>
<property name="GirlFriends">
<dictionary key-type="string" value-type="int">
<entry key="刘亦菲" value="18"/>
<entry key="舒畅" value="20"/>
</dictionary>
</property>
<property name="Hobits">
<set >
<value>女</value>
<value>钱</value>
<value>车</value>
<object type="SpringDemo.Models.Dog,SpringDemo">
<property name="Name" value="Ruiky" />
</object>
</set>
</property>
</object> <!--构造函数注入-->
<object id="car1" type="SpringDemo.Models.Car,SpringDemo" singleton="false"><!--singleton单例,默认是true-->
<constructor-arg value="宝马"/>
<constructor-arg value="10000000"/>
<property ref="dog1" name="MyDog"/><!--使用ref引用dog1对象的实例-->
</object> <object id="car2" type="SpringDemo.Models.Car,SpringDemo" singleton="false" autowire="byName">
<!--singleton单例,默认是true,autowire根据名称自动装配,自动查找配置文件中object中name=属性名称的对象自动实例化-->
<!--autowire也可以为byType,根据属性的类型来从object中查找,但是如果查找的类型多于一个,就会出错-->
<constructor-arg value="宝马"/>
<constructor-arg value="10000000"/>
<!--<property ref="dog1" name="MyDog"/>
--><!--使用ref引用dog1对象的实例-->
</object> <object id="dog1" name="MyDog" type="SpringDemo.Models.Dog,SpringDemo">
<property name="Name" value="dog1"/>
</object>
</objects>

WebForm1.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Spring.Context;
using Spring.Objects.Factory;
using SpringDemo.Models; namespace SpringDemo
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//IObjectFactory factory = Spring.Context.Support.ContextRegistry.GetContext();
IApplicationContext context = Spring.Context.Support.ContextRegistry.GetContext();
IPerson stu1 = context.GetObject("XiaoLei") as Student;
Response.Write(stu1.Name+"</br>");//通过配置文件属性注入的名称
Response.Write(stu1.Pet.Name + "</br>");//通过配置文件属性对象注入
foreach (string name in stu1.Names)
{
Response.Write(name + "</br>"); //通过配置文件属性集合注入
} foreach (KeyValuePair<string, int> name in stu1.GirlFriends)
{
Response.Write(name.Key + "-----"+name.Value+"</br>"); //通过配置文件属性集合注入
} foreach (object obj in stu1.Hobits)
{
Response.Write(obj+"</br>"); //通过配置文件属性集合注入
} //构造函数注入
Car car = context.GetObject("car1") as Car;
Response.Write(car.Name+" ----"+car.Price+"<br/>");
//默认从配置文件中取出来的实例是单例的,可以进行设置 singleton="false"
Car car1 = context.GetObject("car1") as Car;
Response.Write((car==car1)+ "<br/>"); //引用配置文件中的对象
Response.Write(car1.MyDog.Name+"<br/>"); Car car2 = context.GetObject("car2") as Car;
Response.Write(car2.MyDog.Name + "<br/>"); }
}
}

源码链接:http://yunpan.cn/Q7sbQIiIRDZtV (提取码:b68c)

Spring.Net学习之简单的知识点(一)的更多相关文章

  1. spring再学习之简单测试

    一.spring是怎么工作的那,通过一个类装载进容器进行描述: 首先创建一个类user: package cn.itcast.bean; public class User { public User ...

  2. git bash学习3 -简单杂乱知识点记录

    branch 新建分支 git init git add git commit 先新建一个仓库以及master 然后新建分支 git branch BranchName 然后切换分支 git chec ...

  3. Spring MVC 学习笔记10 —— 实现简单的用户管理(4.3)用户登录显示全局异常信息

    </pre>Spring MVC 学习笔记10 -- 实现简单的用户管理(4.3)用户登录--显示全局异常信息<p></p><p></p>& ...

  4. Spring MVC 学习笔记9 —— 实现简单的用户管理(4)用户登录显示局部异常信息

    Spring MVC 学习笔记9 -- 实现简单的用户管理(4.2)用户登录--显示局部异常信息 第二部分:显示局部异常信息,而不是500错误页 1. 写一个方法,把UserException传进来. ...

  5. Spring MVC 学习笔记8 —— 实现简单的用户管理(4)用户登录

    Spring MVC 学习笔记8 -- 实现简单的用户管理(4)用户登录 增删改查,login 1. login.jsp,写在外面,及跟WEB-INF同一级目录,如:ls Webcontent; &g ...

  6. Spring MVC 学习总结(四)——视图与综合示例

    一.表单标签库 1.1.简介 从Spring2.0起就提供了一组全面的自动数据绑定标签来处理表单元素.生成的标签兼容HTML 4.01与XHTML 1.0.表单标签库中包含了可以用在JSP页面中渲染H ...

  7. 15 个优秀开源的 Spring Boot 学习项目,一网打尽!

    Spring Boot 算是目前 Java 领域最火的技术栈了,松哥年初出版的 <Spring Boot + Vue 全栈开发实战>迄今为止已经加印了 8 次,Spring Boot 的受 ...

  8. 15 个优秀开源的 Spring Boot 学习项目

    Spring Boot 算是目前 Java 领域最火的技术栈了,松哥年初出版的 <Spring Boot + Vue 全栈开发实战>迄今为止已经加印了 8 次,Spring Boot 的受 ...

  9. Spring Boot 学习方法论-如何正确的入门 Spring Boot

    想要入门 Spring Boot,那么什么样的教程是符合初学者学习的(没有太多的Java基础但有一些程序基础或者软件编程知识). 这恰好能够勾出很多问题,比如是文章图文教程适合还是视频教程适合零基础初 ...

随机推荐

  1. Android坐标系统

     1 背景 去年有很多人私信告诉我让说说自定义控件,其实通观网络上的很多博客都在讲各种自定义控件,但是大多数都是授之以鱼,却很少有较为系统性授之于渔的文章,同时由于自己也迟迟没有时间规划这一系列文章, ...

  2. hiho #1372:平方求 (bfs)

    #1372 : 平方求和 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 对于一个非负整数n,最少需要几个完全平方数,使其和为n? 输入 输入包含多组数据.对于每组数据: ...

  3. JavaScript中var关键字的使用详解

    作用 声明作用:如声明个变量. 语法 ? 1 var c = 1; 省略var 在javascript中,若省略var关键字而直接赋值,那么这个变量为全局变量,哪怕是在function里定义的. ? ...

  4. linux shell脚本常用语句

    linux shell 指令 诸如-d, -f, -e之类的判断表达式: 文件比较运算符-e filename  如果 filename存在,则为真  [ -e /var/log/syslog ]-d ...

  5. 关于ubuntukylin安装后界面中英文混杂的问题

    起因 一直使用的是ubuntu原版的系统,ubuntukylin出来后也没用使用过.一次去其论坛逛了一圈之后决定使用一下. 安装后的截面和ubuntu原版的差不多,还是挺漂亮的. 但是有一个问题是,安 ...

  6. 【云计算】Cloudify-基于TOSCA规范的开源云应用编排系统

      .cloudify-manager-blueprints:https://github.com/cloudify-cosmo/cloudify-manager-blueprints/tree/3. ...

  7. C# 毕业证书打印《三》

    打印很关键的方法,打印方法DataPrint(),将你要打印的数据信息发送到打印机就可以了,打印机将自动处理. public void DataPrint() { try { PrintDocumen ...

  8. 【leetcode】Integer to Roman

    Integer to Roman Given an integer, convert it to a roman numeral. Input is guaranteed to be within t ...

  9. poj 1035

    http://poj.org/problem?id=1035 poj的一道字符串的水题,不难,但就是细节问题我也wa了几次 题意就是给你一个字典,再给你一些字符,首先如果字典中有这个字符串,则直接输出 ...

  10. linux多线程下载工具mwget

    linux多线程下载工具mwget 经常使用wget进行文件下载,然而wget的处理速度并不如人意.遇到一些国外的站点,经常慢得像蜗牛一般.然而为了解决这个问题,便有了mwget:m表示multi多线 ...