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. c语言数据问题

    变量都有作用域,链接属性,和存储类型3个属性,这三个属性决定了变量的作用域和生存期的问题 在c语言中包含4中类型, 整形 浮点型 指针 聚合类型(数组,结构体等) ------------------ ...

  2. svn co 与ssl

    默认情况下, yum安装的svn用的是GnuTLS, 而不是ssl, 导致checkout https协议打包的svn repo的时候会报错. 解决方法是用openssl重新编译安装svn.注意ssl ...

  3. bootstrap常用的定义风格

    primary()     首选项 success()     成功 info()        一般信息 warning()       警告 danger()         危险 <bod ...

  4. linux系统性能调优第一步——性能分析(vmstat)

    linux系统性能调优第一步--性能分析(vmstat) 分类: LINUX 性能调优的第一步是性能分析,下面从性能分析着手进行一些介绍,尤其对linux性能分析工具vmstat的用法和实践进行详细介 ...

  5. Response.Redirect()、Server.Execute和Server.Transfer的区别

    1.Response.Redirect(): Response.Redirect方法导致浏览器链接到一个指定的URL. 当Response.Redirect()方法被调用时,它会创建一个应答,应答头中 ...

  6. android上的图片占用内存问题

    近日正在把ios程序移植到android上,以前没做过android的程序,于是,想当然地把ios的图片资源放到了android工程的drawable文件夹下,这些图片都是png. 程序界面也很正常. ...

  7. ACM/ICPC 之 数论-素数筛选法 与 "打表"思路(POJ 1595)

    何为"打表"呢,说得简单点就是: 有时候与其重复运行同样的算法得出答案,还不如直接用算法把这组数据所有可能的答案都枚举出来存到一个足够大的容器中去-例如数组(打表),然后再输入数据 ...

  8. glib-2.49.4 static build step in windows XP

    export LIBFFI_CFLAGS=" -I/usr/local/lib/libffi-3.2.1/include " \ export LIBFFI_LIBS=" ...

  9. [转]Handler MessageQueue Looper消息循环原理分析

    Handler MessageQueue Looper消息循环原理分析   Handler概述 Handler在Android开发中非常重要,最常见的使用场景就是在子线程需要更新UI,用Handler ...

  10. codeforces 581C. Developing Skills 解题报告

    题目链接:http://codeforces.com/problemset/problem/581/C 题目意思:给出 n 个数:a1, a2, ..., an (0 ≤ ai ≤ 100).给出值 ...