1.开始。

2.新建一个控制台,我们新建一个SpringNetTest类。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace SpringNetDemo
{
public class SpringNetTest
{
public void SayHello()
{
Console.WriteLine("SayHello");
}
}
}

2.首先我们用正常的方式在mian函数入口实例化这个SpringNetTest对象

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace SpringNetDemo
{
class Program
{
static void Main(string[] args)
{
SpringNetTest springNet = new SpringNetTest();
springNet.SayHello();
Console.ReadKey();
}
}
}

4.很明显这个地方是直接New的,进行了强耦合,在实际的项目中这样写,未来需求变动是不利于修改的。面向对象思想中,我们要面向接口编程。接下来我提取一个接口,SpringNetTest继承这个接口。写一个简化版本的例子

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace SpringNetDemo
{
interface IObjectNetTest
{
void SayHello();
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace SpringNetDemo
{
public class SpringNetTest: IObjectNetTest
{
public void SayHello()
{
Console.WriteLine("SayHello");
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace SpringNetDemo
{
class Program
{
static void Main(string[] args)
{
IObjectNetTest springNet = new SpringNetTest();
springNet.SayHello();
Console.ReadKey();
}
}
}

这样的话,我们程序只要是依赖于IObjectNetTest而不依赖 SpringNetTest了,以后如果 不用SpringNetTest,但是只要是继承于IObjectNetTest对象都可以改。但是这个地方还是要修改 new SpringNetTest(),我们这个地方还是强耦合。那这个时候我们SpringNet就闪亮登场了。

5.首先我们下载好了SpringNet的程序集,这是全部的 控制台我们只要前面4个基础的就好了

6.修改配置文件AppConfig,和main方法代码,注入的方式好多种,我下面只列举了一种,具体的可以看文档

<?xml version="1.0" encoding="utf-8" ?>
<configuration> <!--Spring-->
<configSections>
<!--spring容器对象的创建-->
<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>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup> <spring>
<!-- Spring.Net对象容器的配置 -->
<context>
<!--要注入容器的对象的创建路径-->
<resource uri ="config://spring/objects" />
<!--<resource uri="file://~Config/common.xml" />-->
</context>
<objects xmlns= "http://www.springframework.net" >
<!--创建的对象-->
<!--name:是定义启的名字,type:逗号前面是创建对象的命名空间,逗号后面是创建对象所在的程序集-->
<object name = "IobjectNetTest" type="SpringNetDemo.SpringNetTest,SpringNetDemo">
</object>
</objects>
</spring>
<!--Spring-->
</configuration>
using Spring.Context;
using Spring.Context.Support;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace SpringNetDemo
{
class Program
{
static void Main(string[] args)
{
//普通做法
//IObjectNetTest springNet = new SpringNetTest(); //SpringNet做法
IApplicationContext ctx = ContextRegistry.GetContext(); IObjectNetTest NetTest =(IObjectNetTest)ctx.GetObject("IobjetNetTest");
NetTest.SayHello();
Console.ReadKey();
}
}
}

这样的话,我们就完成解耦了。IobjectNetTest对象的就是通过Srping容器帮我们创建了。如果下次换成SummerNetTest,或者FallNetTest,或者WinterNetTest,不管你是春夏秋冬哪一个,只要继承了IobjectNetTest,都可以在AppConfig配置里修改一下配置,就可以完美切换了。这地方有一个很很牛逼的思想,我也不是很懂的思想,DIP-依赖倒置原则,IOC-控制反转,DI-依赖注入。 从上面的例子来说 IobjetNetTest我们从直接new 变成 交给了Spring容器,这个就是控制反转。创建的权利交给了Spring这个容器。就是设计模式里抽象工厂概念。DI依赖注入就是我们通过在配置文件里配置好,Spring 容器才可以创建。概念比较高深,我也不是很懂,我找了好多的博客:

这个大牛的博客就很赞。https://www.cnblogs.com/liuhaorain/p/3747470.html#title_2

以上内容都是本人学习巩固之用。

学习Spring.Net:1.简单的应用之控制台的更多相关文章

  1. 菜鸟学习Spring——60s配置XML方法实现简单AOP

    一.概述. 上一篇博客讲述了用注解的形式实现AOP现在讲述另外一种AOP实现的方式利用XML来实现AOP. 二.代码演示. 准备工作参照上一篇博客<菜鸟学习Spring--60s使用annota ...

  2. Spring MVC 学习笔记10 —— 实现简单的用户管理(4.3)用户登录显示全局异常信息

    </pre>Spring MVC 学习笔记10 -- 实现简单的用户管理(4.3)用户登录--显示全局异常信息<p></p><p></p>& ...

  3. Spring MVC 学习笔记9 —— 实现简单的用户管理(4)用户登录显示局部异常信息

    Spring MVC 学习笔记9 -- 实现简单的用户管理(4.2)用户登录--显示局部异常信息 第二部分:显示局部异常信息,而不是500错误页 1. 写一个方法,把UserException传进来. ...

  4. Spring MVC 学习笔记8 —— 实现简单的用户管理(4)用户登录

    Spring MVC 学习笔记8 -- 实现简单的用户管理(4)用户登录 增删改查,login 1. login.jsp,写在外面,及跟WEB-INF同一级目录,如:ls Webcontent; &g ...

  5. 学习Spring——依赖注入

    前言: 又开始动笔开了“学习Spring”系列的头…… 其实一开始写“学习SpringMVC”的几篇文章是出于想系统的了解下Spring以及SpringMVC,因为平时在公司中虽然每天都在使用Spri ...

  6. Spring Security4.X 简单实例介绍

    简介 本例子采用的是SpringMVC.SpringSecurity和Spring整合的简单使用 使用gradle搭建的项目(gradle比maven更加便捷),可以自行了解 web.xml配置 &l ...

  7. [原创]java WEB学习笔记96:Spring学习---Spring简介及HelloWord

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  8. 跟着刚哥学习Spring框架--创建HelloWorld项目(一)

    1.Spring框架简介 Spring是一个开源框架,Spring是在2003年兴起的一个轻量级的开源框架,由Rod johnson创建.主要对JavaBean的生命周期进行管理的轻量级框架,Spri ...

  9. 跟着刚哥学习Spring框架--AOP(五)

    AOP AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善.OOP引入 ...

随机推荐

  1. 基于opencv3.0下的人脸检测和检测部分的高斯模糊处理

    如题 这里将任务分解为三大部分: 1.录播放视频 2.人脸检测 3.部分高斯模糊 其中重点放在人脸检测和部分高斯模糊上 1.录播放视频(以opencv中的VideoCapture类进行实现) 首先罗列 ...

  2. codefirst数据迁移技术,在保留数据库数据下实现对模型的修改并映射到数据库

    一前言 这是我的处女作,写的不好的地方还望指出共同讨论.EF的数据访问方式有三种DbFirst,ModelFirst,还有本文要提到的CodeFirst 三者都是以ORM的方式建立.本人之前学习的.n ...

  3. Nginx负载均衡初识

    1.背景 nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器:nginx可以作为一个HTTP服务器进行网站的发布处理,另外ngi ...

  4. .gitignore文件常用写法

    一般的项目代码中会涉及到密码.key/secret等隐私内容,不适合上传github公开.这时可以使用.gitignore文件来屏蔽这些文件的提交. 你可能用到的写法如下 写法 含义 /build/ ...

  5. Linux 安装JavaEE环境之jdk安装笔记

    1.安装jdk 先用xftp将jdk的压缩包上传到 /opt/ 2.在/usr/local/下使用命令mkdir java创建java目录 将jdk-7u79-linux-x64.gz解压缩至/usr ...

  6. PHP进行数据库操作时遇到的一个问题

    PHP进行数据库操作时遇到的一个问题 昨天在进行数据库操作时,遇到了一个问题(用的是 wampserver 环境): <?php $link = @mysqli_connect('localho ...

  7. [Vue] vue-cli3.0安装

    1. node.js安装https://nodejs.org/en/download/ 2.npm的安装 由于新版的nodejs已经集成了npm,所以之前npm也一并安装好了.同样可以通过输入 &qu ...

  8. C#6.0语言规范(十五) 委托

    委托启用其他语言(如C ++,Pascal和Modula)已使用函数指针进行寻址的方案.但是,与C ++函数指针不同,委托是完全面向对象的,与成员函数的C ++指针不同,委托封装了对象实例和方法. 委 ...

  9. WebForm - cookie赋值乱码问题

    cookie的值为中文时候,取cookie的值会出现乱码 解决办法:存取cookie时候先解码和编码 存cookie,进行编码: cookie.Value = HttpUtility.UrlEncod ...

  10. c++实现二叉树层序、前序创建二叉树,递归非递归实现二叉树遍历

    #include <iostream> #include <cstdio> #include <stdio.h> #include <string> # ...