Spring-demo1(初学者的尝试,2015.03.19)

时间:2023-03-09 17:53:03
Spring-demo1(初学者的尝试,2015.03.19)

项目结构:

Spring-demo1(初学者的尝试,2015.03.19)

Spring-demo1(初学者的尝试,2015.03.19)
源代码如下:
 package com.bean;
public interface Person {
public void Speak();
}
 package com.bean;
public class AmericanImpl implements Person {
private String name;
private int age; public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
} @Override
public void Speak() {
// TODO Auto-generated method stub
System.out.println("I'm American,My name is" + this.name + ",I'm" + this.age + " years old!");
}
}
  1.  package com.bean;
    public class ChineseImpl implements Person {
    private String name;
    private int age; public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    public int getAge() {
    return age;
    }
    public void setAge(int age) {
    this.age = age;
    }
    @Override
    public void Speak() {
    // TODO Auto-generated method stub
    System.out.println("I'm Chinese,My name is" + this.name + ",I'm" + this.age + " years old!");
    }
    }
  1.  package com.spring;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    import com.bean.Person;
    public class Test {
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
    Person person = (Person)context.getBean("chinese");
    person.Speak();
    person = (Person)context.getBean("american");
    person.Speak();
    }
    }

Spring-demo1(初学者的尝试,2015.03.19)
applicationContext.mxl 是在 src 的目录下,文件代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd ">
  <!-- 配置 Chinese实例,其实现类为com.bean.ChineseImpl -->
  <bean id="chinese" class="com.bean.ChineseImpl">
    <property name="name">
      <value>小明</value>
    </property>
    <property name="age">
      <value>10</value>
    </property>
  </bean>
  <bean id="american" class="com.bean.AmericanImpl">
    <property name="name">
      <value>Tom</value>
    </property>
    <property name="age">
      <value>15</value>
    </property>
  </bean>
</beans>

下面问题来了:
遇到问题1:
上面的代码是正确的,我之前由于是用 eclipse 配置的 spring-beans-3.2.xsd;
然后我创建 xml 时引用 xsd,elipse 生成的代码如下,缺少了上面黄色部分的代码
<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans "> </beans>

其余代码正确,会报如下错误:
 Exception in thread "main" org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 1 in XML document from class path resource [applicationContext.xml] is invalid; nested exception is org.xml.sax.SAXParseException; systemId: http://www.springframework.org/schema/beans/; lineNumber: 1; columnNumber: 55; 在 publicId 和 systemId 之间需要有空格。
    ……
Caused by: org.xml.sax.SAXParseException; systemId: http://www.springframework.org/schema/beans/; lineNumber: 1; columnNumber: 55; 在 publicId 和 systemId 之间需要有空格。
    …… 

Spring-demo1(初学者的尝试,2015.03.19)
这些 jar 包都是必须的,缺一不可;

Spring开发一定会引入下面这两个 jar 包:

Spring-demo1(初学者的尝试,2015.03.19)
pring-core.jar:
这个jar文件包含Spring框架基本的核心工具类,Spring其它组件要都要使用到这个包里的类,是其它组件的基本核心,当然你也可以在自己的应用系统中使用这些工具类
spring-beans.jar:
这个jar文件是所有应用都要用到的,它包含访问配置文件、创建和管理bean以及进行Inversion of Control / Dependency Injection(IoC/DI)操作相关的所有类。
如果应用只需基本的IoC/DI支持,引入spring-core.jar及spring- beans.jar文件就可以了

下面问题来了,缺了会报什么错呢?

Spring-demo1(初学者的尝试,2015.03.19)

ApplicationContext cannot be resolved to a type    

ClassPathXmlApplicationContext cannot be resolved to a type
这是因为缺少了Spring-demo1(初学者的尝试,2015.03.19)
spring-context.jar:
这个jar文件为Spring核心提供了大量扩展。可以找到使用Spring ApplicationContext特性时所需的全部类,JDNI所需的全部类,UI方面的用来与模板(Templating)引擎如 Velocity、FreeMarker、JasperReports集成的类,以及校验Validation方面的相关类

Spring-demo1(初学者的尝试,2015.03.19)
加入这三个jar包之后,运行报如下错误:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
    ……
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
    ……
这是因为缺少了Spring-demo1(初学者的尝试,2015.03.19)
commons-logging-1.2.jar 
Apache Commons包中的一个,包含了日志功能,必须使用的jar包。

Spring-demo1(初学者的尝试,2015.03.19)
现在加入了四个 jar 包,运行报如下错误:
Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/expression/PropertyAccessor
    ……
Caused by: java.lang.ClassNotFoundException: org.springframework.expression.PropertyAccessor
    …… 
这是因为缺少了Spring-demo1(初学者的尝试,2015.03.19)
spring-expression.jar:Spring表达式语言

好了,现在终于可以运行得到结果了:
Spring-demo1(初学者的尝试,2015.03.19)

 渣渣就得在 Bug 中挣扎!

附件列表