Spring.Net学习之简单的知识点(一)
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学习之简单的知识点(一)的更多相关文章
- spring再学习之简单测试
一.spring是怎么工作的那,通过一个类装载进容器进行描述: 首先创建一个类user: package cn.itcast.bean; public class User { public User ...
- git bash学习3 -简单杂乱知识点记录
branch 新建分支 git init git add git commit 先新建一个仓库以及master 然后新建分支 git branch BranchName 然后切换分支 git chec ...
- Spring MVC 学习笔记10 —— 实现简单的用户管理(4.3)用户登录显示全局异常信息
</pre>Spring MVC 学习笔记10 -- 实现简单的用户管理(4.3)用户登录--显示全局异常信息<p></p><p></p>& ...
- Spring MVC 学习笔记9 —— 实现简单的用户管理(4)用户登录显示局部异常信息
Spring MVC 学习笔记9 -- 实现简单的用户管理(4.2)用户登录--显示局部异常信息 第二部分:显示局部异常信息,而不是500错误页 1. 写一个方法,把UserException传进来. ...
- Spring MVC 学习笔记8 —— 实现简单的用户管理(4)用户登录
Spring MVC 学习笔记8 -- 实现简单的用户管理(4)用户登录 增删改查,login 1. login.jsp,写在外面,及跟WEB-INF同一级目录,如:ls Webcontent; &g ...
- Spring MVC 学习总结(四)——视图与综合示例
一.表单标签库 1.1.简介 从Spring2.0起就提供了一组全面的自动数据绑定标签来处理表单元素.生成的标签兼容HTML 4.01与XHTML 1.0.表单标签库中包含了可以用在JSP页面中渲染H ...
- 15 个优秀开源的 Spring Boot 学习项目,一网打尽!
Spring Boot 算是目前 Java 领域最火的技术栈了,松哥年初出版的 <Spring Boot + Vue 全栈开发实战>迄今为止已经加印了 8 次,Spring Boot 的受 ...
- 15 个优秀开源的 Spring Boot 学习项目
Spring Boot 算是目前 Java 领域最火的技术栈了,松哥年初出版的 <Spring Boot + Vue 全栈开发实战>迄今为止已经加印了 8 次,Spring Boot 的受 ...
- Spring Boot 学习方法论-如何正确的入门 Spring Boot
想要入门 Spring Boot,那么什么样的教程是符合初学者学习的(没有太多的Java基础但有一些程序基础或者软件编程知识). 这恰好能够勾出很多问题,比如是文章图文教程适合还是视频教程适合零基础初 ...
随机推荐
- 编写Delphi控件属性Stored和Default的理解及应用
property ButtonSize: Integer read FButtonSize write SetButtonSize default 0; property Color: TCol ...
- @PathVariable注解
spring mvc中的@PathVariable是用来获得请求url中的动态参数的,十分方便,复习下: . @Controller public class TestController { @Re ...
- apache2 + virtualenv +djangocms
命令记录: cd /var/www makedir django cd django/ virtualenv env --no-site-packages source /var/www/django ...
- 转:jquery向普通aspx页面发送ajax请求
本文将介绍在ASP.NET中如何方便使用Ajax,第一种当然是使用jQuery的ajax,功能强大而且操作简单方便,第二种是使用.NET封装好的ScriptManager. $.ajax向普通页面发送 ...
- Leetcode Unique Word Abbreviation
An abbreviation of a word follows the form <first letter><number><last letter>. Be ...
- sed小知识总结
1)sed默认是打印出文件中的所有行的,使用 -n 选项可以只打印出 匹配 的行 2)当用到sed不同的编辑命令时,用{},且不同编辑命令之间用分号
- 一名Delphi程序员的开发习惯
一名Delphi程序员的开发习惯 有关开发习惯的一些想法,如鲠在喉,不吐不快.究其发贴动机,当然不排除有骗取参与分的可能,但另一方面,也希望能给同行(念Xing)者提供一些 建议,或者参考(希望不是误 ...
- ACM/ICPC 之 DFS求解欧拉通路路径(POJ2337)
判断是欧拉通路后,DFS简单剪枝求解字典序最小的欧拉通路路径 //Time:16Ms Memory:228K #include<iostream> #include<cstring& ...
- [Android]如何获取当前用户设置的时区
方法:TimeZone.getDefault().getDisplayName(true, TimeZone.SHORT);获取的值如GMT+08:00,GMT-04:00,EDT 另附:国家码查询 ...
- Dynamic Invok Webservice
来源:网络,自己做修改 CSharpCodeProvider csc = new CSharpCodeProvider(); ICodeCompiler icc = csc.CreateCompile ...