Spring.Net 简单入门学习

Spring.NET IoC容器的用法。

通过简单的例子学习Spring.Net

1、先创建一个控制台程序项目。

2、添加IUserInfoDal 接口。

复制代码
namespace Spring.Net
{
    public interface IUserInfoDal
    {
        void Show();
    }
}
复制代码

3、添加AdoNetUserInfoDal类和EFUserInfoDal类,继承IUserInfoDal接口。

AdoNetUserInfoDal.cs

复制代码
public class AdoNetUserInfoDal:IUserInfoDal
    {
        public void Show()
        {
            Console.WriteLine("我是 AdoNet Dal );
        }
    }
复制代码

EFUserInfoDal.cs

复制代码
public class EFUserInfoDal: IUserInfoDal
    {
        public void Show()
        {
            Console.WriteLine("我是EF Dal);
        }     
    }
复制代码

4、引用Spring.Net程序集 Spring.Core.dll 和 Common.Logging.dll

5、添加Spring.Net配置节点,配置object节点

复制代码
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <!--一定要在紧跟着configuration下面添加-->
  <configSections>
    <!--跟下面Spring.Net节点配置是一一对应关系-->
    <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.Net节点配置-->
  <spring>
    <context>
      <!--容器配置-->
      <resource uri="config://spring/objects"/>
    </context>
    <objects xmlns="http://www.springframework.net">
      <!--这里放容器里面的所有节点-->
      <description>An  example that demonstrates simple IoC features.</description>
      <!--name 必须要唯一的,type=类的全名称,所在的程序集-->
      <object name="UserInfoDal" type="Spring.Net.EFUserInfoDal, Spring.Net">
      </object>      
  </spring>
</configuration>
复制代码

6、开始写主函数,创建spring容器上下文

复制代码
namespace Spring.Net
{
    class Program
    {
        static void Main(string[] args)
        {
            //控制权没有反转
            //IUserInfoDal infoDal = new EFUserInfoDal();

            //Spring.Net 创建实例的方式转为容器帮我们创建
            //创建spring容器上下文
            IApplicationContext ctx = ContextRegistry.GetContext();
            //通过容器创建对象
            IUserInfoDal efDal = ctx.GetObject("UserInfoDal") as IUserInfoDal;
            efDal.Show();
            Console.ReadKey();
        }
    }
}
复制代码

 

7、属性注入

复制代码
<!--Spring.Net节点配置-->
  <spring>
    <context>
      <!--容器配置-->
      <resource uri="config://spring/objects"/>
    </context>
    <objects xmlns="http://www.springframework.net">
      <!--这里放容器里面的所有节点-->
      <description>An  example that demonstrates simple IoC features.</description>
      <!--name 必须要唯一的,type=类的全名称,所在的程序集-->
      <object name="UserInfoDal" type="Spring.Net.EFUserInfoDal, Spring.Net">
        <property name="Name" value="张三"/>
        <!--ref指向下面的属性注入-->
        <property name="UserInfo" ref="UserInfo"/>
      </object>      

      <!--属性注入-->
      <object name="UserInfo" type="Spring.Net.UserInfo, Spring.Net">
        <property name="Name" value="李四"/>
        <property name="Age" value="15"/>
      </object>
    </objects>
  </spring>
复制代码

8、构造函数注入

<!--构造函数注入-->
<object name="UserInfoDal2" type="Spring.Net.AdoNetUserInfoDal, Spring.Net">
   <constructor-arg index="0" value="张三"/>
   <constructor-arg index="1" ref="UserInfo"/>
</object>

9、容器配置

复制代码
<context>
   <!--容器配置-->
   <resource uri="config://spring/objects"/>
   <!--xml文件方式,更改属性,复制到输出目录:始终复制-->
   <!--<resource uri="file://objects.xml"/>-->
   <!--嵌入程序集方式,assembly://程序集名/项目名/objects.xml,更改属性,始终复制,生成操作,嵌入的资源-->
   <!--<resource uri="assembly://Spring.Net/Spring.Net/objects.xml"/>-->
</context>
复制代码

10、完整例子

IUserInfoDal.cs

复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Spring.Net
{
    public interface IUserInfoDal
    {
        UserInfo UserInfo { get; set; }
        string Name { get; set; }

        void Show();
    }
}
复制代码

AdoNetUserInfoDal.cs

复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Spring.Net
{
    public class AdoNetUserInfoDal:IUserInfoDal
    {
        public AdoNetUserInfoDal(string name, UserInfo userInfo)
        {
            Name = name;
            UserInfo = userInfo;
        }
        public UserInfo UserInfo { get; set; }
        public string Name { get; set; }

        public void Show()
        {
            Console.WriteLine("我是 AdoNet Dal ,属性注入:Name=" + Name);
            Console.WriteLine("UserInfo ,Name=" + UserInfo.Name + " Age=" + UserInfo.Age);
        }
    }
}
复制代码

EFUserInfoDal.cs

复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Spring.Net
{
    public class EFUserInfoDal: IUserInfoDal
    {
        public EFUserInfoDal()
        {

        }
        public UserInfo UserInfo { get; set; }
        public string Name { get; set; }

        public void Show()
        {
            Console.WriteLine("我是EF Dal,属性注入:Name=" + Name);
            Console.WriteLine("UserInfo ,Name=" + UserInfo.Name + " Age=" + UserInfo.Age);
        }     
    }
}
复制代码

App.config

复制代码
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <!--一定要在紧跟着configuration下面添加-->
  <configSections>
    <!--跟下面Spring.Net节点配置是一一对应关系-->
    <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.Net节点配置-->
  <spring>
    <context>
      <!--容器配置-->
      <resource uri="config://spring/objects"/>
      <!--xml文件方式,更改属性,复制到输出目录:始终复制-->
      <!--<resource uri="file://objects.xml"/>-->
      <!--嵌入程序集方式,assembly://程序集名/项目名/objects.xml,更改属性,始终复制,生成操作,嵌入的资源-->
      <!--<resource uri="assembly://Spring.Net/Spring.Net/objects.xml"/>-->
    </context>
    <objects xmlns="http://www.springframework.net">
      <!--这里放容器里面的所有节点-->
      <description>An  example that demonstrates simple IoC features.</description>
      <!--name 必须要唯一的,type=类的全名称,所在的程序集-->
      <object name="UserInfoDal" type="Spring.Net.EFUserInfoDal, Spring.Net">
        <property name="Name" value="张三"/>
        <!--ref指向下面的属性注入-->
        <property name="UserInfo" ref="UserInfo"/>
      </object>      
      
      <!--构造函数注入-->
      <object name="UserInfoDal2" type="Spring.Net.AdoNetUserInfoDal, Spring.Net">
        <constructor-arg index="0" value="张三"/>
        <constructor-arg index="1" ref="UserInfo"/>
      </object>

      <!--属性注入-->
      <object name="UserInfo" type="Spring.Net.UserInfo, Spring.Net">
        <property name="Name" value="李四"/>
        <property name="Age" value="15"/>
      </object>
    </objects>
  </spring>
</configuration>
复制代码

Program.cs

复制代码
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

//Spring.Aop.dll 面向切面编程
//Spring.Core.dll spring框架基础
//Common.Logging.dll 这个必须也要引用

namespace Spring.Net
{
    class Program
    {
        static void Main(string[] args)
        {
            //控制权没有反转
            //IUserInfoDal infoDal = new EFUserInfoDal();

            //Spring.Net 创建实例的方式转为容器帮我们创建
            //第一步,引用Spring.Net程序集 Spring.Core.dll 和 Common.Logging.dll
            //第二步,添加Spring.Net配置节点
            //第三步,配置object节点
            //第四步,创建spring容器上下文
            IApplicationContext ctx = ContextRegistry.GetContext();
            //第五步,通过容器创建对象
            IUserInfoDal efDal = ctx.GetObject("UserInfoDal") as IUserInfoDal;
            efDal.Show();

            IUserInfoDal adoDal = ctx.GetObject("UserInfoDal2") as IUserInfoDal;
            adoDal.Show();

            Console.ReadKey();
        }
    }
}
复制代码

 

下面是MVC项目中使用Spring.Net融合的例子

1、将Spring.net程序集复制到项目下的packages文件夹中。

2、项目中添加引用Spring.Core.dll、Common.Logging.dll、Spring.Web.Mvc4.dll、Spring.Web.dll

3、修改Web.config,配置节点

复制代码
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    
    <!-- Spring.Net配置节点 -->
    <sectionGroup name="spring">
      <section name="context" type="Spring.Context.Support.MvcContextHandler, Spring.Web.Mvc4"/>
    </sectionGroup>
  </configSections>
  <!-- Spring.Net节点详细配置 -->
  <spring>
    <context>
      <resource uri="file://~/Config/controllers.xml"/>
    </context>
  </spring>

</configuration>
复制代码

4、项目中创建Config文件夹,controllers.xml文件。

复制代码
<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net">

  <object type="HX.Shop.UI.Main.Controllers.AdminController, HX.Shop.UI.Main" singleton="false" >
    <property name="AdminService" ref="AdminService" />
  </object>
  <object name="AdminService" type="HX.Shop.BLL.AdminService, HX.Shop.BLL" singleton="false" >
    
  </object>
</objects>
复制代码

 

5、Global.asax 中修改 SpringMvcApplication

public class MvcApplication : Spring.Web.Mvc.SpringMvcApplication //System.Web.HttpApplication

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
课程通过实际项目融入常用开发技术架构,讲授风格独特,提供详细上课日志及答疑,赠送配套的项目架构源码注释详细清晰且表达通俗,均能直接在实际项目中应用,正真的物超所值,价格实惠任务作业:综合运用《C#/.Net企业级系统架构设计实战精讲教程》课程所学知识技能设计一个学生成绩管理系统的架构。要求:1.系统基于MVC的三层架构,各层单独建不同的解决方案文件夹。2.采用Model First开发方式,设计架构时只需要设计学生表(TbStudent)和课程表(TbCourse)。学生表必须有的字段是ID、stuName、age;课程表必须有的字段是ID、courseName、content。3.数据访问层采用Entity Framework或NHibernate来实现,必须封装对上述表的增删改查方法。4.必须依赖接口编程,也就是必须要有数据访问层的接口层、业务逻辑层的接口层等接口层。层层之间必须减少依赖,可以通过简单工厂或抽象工厂。5.至少采用简单工厂、抽象工厂、Spring.Net等技术中的2种来减少层与层之间的依赖等。6.封装出DbSession类,让它拥有所有Dal层实例和SaveChanges方法。7.设计出数据访问层及业务逻辑层主要类的T4模板,以便实体增加时自动生成相应的类。8.表现层要设计相关的控制器和视图来验证设计的系统架构代码的正确性,必须含有验证增删改查的方法。9.开发平台一定要是Visual Studio平台,采用C#开发语言,数据库为SQL Server。10.提交整个系统架构的源文件及生成的数据库文件。(注意: 作业需写在CSDN博客中,请把作业链接贴在评论区,老师会定期逐个批改~~)
Spring是一个分层非常清晰并且依赖关系、职责定位非常明确的轻量级框架,主要包括几个大模块:数据处理模块、Web模块、AOP/Aspects模块、Core Container模块和Test模块。\[1\]Spring的核心容器是最核心的部分,它管理着Spring应用中bean的创建、配置和管理。在核心容器中,包括了Spring bean工厂,它为Spring提供了依赖注入(DI)的功能。所有的Spring模块都构建于核心容器之上。\[1\] Spring是一个开放源代码的设计层面框架,它解决的是业务逻辑层和其他各层的松耦合问题。它以一种非侵入式的方式来管理代码,提倡"最少侵入"的原则,也就是说你可以根据需要安装或卸载SpringSpring是全面的和模块化的,它有分层的体系结构,你可以选择使用它的任何部分,它的架构仍然是内在稳定的。\[2\] 为了方便开发者进行测试,Spring提供了测试模块,可以用于Spring应用的单元测试。通过该模块,Spring为使用Servlet、JNDI等编写单元测试提供了一系列的mock对象实现。\[3\] 如果你想从零开始学习Spring,你可以先了解Spring的核心概念和基本用法,比如依赖注入、控制反转、AOP等。然后可以通过阅读官方文档、教程或者参加相关的培训课程来深入学习和实践。还可以通过编写简单的示例程序来加深对Spring的理解和掌握。逐步积累经验和知识,你就能够逐渐掌握Spring框架的使用了。 #### 引用[.reference_title] - *1* *2* *3* [Spring基础入门(一)](https://blog.csdn.net/qq_36194388/article/details/107279215)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值