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