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. BZOJ 1019: [SHOI2008]汉诺塔

    Description 一个汉诺塔,给出了移动的优先顺序,问从A移到按照规则移到另一个柱子上的最少步数. 规则:小的在大的上面,每次不能移动上一次移动的,选择可行的优先级最高的. Sol DP. 倒着 ...

  2. Tip

    Windows 开栈命令 -Wl,--stack=1000000000 //stack-size B Linux 开栈命令 -ulimit -a -ulimit -s size //stack-siz ...

  3. Fraction to Recurring Decimal

    Given two integers representing the numerator and denominator of a fraction, return the fraction in ...

  4. Binary Tree Vertical Order Traversal

    Given a binary tree, return the vertical order traversal of its nodes' values. (ie, from top to bott ...

  5. MongoDB 副本集的相关概念【转】

    一.副本集基本概念 副本集(replica set) MongoDB的replica set是一个mongod进程实例簇,数据在这个簇中相互复制,并自动进行故障切换. MongoDB的数据库复制增加了 ...

  6. Java for LeetCode 225 Implement Stack using Queues

    Implement the following operations of a stack using queues. push(x) -- Push element x onto stack. po ...

  7. plsql客户端显示菜单等

    不小心把plsql的左边的都关了,如图 菜单条---工具---浏览器. 即可.

  8. 【leetcode】Remove Linked List Elements(easy)

    Remove all elements from a linked list of integers that have value val. ExampleGiven: 1 --> 2 --& ...

  9. 【XLL 框架库函数】 Excel/Excel12f

    Excel/Excel12f 这两个库函数分别包装了 C API 中的 Excel4 和 Excel12 函数,它们会检查函数没有参数时是否为零,它将表明创建临时的 XLOPER 或 XLOPER12 ...

  10. jQuery取复选框值、下拉列表里面的属性值、取单选按钮的属性值、全选按钮、JSON存储、*去空格

    1.jquery取复选框的值<!--引入jquery包--> <script src="../jquery-1.11.2.min.js"></scri ...