这是我的JAVA学习笔记的第一篇,由于本身就不是写给外人看的,所以可能写的有些随意,而且由于水平有限还会出现一些个人的错误理解,欢迎无意中看到这一系列的高手指正,谢谢!
我当初开始学习JAVA,其实是直接从Spring开始啃的,因为草草扫了一遍JAVA的语法发现跟C#几乎是一摸一样,于是就跳过了。在加上之前对于设计模式也缺乏足够的了解,这也就导致了我学Spring的时候稍显吃力,所幸还是啃下来了。
本系列适用于已经对Spring有了初步了解,想要温故知新的同学。完全初学的估计看起来够呛,不过也可以先扫一遍,大概的了解一下,少走弯路。我会特别强调一下一些新手需要注意的东西,也是当初我初学的时候碰到过的问题。
第一篇,首先是Hello,World的预览
一、编写环境:
1、创建项目:
先是创建一个JAVA项目,如果用的J2EE版的,就直接创建一个Dynamyc Web项目好了,这里我用的是后者来示例。
2、添加依赖库:
这里要添加至少两个依赖库,一个是Spring.jar不用说了,还有一个是Spring的依赖库:spring-framework-2.5.6\lib\jakarta-commons\commons-logging.jar
如果不加这个库,获取ApplicationContext的时候就会报错,内容为:
java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
...
...
我猜测是Spring库内置了log模块,依赖于commons-logging这个库,所以只加载Spring核心库是不行的。暂时没时间去深究这个,如果有精通Spring的大侠可以帮忙解惑一下的话感激不尽。
如果只是加载这两个库,其实已经是可以跑HelloWorld了,但是如果只是这样的话,运行的时候控制台会在运行结果出来之前先输出几行红色的LOG记录文字,比较烦人。
要是你像我一样觉得烦的话,可以再加载一个log4j库,这个库的文件路径为:
spring-framework-2.5.6\lib\log4j\log4j-1.2.15.jar
然后再在项目的src目录下新建一个log4j.properties文件,里面的内容为:
log4j.rootLogger=WARN, stdout, R
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=example.log
log4j.appender.R.MaxFileSize=100KB
# Keep one backup file
log4j.appender.R.MaxBackupIndex=1
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
# Print only messages of level WARN or above in the package com.foo.
log4j.logger.com.foo=WARN
关于log4j的详细介绍可以google一下,总之主要功能就是更方便的管理项目的log记录,很常用。
以上,这个Spring的HelloWorld编写环境都已经具备了,下面开始代码部分。
二、代码部分
1、新建一个action包,例如:com.iteye.bolide74.action
2、新建action类,例如HelloWorld
类的内容如下:
package com.iteye.bolide74.action;
public class HelloWorld {
public String msg;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
小技巧:set/get方法可以由eclipse自动生成:
例如先写一个类属性:public String msg;
然后快捷键Alt+Shift+s,跳出菜单里就有“生成Getter和Setter”,当然还有其他的方便功能都可以试一下
3、在/WebContent/WEB-INF目录下新建一个conf目录,在这个目录里新建一个config.xml文件
当然在项目根目录或者其他路径也都可以,不过一般推荐在WEB-INF目录下,因为这个目录对于web访问者来说是隐藏掉的,无法访问,这样安全性比较高。
conf目录名和config.xml文件名都可以自己随意写,不过一定要有命名规范。
config.xml的内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="HelloWorld" class="com.iteye.bolide74.action.HelloWorld">
<property name="msg">
<value>Hello,World!</value>
</property>
</bean>
</beans>
这里先简单介绍一下:这个XML的结构是固定的,功能有点类似于一个windows的注册表。
一个<bean>就相当于一个功能模块,可以把它想象成C++里的一个COM组件可能比较容易理解。
如果有多个bean就继续在<beans>根节点下加新的<bean>节点。bean的id可以随便写,但是class要对应某个功能模块的类的"路径",就是包+类名。
<property>节点顾名思义就是需要“注入”(注入概念稍后几章解释)的类属性,所以这里的name的值为"msg"。
<value>子节点自然就是代表了注入msg这个类属性的值。可以是任意字符串。
4、新建实现类包,例如com.iteye.bolide74.tester
5、新建实现类,例如HelloWorldTester,代码如下:
package com.iteye.bolide74.tester;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import com.iteye.bolide74.action.HelloWorld;
public class HelloWorldTester {
public static void main(String[] args) {
ApplicationContext ac = new FileSystemXmlApplicationContext(
"/WebContent/WEB-INF/conf/config.xml");
HelloWorld helloWorld = (HelloWorld) ac.getBean("HelloWorld");
System.out.println(helloWorld.getMsg());
}
}
PS:1)这里的"/WebContent/WEB-INF/conf/config.xml"为你的config.xml的路径,如果上面你改成你自己的了,这里的话也要相应的改掉。
2)获取这个XML不是只有FileSystemXmlApplicationContext这么一个方法,还有另外一个ClassPathXmlApplicationContext方法,区别在于一个是根据文件系统来找的,一个是根据ClassPath来找的,这个看方法名也就知道了,详细的以后再讲。
3)getBean("HelloWorld")方法里的参数"HelloWorld"即config.xml里那个bean的id,如果你改成了自己的,记得这里相对应的也要改掉!
6、编译运行,就可以看到控制台的输出结果:"Hello,World!"
小结:好玩的东西来了,当你想要让这个功能模块输出不同的结果时,就不用编写任何代码了,只需要修改config.xml文件里的那个<value>的值,就能直接输出修改后的值。
这样的话最明显的优势就在于,如果是一个很庞大的功能模块,我们想要得到不同的结果,就不需要重新编译这个程序,甚至不用打开eclipse等IDE工具,用个记事本修改一下这个XML相应的内容就行了。这对于一些编译一下都要很久的程序是很舒服的。
还有一个明显优势,就是在一些需要7*24小时服务的WEB服务上,可以实现修改功能的热插拔,也就是不需要暂停服务,只要改掉这个XML,无需重启就能马上改掉这个功能。牛B吧!
这两点也是为什么我不太提倡所谓零配置的“注解注入”的原因,这个以后再讲,这章就先这样吧,有兴趣可以改一下这几段代码,看看哪些是可以改的,哪些是不能改的,增强了解。
下一篇:Spring温故知新(二) IoC控制反转与DI依赖注入
http://bolide74.iteye.com/blog/998650
分享到:
相关推荐
Spring框架的核心特性之一就是AOP(Aspect Oriented Programming,面向切面编程)。AOP提供了一种模块化和声明式的方式来处理系统中的横切关注点,如日志、事务管理、权限检查等。在OOP(面向对象编程)中,这些关注...
在IT行业中,编程初学者经常会接触到“Hello World”项目,这是一个经典的入门级示例,用于演示如何在不同的编程语言中打印出“Hello, World!”这一简单语句。在这个名为"playground"的仓库中,我们可以推测它是一个...
标题中的"spring_2021.7.14.zip"表明这是一份关于Spring框架的资料,时间戳为2021年7月14日,可能包含了该日期前后的学习或项目经验总结。描述中提到是"项目源码笔记",适合"入门级别或者复习用",意味着这份资料...
标题中的“hi_world”似乎是一个典型的编程示例项目名,暗示我们要探讨的是与编程相关的知识,特别是与Python语言有关。描述中的“让我们再打个招呼世界”直接指向了编程中最基础的“Hello, World!”程序,这是一个...
对于经验丰富的开发者,它则可以帮助温故知新,快速回忆起Spring的各项技术。 首先,Spring的核心组件包括Spring Core和Spring Beans,它们提供了依赖注入(DI)和面向切面编程(AOP)的基础。依赖注入使得对象之间...
这段代码定义了一个名为HelloWorld的公共类,其中包含一个main方法,这是Java程序的入口点。`System.out.println`是输出语句,用于在控制台打印指定的内容。 在理解了基本语法后,我们转向面向对象编程(OOP)的...
《SpringCloud视频学习6-2》是一段深入浅出的教程,主要针对SpringCloud这一流行的微服务框架进行讲解。SpringCloud作为一个完整的微服务解决方案,它提供了包括服务注册与发现、配置中心、全链路监控、熔断器、负载...
spring cloud + openshift example
常用的spring注解大全,适合新手学习、老手温故知新。读懂spring,平步青云。
Spring Cloud Config 是一个用于分布式系统配置管理的框架,它允许开发者在远程服务器上集中管理和版本化应用的配置,而不是在每个应用本地存储配置。这种方式在微服务架构中尤其有用,因为多个独立的服务需要共享和...
本文将深入探讨这些技术,帮助开发者温故知新,理解它们的功能、工作原理以及如何在实际项目中应用。 ### JSP(JavaServer Pages) JSP是一种动态网页技术,它允许开发者在HTML页面中嵌入Java代码,以实现动态内容...
初中语文文学讨论现当代文学温故知新
ASP.NET 2.0是微软开发的一个用于构建Web应用程序的框架,它基于.NET Framework,提供了丰富的功能和强大的性能。C#是一种面向对象的编程语言,是ASP.NET开发的主要语言之一,以其简洁、类型安全和高性能著称。在这...
中信建设温故知新,从 4G 看 5G.pdf
- `helloWorld` - **GESP 一级考试时长**:GESP一级考试的时长通常为90分钟。 - **考试题目分类**:考试题目分为选择题、填空题和编程题。选择题和填空题每题10分,共100分;编程题每题50分,共200分。 ##### 课前...
1. 工业机器人行业概述:工业机器人是机械工程中的一种高科技自动化设备,主要应用于汽车制造、电子电器、化学橡胶塑料、金属制品、食品制造等多个行业。根据国际机器人联合会(IFR)的统计数据,2019年全球工业...
首先,我们看到的是"01firstapplication.pdf",这是Java入门的第一步,通常会讲解如何安装Java开发环境(JDK),编写第一个"Hello, World!"程序,以及理解Java的基础语法,包括变量、数据类型、运算符、流程控制语句...
《中信建设温故知新,从 4G 看 5G》这份资料主要探讨了移动通信技术从第四代(4G)到第五代(5G)的演进过程,以及这一演变带来的技术创新和产业影响。4G 和 5G 作为两个重要的通信时代,它们之间的差异和联系构成了...
- **编写输出HelloWorld的Servlet文件HelloWorld.java**:创建一个简单的Servlet类,重写`doGet`方法以输出“HelloWorld”。 - **编写配置文件web.xml**:在`web.xml`中配置Servlet的相关信息。 - **运行Servlet...