Spring.net 控制反转(IOC)依赖注入(DI)的使用 以及Config文件的配置

本文详细介绍Spring.NET中IOC容器的配置步骤与使用方法,包括DLL文件导入、配置文件设置及程序实例化过程。

                                                  IOC


一 、把   \Spring.Net\Spring.NET-2.0.0-M1\Spring.NET\bin\net\4.0\release下的 三个核心文件   Spring.Core.dll   Spring.Core.xml  Spring.Core.pdb  以及错误日志文件Common.Logging.dll   放在解决方案根目录下的lib文件夹,并在项目中添加两个dll文件的引用。  

     注意:1、configSections 节点必须是configuration节点中的第一个节点

          2、object节点必须在objects节点中

         3、如果在一个控制器中配置了多余的 属性  当访问到这个控制器的时候会因为多余的属性在控制器中找不到对应的变量或属性而报'ActionInfoService' node cannot be resolved for the specified context [Core.ProjectOA.WebApp.Controllers.HomeController].   这时候把提示中的控制器中的对应节点在xml config文件中删除即可(或者在程序中对应的控制器下添加对应的属性) 所以 在写代码过程中 xml文件中控制器下节点要随着用到随着添加,一旦对应属性被删除了 要记得去config文件中删节点

      配置文件app.config :

<?xml version="1.0" encoding="utf-8"?>
<configuration>
 
  <configSections> //   添加这个节点以及里面的内容,固定不用改(<span style="font-size:24px;color:#ff0000;">注意这个节点必须是configuration中的第一个节点  否则会报错</span>)
    <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> //这个节点本来是默认 的第一个节点   要让位给configSections
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2"/>
  </startup>
  <spring>  //添加这个节点 
    <context>
      <resource uri="config://spring/objects"/>
    </context>
    <objects xmlns="http://www.springframework.net">
      <description>An  example that demonstrates simple IoC features.</description>
      <object name="节点名(不一定但最好是类名,<span style="color:#ff0000;">跟后面程序中GetObject(object节点名)方法的参数必须一致</span>)" type="命名空间.要创建的类名,程序集">    </object>
    </objects>  //<span style="color:#ff0000;">注意object 在objects节点里</span>
  </spring>
</configuration>

 程序中创建类的实例   

 IApplicationContext ctx = ContextRegistry.GetContext();//创建容器
 IUserInfoService userInfoService = (IUserInfoService)ctx.GetObject(object节点名); //创建实例

                                          DI

 步骤:

1先导入dll文件 (主要是Spring开头的,其他的可能会缺少,少哪个引哪个)   如图

 2 拷贝案例中config文件夹到项目中

3 修改config文件夹中controllers.xml相关配置信息

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

  <object type="Core.ProjectOA.WebApp.Controllers.UserInfoController, Core.ProjectOA.WebApp" singleton="false" >
    <property name="UserInfoService" ref="UserInfoService" />
  </object>
  <!--intentionally do NOT register the AccountController or the ValuesController with the container; demonstrates that the underlying
  default controller factory will properly (attempt to!) resolve all controllers not registered with Spring.NET
  using its default controller resolution behavoir-->
  <!--<object type="Spring.Mvc4QuickStart.Controllers.AccountController, Spring.Mvc4QuickStart" singleton="false" />-->
  <!--<object type="Spring.Mvc4QuickStart.Controllers.ValuesController, Spring.Mvc4QuickStart" singleton="false" />-->
</objects>
4  可以将config/controllers.xml文件中配置分离(控制器的配置和业务类的配置分离)注意web.config文件中也要修改添加相应的引用

<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net">
  <object name="UserInfoService" type="Core.ProjectOA.BLL.UserInfoService, Core.ProjectOA.BLL" singleton="false" >
  </object>
</objects>
5 修改web.config文件夹中配置信息

<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=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
    <sectionGroup name="spring">
      <section name="context" type="Spring.Context.Support.MvcContextHandler, Spring.Web.Mvc4"/>
    </sectionGroup>
  </configSections>
  <spring>
    <context>
      <resource uri="file://~/Config/controllers.xml"/>
      <resource uri="file://~/Config/services.xml"/>
    </context>
  </spring>

6  修改Global文件 继承SpringMvcApplication

public class MvcApplication : SpringMvcApplication





    

### IOC控制反转)和DI依赖注入) #### 什么是IoC IoC控制反转,是一种设计模式,其核心在于将原本由程序代码直接操控的对象创建过程交给了专门的容器来处理。这样做的主要目的是为了减少组件之间的耦合度,使得应用程序更加模块化、易于管理和扩展[^1]。 在传统的编程模型中,调用者负责初始化它所需要的资源和服务;而在采用IoC的设计里,则是由外部环境——通常是框架或库,在适当的时候提供这些必要的协作对象给调用方使用[^2]。 #### 什么是DI DI代表依赖注入,这是实现IoC的一种具体方法论。通过这种方式可以更清晰地表达出各个软件单元之间存在的相互依存关系,并且简化了新功能加入时所需修改的工作量。简单来说,就是让某个类不需要自己去寻找它的依赖项而是被动接收它们[^3]。 对于开发者而言,这意味着可以在不改动原有逻辑的前提下轻松替换掉某些特定部分的功能实现,从而提高了系统的灵活性以及便于进行单元测试等活动[^4]。 #### 实现方式 ##### XML配置文件 早期版本中的Spring应用广泛采用了基于XML的方式来进行Bean定义: ```xml <beans> <!-- 定义UserServiceImpl bean --> <bean id="userService" class="com.example.service.UserServiceImpl"> <!-- 设置属性值 --> <property name="userRepository" ref="userRepository"/> </bean> <!-- 定义UserRepositoryImpl bean --> <bean id="userRepository" class="com.example.repository.UserRepositoryImpl"/> </beans> ``` 上述例子展示了如何利用`<bean>`标签声明服务层与数据访问层间的关联关系,其中`ref`关键字用于指示目标引用另一个已注册过的Bean实例。 ##### Java Config 随着Java语言的发展,越来越多的人倾向于使用纯编码的方式来完成同样的事情: ```java @Configuration public class AppConfig { @Bean public UserService userService() { return new UserServiceImpl(userRepository()); } @Bean public UserRepository userRepository(){ return new UserRepositoryImpl(); } } ``` 这段代码片段同样表达了相同的内容,但是是以更为直观的形式呈现出来的。这里借助于`@Configuration`注解标记该类为配置源之一,而内部的方法则分别对应着不同类型的工厂方法,用来生产相应的单例对象供整个上下文共享使用。 ##### 注解驱动 最后一种也是目前最流行的做法便是依靠各种各样的元数据标注来自动生成所需的映射表结构: ```java @Service public class UserServiceImpl implements UserService{ private final UserRepository userRepository; @Autowired public UserServiceImpl(UserRepository userRepository){ this.userRepository = userRepository; } } @Repository public class UserRepositoryImpl implements UserRepository{} ``` 在这个场景下,只要确保所有参与组装操作的角色都已经被正确地标记上了合适的标签即可,剩下的工作交给Spring Boot自动完成就好。特别是当涉及到大量第三方库集成的情况下,这种方法的优势尤为明显。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值