《Spring敲门砖之基础教程第一季》 第二章(1) Spring框架之IOC首例-HelloWorld

回顾

上一章我们主要学习了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更多精彩的功能。

声明:

本文介绍纯属个人观点,如果不对的地方欢迎批评指正,让我们共同进步,朝着正确的方向前进。如果您喜欢本文请关注下面公众账号获取最新文章,您的支持是我前行的动力。

原文发布于微信公众号 - 架构师之旅(TravelWithFrame)

原文发表时间:2016-08-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏吉浦迅科技

DAY71:阅读Device-side Launch from PTX

我们正带领大家开始阅读英文的《CUDA C Programming Guide》,今天是第71天,我们正在讲解CUDA 动态并行,希望在接下来的30天里,您可以...

14020
来自专栏Java架构师学习

浅析Netty

Netty是JBoss出品的高效的Java NIO开发框架,关于其使用,可参考我的另一篇文章 netty使用初步。本文将主要分析Netty实现方面的东西,由于精...

17110
来自专栏喵了个咪的博客空间

[喵咪开源软件推荐(4)]Liunx跑分神器-unixbench

[喵咪开源软件推荐(4)]Liunx跑分神器-unixbench #w-blog博客 ? 哈喽大家好呀! 这次给大家带来一个Liunx跑分神奇,在笔者在老早之前...

38460
来自专栏技术小黑屋

Android代码规范利器: Checkstyle

程序代码向来都不仅仅是用来运行的,写的一手好代码,易读,可维护应该是每个程序员所追求的。

15510
来自专栏技术博客

Ioc模式和MEF

  分离关注( Separation of Concerns : SOC)是Ioc模式和AOP产生最原始动力,通过功能分解可得到关注点,这些关注可以是 组件Co...

9520
来自专栏逸鹏说道

360护心镜脚本分析及N种绕过方式

官方介绍: 通过Hook XSS的常用函数,并监控DOM元素的创建,从而对整个页面的js行为进行监控。当发现页面中存在XSS攻击行为时,可根据预置的选项,进行放...

40180
来自专栏林冠宏的技术文章

关于Android中为什么主线程不会因为Looper.loop()里的死循环卡死?引发的思考,事实可能不是一个 epoll 那么 简单。

( 转载请务必标明出处:https://cloud.tencent.com/developer/user/1148436/activities) 前序 本文将...

35850
来自专栏battcn

一起来学SpringBoot | 第二十二篇:轻松搞定重复提交(一)

在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发...

44420
来自专栏枕边书

在Spring-Boot中实现通用Auth认证的几种方式

最近一直被无尽的业务需求淹没,没时间喘息,终于接到一个能让我突破代码舒适区的活儿,解决它的过程非常曲折,一度让我怀疑人生,不过收获也很大,代码方面不明显,但感觉...

10900
来自专栏工科狗和生物喵

FreeRTOS-Qemu 实现三任务同步通信机制以及API信息

---- 1. 本次作业的考察要点: 作业地址:https://github.com/HustWolfzzb/STM32F429DiscoveryFreeRTO...

1.2K60

扫码关注云+社区

领取腾讯云代金券