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();}} }
转载于:https://www.cnblogs.com/luohao123/p/8909425.html
Spring.Net学习相关推荐
- Spring MVC 学习笔记 对locale和theme的支持
Spring MVC 学习笔记 对locale和theme的支持 Locale Spring MVC缺省使用AcceptHeaderLocaleResolver来根据request header中的 ...
- Spring MVC 学习总结(二)——控制器定义与@RequestMapping详解
Spring MVC 学习总结(二)--控制器定义与@RequestMapping详解 目录 一.控制器定义 1.1.实现接口Controller定义控制器 1.2.使用注解@Controller定义 ...
- Spring Cloud 学习资料收集
导读 关于Spring Cloud 去年开始逐渐多的出现在我的视线中,随着微服务这个词越来越热,我们或多或少的都听说过这个词,我们可以将Spring Cloud 看做是java 中Spring 为我们 ...
- Spring Cloud 学习笔记(四)-Spring Cloud Hystrix
Spring Cloud 学习笔记(四)-Spring Cloud Hystrix 由于前一阵子项目的原因,今天才继续弄上,今天想学习一下Hystrix组件 这个组件还挺抽象的,最开始我一直没太明白, ...
- Spring Integration学习资料
Spring Integration学习资料 1.1 背景 Spring框架的一个重要主题是控制反转.从广义上来说,Spring处理其上下文中管理的组件的职责.只要组件减轻了职责,它们同时也被 ...
- Spring MVC 学习总结(九)——Spring MVC实现RESTful与JSON(Spring MVC为前端提供服务)...
Spring MVC 学习总结(九)--Spring MVC实现RESTful与JSON(Spring MVC为前端提供服务) 目录 一.JSON 1.1.概要 1.2.使用ModelAndView ...
- Spring.NET 学习总结
spring.net Spring.NET为建立企业级应用提供了一套轻量级的解决方案.通过Spring.NET,我们可以用统一且透明的方式来配置应用程序.Spring.NET的重点是为中间层提供声明式 ...
- Spring Boot学习笔记-实践建言
2019独角兽企业重金招聘Python工程师标准>>> 本文延续<Spring Boot学习笔记-快速示例>,从开发指南中摘出一些实践经验可供参考.这也是笔者看到的眼前一 ...
- 八个开源的 Spring Boot 学习资源,你值得拥有
点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:什么?你还在使用fastjson,性能太差了个人原创+1博客:点击前往,查看更多 转载自:牧马小子 Spring ...
- spring security 学习三-rememberMe
spring security 学习三-rememberMe 功能:登录时的"记住我"功能 原理: rememberMeAuthenticationFilter在security过 ...
最新文章
- Jersey Restful部署到Tomcat注意事项
- Oracle中sysdba身份和dba角色区别
- 联想、戴尔、惠普等笔记本预装膨胀件 存在安全隐患
- vc++怎么可以直接刷掉MBR?搞笑的吧
- linux清除网卡记录,linux 清除驱动对网卡的记录
- 【Android游戏开发之八】游戏中添加音频-详解MediaPlayer与SoundPool的利弊以及各个在游戏中的用途!...
- dns服务器在电脑上有什么作用,DNS服务器是什么 DNS服务器的作用有哪些【详解】...
- c语言结果九位数,C语言实例:九位累进可除数
- 【剑指offer - C++/Java】3、从尾到头打印链表
- Bash、Terminal通过tab忽略大小写自动补全命令行提示
- Linux调试工具strace和gdb常用命令小结-转
- MySQL复制 自动监控脚本
- c语言 异或_C语言位逻辑运算符的四种逻辑:取反,并,或,异或
- 如何卸载红蜘蛛多媒体网络教室软件
- Hashcat密码破解
- seo模拟点击软件_百度搜索SEO优化算法揭秘
- mac连不上android手机助手,安卓设备连接不上爱思助手时怎么办?
- 包政讲营销录音(2)
- NLPCC2013中文微博细粒度情感识别(二)
- Jenkins自动化部署(java+maven+tomcat项目)