回顾
上一章我们主要学习了Spring的一些理论知识,对Spring框架有了一个总体的概括,大家应该在头脑里形成一个初步的印象,接下来我们就会针对Spring框架进行一些列的实践讲解,通过例子来展示Sping的魅力。
今天,我们主要讲解一个简单的示例,也是学习每一门语言或者一个工具,大家最通俗易懂,就是“HelloWorld”,我们通过Spring管理Bean,来输出一个“HelloWorld”。
上一章节,我们已经将Spring所有的依赖的jar包下载到制定位置。今天我们来构建一个java项目,并且引入Spring的相关jar,然后使用Spring的IOC来管理Bean。
第一步,首先打开Eclipse开发工具,选择一个新的工作空间目录。新建Java Project
第二步,我们导入Spring相关jar,还有sl4j的日志相关jar
右键选中项目选择Build Path -> Configure Build Path,点击选择Libraries, 选中Add External JARs ,
我们选中Spring下载的所有jar ,还有日志相关的jar。
第三步,我们新建一个java源文件,HelloWord.java和Bootstrap.java,将它们放在包 com.travelwithfram.study下。
其中,HelloWord.java 内容如下:
package com.travelwithfram.study;public class HelloWorld {
private String message; public void getMessage() {
System.out.println("Your Message : " + message);
} public void setMessage(String message) { this.message = message;
}
}
Bootstrap.java内容如下:
package com.travelwithfram.study;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class BootStrap { public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
HelloWorld obj = (HelloWorld) context.getBean("helloWorld");
obj.getMessage();
}
}
第四步,我们创建Beans.xml配置文件,新建一个xml文件,然后在Spring项目的demo里,copy一个项目的xml标签内容。
<?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.0.xsd">
<bean id="helloWorld" class="com.travelwithfram.study.HelloWorld">
<property name="message" value="Hello World!"/>
</bean></beans>
这里的root是<beans>标签,然后在里面可以配置多个<bean>标签,每一个都标示一个被容器管理的bean,这里我们配置了id为"helloWorld",具体指向的类为com.travelwithfram.study.HelloWorld,并且注入了属性property,它的值为"Hello World!",那么Spring在创建这个类的时候,会帮我们自动初始化属性的值。然后我们就可以使用这个属性的值。
第五步,前面所有的配置工作都做好了,我们就可以来检验一下我们的成果了,接下来启动Bootstrap,我们遇到一个小问题,程序启动报了异常,看一下错误:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
at org.springframework.context.support.AbstractApplicationContext.<init>(AbstractApplicationContext.java:164)
at org.springframework.context.support.AbstractApplicationContext.<init>(AbstractApplicationContext.java:228)
at org.springframework.context.support.AbstractRefreshableApplicationContext.<init>(AbstractRefreshableApplicationContext.java:89)
at org.springframework.context.support.AbstractRefreshableConfigApplicationContext.<init>(AbstractRefreshableConfigApplicationContext.java:58)
at org.springframework.context.support.AbstractXmlApplicationContext.<init>(AbstractXmlApplicationContext.java:61)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:136)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
at com.travelwithfram.study.BootStrap.main(BootStrap.java:8)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 8 more
很明显,是因为少了jar包,我们按照异常去排查,发现org.springframework.context.support.AbstractApplicationContext ,下面代码可以看出
/** Logger used by this class. Available to subclasses. */
protected final Log logger = LogFactory.getLog(getClass());
这个里面日志使用的是org.apache.commons.logging.LogFactory的api,所以我们还需要下载.commons.logging的相关jar。下载地址如下
http://commons.apache.org/proper/commons-logging/download_logging.cgi
下载后,添加到项目环境里即可。重新启动Bootstrap,可以看到如下输出:
恭喜吧,证明我们配置的Sping管理bean容器已经可以成功运行。
这节课,我们主要讲述了一个最基本的使用Sping容器的IOC功能,通过配置了一个Sping管理的javabean,我们在使用的过程中,不需要手动去new一个对象,只需要去容器里查找,可以通过id查找,也可以通过类名去查找。最后我们找打了需要的类,直接使用就可以了,也无需关心这个类的整个生命周期,完全交由Sping控制,大家是不是觉得很有意思,后面我们会介绍Spring更多精彩的功能。
本文介绍纯属个人观点,如果不对的地方欢迎批评指正,让我们共同进步,朝着正确的方向前进。如果您喜欢本文请关注下面公众账号获取最新文章,您的支持是我前行的动力。