一、 基本概念

   Spring.Net是一个轻量级的控制反转(Ioc)和面向切面的(Aop)的容器框架;

Ioc:控制反转:简单的说就是将创建对象的控制权转交给外部容器(IApplicationContext);

DI:依赖注入:其实就是将通过容器创建对象的时候,给属性、构造函数的参数注入默认值;

Spring.Net不是一门技术,而是一种思想,其目的就是实现松耦合;

二、使用容器创建对象

   在配置文件中配置容器对象

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="spring"><!--声明两个模块,context和object-->
<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="config://spring/objects"/> <!--资源文件指向当前配置文件的objects节点,也可以另外指定文件-->
</context>
<objects xmlns="http://www.springframework.net">
<!--创建对象,对象名为name的值,Type:类型的全名称(命名空间.类名)+程序集的名称;-->
<object name="myPerson" type="SpringNet.Person,SpringNet">
</object>
</objects>
</spring>
</configuration>

    关于ConfigSection的使用,看http://www.cnblogs.com/jhxk/articles/1609182.html

配置好容器后,要想创建对象,首先要获取一个容器对象(IApplicationContext ctx=ContextRegistry.GetContext()) 然后就可以用容器去创建配置文件中配置的对象。

配置对象的时候要注意:

      1、配置对象的配置文件可以在当前配置文件(App.Config/Web.Config),当然也可以另外指定文件,指定文件的路径应该在<Context>=><resource/>节点下的uri属性中指定,例如:<resource uri=file://config//TestObjects.xml/>

       2、 应该在<objects>节点下配置对象(<object></object>)形式如下:

   <objects xmlns="http://www.springframework.net">
<!--创建对象,对象名为name的值,Type:类型的全名称(命名空间.类名)+程序集的名称;-->
<object name="myPerson" type="SpringNet.Person,SpringNet">
</object>
</objects>

    对象的name值必须唯一;

          3、用容器获取对象:

using Spring.Context;
using Spring.Context.Support;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace SpringNet
{
class Program
{
static void Main(string[] args)
{
IApplicationContext ctx = ContextRegistry.GetContext();
Person p = (Person)ctx.GetObject("myPerson");
Console.WriteLine(p.Name);
Console.ReadKey();
}
}
//Person类
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
}

三、属性和构造函数的注入

    1、简单的属性输入

       在<Property>节点中,指定属性名和值;

<object id="myPerson" type="SpringNet.Person,SpringNet">
<property name="Name" value="cm"/>
</object>

     2、构造函数参数的注入

<objects xmlns="http://www.springframework.net">
<!--创建对象,对象名为name的值,Type:类型的全名称(命名空间.类名)+程序集的名称;-->
<object name="myPerson" type="SpringNet.Person,SpringNet">
<constructor-arg index="0" value="蔡猛"/>
<constructor-arg index="1" value="18"/>
<property name="Name" value="cm"/>
</object>
</objects>

Index表示第几个参数,value表示参数的值。也可以这么写=>(<constructor-arg name="Name" value=""哆啦的哆啦多">)

构造器的注入要在属性之前,否则会报错

3、复杂属性的注入

  假设Person类有一个住址属性  public Adress PerSonAdress{get;set}

  关于Adress类的定义如下:

public class Adress
{
public string ProvinceName { get; set; }//省
public string CityName { get; set; }//市
public string CountyName { get; set; }//县
}

现在为新建的Person对象的PersonAdress属性注入值,配置如下:

<objects xmlns="http://www.springframework.net">
<!--创建对象,对象名为name的值,Type:类型的全名称(命名空间.类名)+程序集的名称;-->
<object name="myPerson" type="SpringNet.Person,SpringNet">
<constructor-arg index="0" value="蔡猛"/>
<constructor-arg index="1" value="18"/>
<property name="Name" value="cm"/>
<property name="PerSonAdress" ref="zhangsanPersonAdress"/>
</object>
<object name="zhangsanPersonAdress" type="SpringNet.Adress,SpringNet">
<property name="ProvinceName" value="安徽省"/>
<property name="CityName" value="亳州市"/>
<property name="CountyName" value="蒙城县"/>
</object>
</objects>

此时,在为myPerson注入PersonAdress属性的时候,要先去创建一个Adress对象,然户在myPerson中,将PersonAdress的属性值指向新创建的Adress对象即可;

Spring.Net 入门学习笔记-----one的更多相关文章

  1. Spring的入门学习笔记 (AOP概念及操作+AspectJ)

    AOP概念 1.aop:面向切面(方面)编程,扩展功能不通过源代码实现 2.采用横向抽取机制,取代了传统的纵向继承重复代码 AOP原理 假设现有 public class User{ //添加用户方法 ...

  2. Spring的入门学习笔记 (注解)

    Spring的bean管理(注解) 注解 1.代码里面特殊标记(ep:@Test),使用注解完成一些相关功能 2.注解写法 @注解名称(属性名称=属性值) 3.可以用在类,方法,属性上都可以 4.Sp ...

  3. dubbo入门学习笔记之入门demo(基于普通maven项目)

    注:本笔记接dubbo入门学习笔记之环境准备继续记录; (四)开发服务提供者和消费者并让他们在启动时分别向注册中心注册和订阅服务 需求:订单服务中初始化订单功能需要调用用户服务的获取用户信息的接口(订 ...

  4. 【原创】SpringBoot & SpringCloud 快速入门学习笔记(完整示例)

    [原创]SpringBoot & SpringCloud 快速入门学习笔记(完整示例) 1月前在系统的学习SpringBoot和SpringCloud,同时整理了快速入门示例,方便能针对每个知 ...

  5. Hadoop入门学习笔记---part4

    紧接着<Hadoop入门学习笔记---part3>中的继续了解如何用java在程序中操作HDFS. 众所周知,对文件的操作无非是创建,查看,下载,删除.下面我们就开始应用java程序进行操 ...

  6. Hadoop入门学习笔记---part3

    2015年元旦,好好学习,天天向上.良好的开端是成功的一半,任何学习都不能中断,只有坚持才会出结果.继续学习Hadoop.冰冻三尺,非一日之寒! 经过Hadoop的伪分布集群环境的搭建,基本对Hado ...

  7. PyQt4入门学习笔记(三)

    # PyQt4入门学习笔记(三) PyQt4内的布局 布局方式是我们控制我们的GUI页面内各个控件的排放位置的.我们可以通过两种基本方式来控制: 1.绝对位置 2.layout类 绝对位置 这种方式要 ...

  8. PyQt4入门学习笔记(一)

    PyQt4入门学习笔记(一) 一直没有找到什么好的pyqt4的教程,偶然在google上搜到一篇不错的入门文档,翻译过来,留以后再复习. 原始链接如下: http://zetcode.com/gui/ ...

  9. Hadoop入门学习笔记---part2

    在<Hadoop入门学习笔记---part1>中感觉自己虽然总结的比较详细,但是始终感觉有点凌乱.不够系统化,不够简洁.经过自己的推敲和总结,现在在此处概括性的总结一下,认为在准备搭建ha ...

随机推荐

  1. 应用wavesurfer.js绘制音频波形图小白极速上手总结

    一.简介 1.1  引   人生中第一份工作公司有语音识别业务,需要做一个web网页来整合语音引擎的标注结果和错误率等参数,并提供人工比对的语音标注功能(功能类似于TranscriberAG等),(博 ...

  2. tensorflow的基本认识

    版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖.如要转贴,必须注明原文网址 http://www.cnblogs.com/Colin-Cai/p/10741013.html 作者:窗户 ...

  3. arts打卡第二周

    Algorithm 旋转数组 Given an array, rotate the array to the right by k steps, where k is non-negative. Ex ...

  4. P1551 亲戚题解

    标准并查集板子题 没啥好说的,分明是白书上的(除了输入方式外一点都没改动) #include<cstdio> #include<iostream> using namespac ...

  5. C++购书系统

    C++购书系统——来自班里某位同学的小学期作业 这是一个购书系统,模拟网上购书的流程.用户可以在这个小程序里输入对应的数字进行浏览书籍信息,查看用户信息,查找书籍,购买书籍以及查询个人订单的操作. 以 ...

  6. [题解]ybt1365:FBI树(fbi)

    ybt1365:FBI树(fbi) [题目描述] 我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全“1”串称为I串,既含“0”又含“1”的串则称为F串. FBI树是一种二叉树,它 ...

  7. gVim编辑器 操作篇

    gVim是一款强大的编辑器,可以满足大部分语言的编程需要.尤其是其自带的模板定制功能对于Verilog来说非常受用.然而gVim有很多操作是不同于其他编辑器的,这让很多初学者望而却步,因此,本文将gV ...

  8. bind:tap="onLike" 中不能添加参数 及 dataset 传值

    <view bind:tap="onLike({{id}})"></view> //Component "pages/book-detail/bo ...

  9. 【AGC030F】Permutation and Minimum DP

    题目大意 有一个长度为序列 \(a\),其中某些位置的值是 \(-1\). 你要把 \(a\) 补成一个排列. 定义 \(b_i=\min(a_{2i-1},a_{2i})\),求有多少种可能的 \( ...

  10. 如何将知网下载的caj文件转换为pdf文件

    一.问题描述: 最近在知网搜索论文的时候,经常遇到有的论文没有pdf文件的情况,但不得不吐槽我觉得知网做的阅读器确实是有点烂.所以想将caj文件转化为pdf文件,找到了一个比较好的方法,所以希望记录一 ...