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. neutron的基本原理

    neutron是openstack的一个重要模块,也是比较难以理解和debug的模块之一. 我这里安装如图安装了经典的三个节点的Havana的Openstack   图1 分三个网络: Externa ...

  2. 【GoLang】golang context channel 详解

    代码示例: package main import ( "fmt" "time" "golang.org/x/net/context" ) ...

  3. CLR环境中内置了几个常用委托(转)

    CLR环境中给我们内置了几个常用委托Action. Action<T>.Func<T>.Predicate<T>,一般我们要用到委托的时候,尽量不要自己再定义一 个 ...

  4. atom 折腾记(转载的)

    http://www.bkjia.com/webzh/999078.html

  5. js日期、月份:日期加一天等

    // 日期,在原有日期基础上,增加days天数,默认增加1天 function addDate(date, days) { if (days == undefined || days == '') { ...

  6. Gitlab的Gravatar头像无法显示的问题

    通过gitlab搭建的git仓库,由于Gravatar被墙了,导致Gravatar头像无法显示.总觉得怪怪的. 社区版gitlab解决办法: vi /var/opt/gitlab/gitlab-rai ...

  7. 常见web错误码 404 500

    404表示文件或资源未找到java WEB常见的错误代码1.1xx-信息提示:这些状态代码表示临时的响应.客户端在收到常规响应之前,应准备接收一个或多个1xx响应.100-继续.101-切换协议.2. ...

  8. Python自动化运维工具fabric的安装

    使用shell命令进行复杂的运维时,代码往往变得复杂难懂,而使用python脚本语言来编写运维程序,就相当于开发普通的应用一样,所以维护和扩展都比较简单,更重要的是python运维工具fabric能自 ...

  9. ThinkPHP增加数据库字段后插入数据为空的解决办法

    今天用ThinkPHP做了一个简单的商品发布系统,数据库本来只有四个字段id,name,url,image.id是主键,name是商品名称,url是商品链接,image是商品图片,做的差不多了,发现还 ...

  10. 2076 Problem F Quick Brown Fox

    题目描述 A pangram is a phrase that includes at least one occurrence of each of the 26 letters, ‘a’. . . ...