Spring的Hello World工程
通过Spring的Hello World工程研究以下几个点:
0、如何创建工程及引入依赖。
1、通过Spring的beans.xml实现依赖注入,动态创建实例。
2、了解Spring的工作原理。
具体实现步骤:
1、创建工程
创建工程有两种,命令行和IDE(Eclipse),如果通过命令行创建最后还是要引入Eclipse中去开发,所以下面的创建主要是通过Eclipse去实现。
提示:由于是基于Application的测试,所以这里选择quickstart。
2、配置POM,引入Spring的依赖包
打开pom.xml,加入如下配置:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>com.jsoft.test</groupId>
<artifactId>HelloSpring</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging> <name>HelloSpring</name>
<url>http://maven.apache.org</url> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> <dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency> <!-- Spring Core -->
<!-- http://mvnrepository.com/artifact/org.springframework/spring-core -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.1.4.RELEASE</version>
</dependency> <!-- Spring Context -->
<!-- http://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.1.4.RELEASE</version>
</dependency> </dependencies>
</project>
3、开始编写项目工程代码
整理项目结构如下:
具体代码实现:
HelloWorld.java(创建接口):
package com.jsoft.test.hellospring.helloworld; public interface HelloWorld {
public void sayHello();
}
SpringHelloWorld.java(接口实现):
package com.jsoft.test.hellospring.helloworld.impl; import com.jsoft.test.hellospring.helloworld.HelloWorld; public class SpringHelloWorld implements HelloWorld { @Override
public void sayHello() {
// TODO Auto-generated method stub
System.out.println("Spring say HelloWorld!");
} }
StrutsHelloWorld.java(接口实现):
package com.jsoft.test.hellospring.helloworld.impl; import com.jsoft.test.hellospring.helloworld.HelloWorld; public class StrutsHelloWorld implements HelloWorld { @Override
public void sayHello() {
// TODO Auto-generated method stub
System.out.println("Struts say HelloWorld!");
} }
提示:在Java开发中,通常将后台分成几层,常见的是三层mvc:model、view、controller,模型视图控制层三层,而impl通常处于controller层的service下,用来存放接口的实现类,impl的全称为implement,表示实现的意思。所以这里的包名叫做impl。
HelloWorldService.java(创建实例):
package com.jsoft.test.hellospring.helloworld; public class HelloWorldService {
private HelloWorld helloWorld; public HelloWorldService(){ } public void setHelloWorld(HelloWorld helloWorld){
this.helloWorld = helloWorld;
} public HelloWorld getHelloWorld(){
return this.helloWorld;
}
}
beans.xml:
<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.xsd"> <bean id="springHelloWorld" class="com.jsoft.test.hellospring.helloworld.impl.SpringHelloWorld"></bean>
<bean id="strutsHelloWorld" class="com.jsoft.test.hellospring.helloworld.impl.StrutsHelloWorld"></bean> <bean id="helloWorldService" class="com.jsoft.test.hellospring.helloworld.HelloWorldService">
<property name="HelloWorld" ref="strutsHelloWorld"/>
</bean> </beans>
注意:新建beans.xml时,是放置在src/main/resources目录下,如果没有这个目录需要自行新建。
App.java(程序入口):
package com.jsoft.test.hellospring; import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; import com.jsoft.test.hellospring.helloworld.HelloWorld;
import com.jsoft.test.hellospring.helloworld.HelloWorldService; /**
* Hello world!
*
*/
public class App
{
public static void main( String[] args )
{
//IoC获取beans的上下文
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
//通过上下文获取beans创建的Service,此时已经注入了是创建哪个的接口实现
HelloWorldService helloWorldService = (HelloWorldService)context.getBean("helloWorldService");
//Service调用统一接口方法获取注入的接口实现
HelloWorld helloWorld = helloWorldService.getHelloWorld();
//输出接口实现的内容
helloWorld.sayHello();
}
}
4、运行工程
【项目右键】->【Run As】->【Java Application】
输出如下:
5、工作原理总结:
1、beans.xml是Spring的一切,通过beans.xml的依赖注入去实例化类,已经传入指定的参数。
2、可以看出在App.java类中的main方法,先是获取beans实现上下文,然后通过上下文获取指定的Bean,而此时这个Bean已经在beans.xml中注入了一个StrutsHelloWorld的类实现。
3、在beans.xml中,通过<property name="HelloWorld" ref="strutsHelloWorld"/>属性去注入HelloWorldService.java中的setHelloWorld方法。经过测试,HelloWorld的开头字母大小写不区分。
测试工程:https://github.com/easonjim/5_java_example/tree/master/springtest/test1/HelloSpring
以上参考:http://www.yiibai.com/spring/spring-tutorial-for-beginners.html
Spring的Hello World工程的更多相关文章
- mac os版本Intellij IDEA 搭建spring mvc的maven工程(新手教学)
由于近期换了新公司,又换mac pro作为新电脑,打算把用了很多年的eclipse换成IDEA(IDEA比eclipse的好处我就不多说了),由于mac os和IDEA刚开始用不久,所以专门用一篇博客 ...
- MAC环境下idea:maven+Spring+Dubbo+Zookeeper简单工程搭建
: 一:安装软件:tomcatZookeeperDubbo+admin 二:工程: 总工程 API Pom.xml:不用引用任何东西 Provider Pom.xml:要denpend ...
- 将Spring源码转换为工程 + 导入Eclipse时缺失jar包
将源码转换为工程: 比如查看Spring事务部分的源码. 打开cmd窗口,切换到Spring-tx文件夹下,执行命令 “gradle cleanidea eclipse” . 缺失jar包: 第一步: ...
- Spring MVC——搭建HelloWeb工程
1.确保环境配置配置正确(Myeclipse(eclipse)+Tomcat) 2.新建web project 3.将Spring MVC所需的jar包粘贴到WebRoot/WEB-INF/lib下 ...
- JPA hibernate spring repository pgsql java 工程(二):sql文件导入数据,测试数据
使用jpa保存查询数据都很方便,除了在代码中加入数据外,可以使用sql进行导入.目前我只会一种方法,把数据集中在一个sql文件中. 而且数据在导入中常常具有先后关系,需要用串行的方式导入. 第一步:配 ...
- OSGI与Spring结合开发web工程
简介: 作为一个新的事实上的工业标准,OSGi 已经受到了广泛的关注, 其面向服务(接口)的基本思想和动态模块部署的能力, 是企业级应用长期以来一直追求的目标.Spring 是一个著名的 轻量级 J2 ...
- Spring中多个工程停多个资源文件ignoreUnresolvablePlaceholders配置
http://www.imooo.com/ruanjiangongcheng/software-architecture-design/667686.htm
- step6----->往工程中添加spring boot项目------->修改pom.xml使得我的project是基于spring boot的,而非直接基于spring framework
文章内容概述: spring项目组其实有多个projects,如spring IO platform用于管理external dependencies的版本,通过定义BOM(bill of mater ...
- Springboot(一):使用Intellij中的Spring Initializr来快速构建Spring Boot工程
使用Intellij中的Spring Initializr来快速构建Spring Boot工程 New---Project 可以看到图所示的创建功能窗口.其中Initial Service Url指向 ...
随机推荐
- JS函数节流和防抖
看JS高级程序设计时,了解到一个概念--函数节流,是为了防止在高频率触发某些事件导致浏览器崩溃.最近又了解到另一个概念,防抖,感觉和函数节流很像,也查看了很多篇博文,算是理解了. 区别: 函数节流:频 ...
- GIMP暗黑诱惑,部分彩色效果制作
在一些图形处理中经常会用到高逼格的部分彩色,其他部分黑白的效果,今天我就简单记录一下如何操作. 1.选区,先选择要突出的选区,可以用多种方法,钢笔,套绳,小剪刀等等: 2.把选择的区域稍稍调整亮一点: ...
- 蓝牙学习(5) -- sockets
Frames 由下图可以看出 - SDU由多个I-frames中的Information Payload组成 - 一个I-frames又拆分成多个HCI data payload socket buf ...
- html2canvas.js网页截图功能
需求:将网页生成图片,用户自行长按图片进行保存图片,再分享朋友圈.其中,都可识别图中的二维码.(二维码过小会识别不出) 首先,先来科普一下微信网页识别二维码原理:截屏识别,当客户端发现用户在网页的im ...
- SQL server的GO用法--巨坑
SQL脚本是一种用SQL语言写的批处理文件(.sql),SQL脚本通常可以由SQL查询分析器来执行. ================================================= ...
- myeclipse 改变模版
一.修改Servlet的默认模板代码 使用MyEclipse创建Servlet时,根据默认的Servlet模板生成的Servlet代码如下: 1 package gacl.servlet.study; ...
- NYOJ 1023 还是回文
还是回文 时间限制:2000 ms | 内存限制:65535 KB 难度:3 描述 判断回文串很简单,把字符串变成回文串也不难.现在我们增加点难度,给出一串字符(全部是小写字母),添加或删除一 ...
- 【java 基础 9】原来我从没有了解过String类
导读:这两天没有做项目,然后就想着把之前在项目中用到过的东西总结总结.记得之前做今日开讲项目时,在比较学生学号的时候,我最开始用的是"==",但是,实践证明,这个玩意儿吧,总是很奇 ...
- Python MySQLdb的execute和executemany的使用
如果使用executemany对数据进行批量插入的话,要注意一下事项: conn = MySQLdb.connect(host = “localhost”, user = “root”, passwd ...
- BZOJ 3282 Tree ——Link-Cut Tree
[题目分析] 明显的LCT维护连通性的题目. access的操作是比较巧妙的,可以把结点到根变成偏爱路径,而且保证了该点是链上深度最深的点. 而且需边的思想也很巧妙,保证了复杂度. 但是只能用于修改路 ...