Spring.Net学习笔记(0)-错误汇总

1.错误一:ObjectDefinitionStoreException

“Spring.Objects.Factory.ObjectDefinitionStoreException”类型的未经处理的异常在 Spring.Core.dll 中发生

通过看详细信息,原来是找不到文件

未能找到文件“F:20160221DemoCPrjinDebugobjects.xml”。

处理方式:将objects.xml的【复制到输出目录】设置为始终复制

2.错误二:annotLoadObjectTypeException

“Spring.Core.CannotLoadObjectTypeException”类型的未经处理的异常在 Spring.Core.dll 中发生

通过看详细信息,原来是找不到对象的定义

Cannot resolve type [Person] for object with name 'Person' defined in file [F:20160221DemoCPrjinDebugobjects.xml] line 3

处理方式

<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net">
  <object id="Person" type="CPrj.Person,Cprj"></object>
</objects>

3.错误三:ConfigurationErrorsException

“System.Configuration.ConfigurationErrorsException”类型的未经处理的异常在 Spring.Core.dll 中发生

查看详细信息,原来是找不到配置文件(obejcts拼错了)

Error creating context 'spring.root': 未能找到文件“F:20160221DemoCPrjinDebugobejcts.xml”。

处理方式

<spring>
    <context>
      <resource uri="file://objects.xml"></resource>
    </context>
  </spring>

4.错误四:TypeInitializationException

“System.TypeInitializationException”类型的未经处理的异常在 CPrj.exe 中发生

查看详细信息

“Spring.Context.Support.ContextRegistry”的类型初始值设定项引发异常。

处理方式:把<startup>放到最后一个节点

<?xml version="1.0" encoding="utf-8" ?>
<configuration>

  <configSections>
    <sectionGroup name="spring">
      <section name="context" type="Spring.Context.Support.ContextHandler,Spring.Core"></section>
    </sectionGroup>
  </configSections>

  <spring>
    <context>
      <resource uri="file://objects.xml"></resource>
    </context>
  </spring>

  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
</configuration>

5.使用属性注入时,报了如下错

Error creating context 'spring.root': 'MovieFinder' node cannot be resolved for the specified context [Spring.Examples.MovieFinder.MovieLister

意思是说,在MovieLister类中,找不到属性名为MovieFinder项

看了下配置文件,如下

<objects xmlns="http://www.springframework.net">
      <object name="MyMovieLister" type="Spring.Examples.MovieFinder.MovieLister,Spring.Examples.MovieFinder">
        <property name="MovieFinder" ref="MyMovieFinder"></property>
      </object>
      <object name="MyMovieFinder" type="Spring.Examples.MovieFinder.MovieFinder,Spring.Examples.MovieFinder"></object>
      <!--<description>An example that demonstrates simple Ioc features</description>-->
    </objects>

再看下MovieLister类

public class MovieLister
{
    private MovieFinder finder;
    public List<Movie> MoviesDirectedBy()
    {
        List<Movie> allMovies = finder.FindAll();
        return allMovies;
    }
}

发现问题了,不是MovieFinder,是finder;配置文件改成如下,就OK了

<objects xmlns="http://www.springframework.net">
  <object name="MyMovieLister" type="Spring.Examples.MovieFinder.MovieLister,Spring.Examples.MovieFinder">
    <property name="finder" ref="MyMovieFinder"></property>
  </object>
  <object name="MyMovieFinder" type="Spring.Examples.MovieFinder.MovieFinder,Spring.Examples.MovieFinder"></object>
  <!--<description>An example that demonstrates simple Ioc features</description>-->
</objects>

6.在构造函数注入是报如下错

Error creating context 'spring.root': Cannot instantiate a class that does not have a no-argument constructor [Spring.Examples.MovieFinder.ColonMovieFinder].

原来Spring容器默认在加载的时候,都会尝试预先创建对象。

处理方式一:给ColonMovieFinder一个无参数的构造函数

处理方式二:在配置文件中提供相应的构造函数参数

<objects xmlns="http://www.springframework.net">
  <object name="MyMovieLister" type="Spring.Examples.MovieFinder.MovieLister,Spring.Examples.MovieFinder">
    <property name="finder" ref="MyMovieFinder"></property>
  </object>
  <object name="MyMovieFinder" type="Spring.Examples.MovieFinder.MovieFinder,Spring.Examples.MovieFinder"></object>
  <object name="AnotherMovieFinder" type="Spring.Examples.MovieFinder.ColonMovieFinder,Spring.Examples.MovieFinder">
    <constructor-arg index="0" value="movies.txt"></constructor-arg>
    <constructor-arg index="1" value="arg2"></constructor-arg>
  </object>
  <!--<description>An example that demonstrates simple Ioc features</description>-->
</objects>

7.xml错误

错误代码如下

Error creating context 'spring.root': Unable to locate Spring NamespaceHandler for XML schema namespace []

看了下xml

<objects>
  <object name="person" type="SpringNetSetDi.Person,SpringNetSetDi">
    <property name="RealName" value=""></property>
  </object>

  <object name="animal" type="SpringNetSetDi.Animal,SpringNetSetDi">
    <property name="TypeList">
      <list element-type="string">
        <value>哺乳类</value>
        <value>鸟类</value>
        <value>爬行类</value>
        <value>昆虫类</value>
        <value>两栖类</value>
      </list>
    </property>
  </object>
</objects>

处理方式,objects处加上属性

<objects  xmlns="http://www.springframework.net">
  <object name="person" type="SpringNetSetDi.Person,SpringNetSetDi">
    <property name="RealName" value=""></property>
  </object>

  <object name="animal" type="SpringNetSetDi.Animal,SpringNetSetDi">
    <property name="TypeList">
      <list element-type="string">
        <value>哺乳类</value>
        <value>鸟类</value>
        <value>爬行类</value>
        <value>昆虫类</value>
        <value>两栖类</value>
      </list>
    </property>
  </object>
</objects>

8.方法注入时,掉进的坑

事情来源,以下怎么改代码,方法都不能被替换

<object name="replaceValue" type="SpringNetMethodDi.SuperMarket,SpringNetMethodDi"></object>
<object name="realOp" type="SpringNetMethodDi.RealOp,SpringNetMethodDi">
  <replaced-method name="Buy" replacer="replaceValue">
    <arg-type match="string"/>
  </replaced-method>
</object>

以下代码是可以运行的,发现不同了没

<object name="replaceValue" type="SpringNetMethodDi.SuperMarket,SpringNetMethodDi"></object>
<object name="realOp" type="SpringNetMethodDi.RealOp,SpringNetMethodDi">
  <replaced-method name="Buy" replacer="replaceValue">
    <arg-type match="String"/>
  </replaced-method>
</object>

不同之处,竟然是string和String

更多精彩内容请看:http://www.cnblogs.com/2star
原文地址:https://www.cnblogs.com/kimisme/p/5204820.html