一、前言:

Spring.Net是Java开源框架迁移过来的,主要分为

1)依赖注入

2)面向方面编程

3)数据访问抽象

4)Asp.Net扩展

四个模块功能,这里只是简单介绍依赖注入模块功能。

对于Mybatis,在这里也是简单介绍相关配置和实现插入和查找功能。

二、项目结构:

DAL\BLL\Web项目在这里不作介绍,因为本文章重点不在这里。

这里着重介绍下Spring.Net和MyBatis的东西。开始开发前,请先下载先关要引用的组件,具体下载和要引用什么组件推荐上官网了解和下载,这里不再详细赘述。

其他文件说明:

1、Res文件夹下BLLObjects.xml等文件:Spring.net框架定义依赖注入的类定义和属性。

2、Web根目录下的Webconfig定义一些Spring.net的基础配置和资源文件存放位置。

三、具体开发

1、Spring.Net模块介绍

这里以BLL层的Web层为例作介绍,其他层也是类似,读者可以举一反三。

关于Spring.Net框架的WebConfig配置如下:

1)注册Spring.Net库的dll:

1 <!--Spring.Net配置 引用Spring需要使用的类型-->
2 <configuration>
3 <configSections>
4 <sectionGroup name="spring">
5 <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core" />
6 <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />
7 </sectionGroup>
8 </configSections>

2)添加对aspx页面注入支持:

在webconfig根节点的config节点下面的configuration的System.Web(如果没有此节点请自行添加)节点下配置如下。这个配置也是必要的,作用是添加对aspx页面注入的支持。

 1     <httpHandlers>
2 <remove verb="*" path="*.asmx" />
3 <add verb="*" path="*.aspx" type="Spring.Web.Support.PageHandlerFactory, Spring.Web" />
4 </httpHandlers>
5 <httpModules>
6 <!--这里不能漏,不然页面注入的时候会出错-->
7 <add name="Spring" type="Spring.Context.Support.WebSupportModule, Spring.Web"/>
8
9 </httpModules>
10
11

3)引入类型定义文件:

Webconfig xml根节点下配置引入定义对象的资源文件。引入资源文件分为两种方式,一种是作为资源嵌入到程序集中,如下面注释代码所示,uri="assembly://MyBlog.BLL/MyBlog.BLL/Objects.xml"/>。用这种方式要在Visual Studio资源管理器中将Objects.xml文件的生成操作属性改成嵌入的资源,不然是没把文件带进去的。这里推荐第二中方式,即本项目使用的方式,

直接使用相对路径描述资源。如:<resource uri="~/Res/Objects/BLLObjects.xml"/>。符号"~"代表根目录。

 1   <spring>
2 <context>
3 <!--assembly://程序集名/命名空名/文件名(程序集内嵌资源)-->
4 <!--<resource uri="assembly://MyBlog.BLL/MyBlog.BLL/Objects.xml"/>-->
5 <resource uri="config://spring/objects" />
6 <resource uri="~/Res/Objects/TestObjects.xml"/>
7 <!--数据库连接对象-->
8 <resource uri="~/Res/Objects/DBConfig.xml"/>
9 <resource uri="~/Res/Objects/BLLObjects.xml"/>
10 <resource uri="~/Res/Objects/DALObjects.xml"/>
11 </context>
12 <!--必要-->
13 <objects xmlns="http://www.springframework.net">
14 </objects>
15 </spring>

4)类型定义配置:

BLLObjects.xml文件里面的内容如下所示。诸如此类的文件作用是定义类型,这个是Spring.Net注入的关键。这里解释一下下面配置文件的意思。

每一个object节点,描述了C#代码中的一个类,object节点的id是个身份标记,这个必须是唯一的;type属性描述了具体的类,这个属性由类的全名+逗号+类的命名空间构成。

例如type="MyBlog.BLL.ArtiCaManager,MyBlog.BLL"。这里描述的是BLL层中的ArtiCaManager类。而object节点下面的property 属性则是描述了这个类下面的属性,这是本项目依赖注入的关键(本项目采用的注入方式只要是属性注入和构造注入)。例如节点 :

<property name="ArtiCaDao" ref="ArtiCaDao"></property> 。

这个是ArtiCaManager类下面的属性:

public IArtiCaDao ArtiCaDao { get; set; } //文章类别数据操作类。

这个属性节点的作用是描述了IArtiCaDao接口实例化的类型是ArtiCaDao(ref="ArtiCaDao">)。而ref属性里面写的是object节点的ID,作用也是描述了一个类型。

 1 <?xml version="1.0" encoding="utf-8" ?>
2
3 <objects xmlns="http://www.springframework.net"
4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5 xsi:schemaLocation="http://www.springframework.net
6 http://www.springframework.net/xsd/spring-objects.xsd">
7 <!--类型的全名,然后是一个逗号,最后是类型所在的程序集名称-->
8 <!--<object id="ArtiCaMana" type="MyBlog.BLL.ArtiCaManager, MyBlog.BLL" />-->
9
10 <object id="ArtiCaMana" type="MyBlog.BLL.ArtiCaManager,MyBlog.BLL">
11 <property name="ArtiCaDao" ref="ArtiCaDao"></property>
12 </object>
13
14 <object id="LogMana" type="MyBlog.BLL.LogManager,MyBlog.BLL">
15 <property name="iLogDao" ref="LogDao"></property>
16 </object>
17
18 <object id="DeptMana" type="MyBlog.BLL.DepartmentManager,MyBlog.BLL">
19 <property name="iDepartmentDao" ref="DepartmentDao"></property>
20 </object>
21
22 </objects>

5)代码实现:

BLL层ArtiCaManager类代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MyBlog.Model;
using MyBlog.IDAL;
using Spring.Context;
using Spring.Context.Support;
using MyBlog.IBLL; namespace MyBlog.BLL
{
/// <summary>
/// 文章类别管理业务逻辑类
/// </summary>
public class ArtiCaManager : IArtiCaManager
{ public IArtiCaDao ArtiCaDao { get; set; } //文章类别数据操作类 /// <summary>
/// 插入文章类别
/// </summary>
/// <param name="arCa">文章类别实体类</param>
/// <returns>是否插入成功</returns>
public bool InsertCa(ArticleCategory arCa)
{
arCa.CategoryName = arCa.CategoryName+ "[这里是调用了文章类别管理类BLL接口插入的]"; //仅供测试留个记号
return ArtiCaDao.InsertCa(arCa);
} /// <summary>
/// 取出所有文章类别
/// </summary>
/// <returns>文章类别列表</returns>
public IList<ArticleCategory> SelectAllCa()
{
return ArtiCaDao.SelectAllCa();
}
}
}

 四、结论

Spiring.Net的依赖注入,主要是利用了.Net反射的特性,在xml中定义了.Net中某个对象的类型,然后框架自动实例化,好处在于提高软件的灵活性,特别是对于一个接口有多个实现的场景。

一个小问题整了两天,哎,还是太嫩了,还要继续努力呀

原文链接:https://www.cnblogs.com/still-windows7/archive/2013/04/09/2826743.html

Spring.Net依赖注入(属性注入)学习笔记的更多相关文章

  1. spring注入 属性注入 构造器注入 set方法注入

    spring注入 属性注入 构造器注入 set方法注入(外部bean注入)

  2. spring练习,使用Eclipse搭建的Spring开发环境,属性注入通过构造方法方式实现,模拟用户的正常登录。

    相关 知识 >>> 相关 练习 >>> 实现要求: 使用Eclipse搭建的Spring开发环境,属性注入通过构造方法方式实现,模拟用户的正常登录.要求如下: 通过 ...

  3. spring mvc 及NUI前端框架学习笔记

    spring mvc 及NUI前端框架学习笔记 页面传值 一.同一页面 直接通过$J.getbyName("id").setValue(id); Set值即可 二.跳转页面(bus ...

  4. Spring.Net依赖注入(属性注入)

    一.前言: Spring.Net是Java开源框架迁移过来的,主要分为 1)依赖注入 2)面向方面编程 3)数据访问抽象 4)Asp.Net扩展 四个模块功能,这里只是简单介绍依赖注入模块功能. 对于 ...

  5. Spring中@value以及属性注入的学习

    1.简单的Java配置 配置文件(jdbc.properties) jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://1 ...

  6. Spring中集合类型属性注入

    我们都知道如何去注入普通属性的值,非常简单,那么我们如何去注入开发中常见的集合类型的属性了,别急,往下看. 这里将介绍如何给Map list set Array Properties 这些属性注入值. ...

  7. Spring boot将配置属性注入到bean类中

    一.@ConfigurationProperties注解的使用 看配置文件,我的是yaml格式的配置: // file application.yml my: servers: - dev.bar.c ...

  8. Spring Bean 注入 1 - 构造方法注入,属性注入,自动装配

    1.代码结构图 xxx 2.bean代码 package com.xxx.bean; /** * Created with IntelliJ IDEA. * User: zhenwei.liu * D ...

  9. Spring boot将配置属性注入到bean 专题

    https://blog.csdn.net/wangmx1993328/article/details/81002901 Error starting ApplicationContext. To d ...

随机推荐

  1. 5 年 Python 的我,总结了这 90 条写 Python 程序的建议

    自己写 Python 也有四五年了,一直是用自己的“强迫症”在维持自己代码的质量.都有去看Google的Python代码规范,对这几年的工作经验,做个简单的笔记,如果你也在学pythpn,准备要学习p ...

  2. Ternary weight networks

    Introduction 这两天看了一下这篇文章,我就这里分享一下,不过我还是只记录一下跟别人blog上没有,或者自己的想法(ps: 因为有时候翻blog时候发现每篇都一样还是挺烦的= =) .为了不 ...

  3. 【av68676164(p38-p40)】进程调度

    6.1 进程调度概念 进程调度 在合适的时候以一定策略选择一个就绪进程运行 进程调度的目标 响应速度尽可能快 进程处理的时间尽可能短 系统吞吐量尽可能大 资源利用率尽可能高 对所有进程要公平 避免饥饿 ...

  4. C#LeetCode刷题-双指针

    双指针篇 # 题名 刷题 通过率 难度 3 无重复字符的最长子串   24.5% 中等 11 盛最多水的容器   43.5% 中等 15 三数之和   16.1% 中等 16 最接近的三数之和   3 ...

  5. 面试题——20+Vue面试题整理

    0.那你能讲一讲MVVM吗? MVVM是Model-View-ViewModel缩写,也就是把MVC中的Controller演变成ViewModel. Model层代表数据模型,View代表UI组件, ...

  6. 使用css设置边框背景图片

    使用css的特有属性,给不同的盒子添加边框图片. 为什么会有这一场景呢.因为,UI给我们前端的边框图片可能未必适合我们当前的内容. 这里我们主要使用到的属性有: border-image-source ...

  7. 区分多个web driver实例

    固然可以用加载不同cookie的办法,让3个帐号共享一个web driver登陆,但总感觉切换麻烦,干脆用了3个web driver实例.问题来了,如何区分?不是说程序里如何区分,机器比人聪明,知道外 ...

  8. python2.7用socks和socket设置代理

    接下来是最近遇到的一个代理问题. 背景:一个基于python2.7的自动化测试项目 目的:因调试需求,需要通过代理连接其他公司的前端网站,来检验项目运行所在的问题. 问题:RUN>等了1分钟没有 ...

  9. TypeScript 安装及基础运行环境搭建

    安装 TypeScript npm install -g typescript 安装成功后,命令行输入 tsc -v 命令提示当前安装的 TypeScript 版本: 出现版本号即安装成功. 使用 V ...

  10. 基于官方Drone-CI 的alpine版本asia亚洲时区构建支持. Drone-CI based alpine Timezone Build

    基于官方Drone-CI 的alpine版本最简化添加亚洲时区Dockerfile构建支持. iotd@Github: drone-ci-based-alpine-timezone-build 如添加 ...