spring是一个很优秀的基于Java的轻量级开源框架,为了解决企业级应用的复杂性而创建的,spring不仅可用于服务器端开发,从简单性、可测试性和松耦合性的角度,任何java应用程序都可以利用这个思路进行开发,Spring的核心就是控制反转(IoC)和面向切面(AOP),总的来说,Spring是一个分层的Java轻量级框架

  所谓控制反转就是利用某种技术实现低耦合,对象之间相互的依赖关系是通过被动的方式传递进来,而不是对象主动进行另外对象的使用和查找,就是说控制权交给了容器,在初始化的时候,容器将实例化好的对象不用请求就主动传递过来,开发过程中不用进行任何的实例化对象就可以使用对象的方法,使用起来也感觉更加的轻松,所有的对象在spring中都是一个bean,spring提供了一种完善的javabean的依赖管理,实际上就是常说的依赖注入,是通过依赖注入的方式实现了控制反转的操作

  面向切面就是通过分离应用程序的业务逻辑和系统级服务,进行高内聚性的开发,应用对象只完成自己该完成的业务逻辑操作,其他的完全不必考虑,例如系统日志或其他事务等系统服务级操作对象完全不必关心,这样模块化更加清晰,更加适用于逻辑复杂的业务系统

  刚接触spring时会出现很多不好理解的概念,下面从一个最简单的例子开始,进入spring的学习,让spring更加的形象

  首先去spring官网下载spring framework框架,官网地址就是spring.io,一个非常简洁的页面

  

  然后点击导航栏的PROJECTS,看到一些比较大块的项目,单击SPRING FRAMEWORK

  

  然后就进入了spring framework的首页,网址是http://projects.spring.io/spring-framework/,向下拉右面有一些介绍文档点击超链接就可以,或者点击下面的"the modules section fo the reference documentation"超链接查看文档

  

  然后,就看到了很有名的一张图片就是spring framework框架的架构原理图

  

  通过这张图可以清楚的看出spring的大体构成,继续下拉页面,点击超链接:http://repo.spring.io/release/org/springframework/spring/

  

  这个就是最后的下载地址了,里面有所有的历史版本,自己可以根据需要选择下载,

  

  我这里下载的是最新的spring framework 4.2.4完整版本:spring-framework-4.2.4.RELEASE-dist.zip,也就是第一个,下载之后解压出来即可

  

  解压好之后,打开下面的libs目录,这里面就是spring framework所有的jar包了,我们打开eclipse建立一个项目,普通项目或者web项目都可以

  然后,我们复制必要的jar包,放到项目的某一个指定目录下或者web项目的lib目录下,需要的jar包如下图:

  

  这些就是项目所必须的jar包,需要扩展功能可以根据实际需要导入,复制之后如果是web项目会自动导入到项目,如果是普通项目则需要Build Path导入一下就可以使用了,其中junit-4.1.0.jar不是必须的,这只是单元测试所需要的一个jar包;commons-logging-1.2.jar项目中是没有的,它是Apache的日志管理工具,spring为了所有的java应用程序进行统一的日志接口管理,所以需要下载commons-logging.jar这个包,下载地址是:http://commons.apache.org/proper/commons-logging/index.html,进入后点击Download下载就行,然后和spring的包一起导入

  包都导入完毕了,接下来实现一个很简单的功能,我们建立一个接口,实现的就是输出一句话,代码如下:

 package net.zengzhiying.spring;

 public interface IHelloMessage {
public String sayHello();
}

  有两个类分别实现这个接口,分别返回中文的"大家好!"和英文的"HelloWorld!",代码如下:

 package net.zengzhiying.spring;

 public class HelloChina implements IHelloMessage {

     @Override
public String sayHello() {
return "大家好!";
} }
 package net.zengzhiying.spring;

 public class HelloWorld implements IHelloMessage {

     @Override
public String sayHello() {
return "HelloWorld!";
} }

  按照一般的使用,我们会分别实例化对象调用里面的方法使用,或者利用多态的概念通过接口来统一实例化对象使用里面的方法,其实有了spring就不用了,我们现在建立一个实体的类,用来放置接口实例化出的对象,

 package net.zengzhiying.spring;

 public class Person {
private IHelloMessage helloMessage; public Person() { } //带参构造器注入
public Person(IHelloMessage helloMessage) {
this.helloMessage = helloMessage;
} public IHelloMessage getHelloMessage() {
return helloMessage;
} public void setHelloMessage(IHelloMessage helloMessage) {
this.helloMessage = helloMessage;
} public String sayHello() {
return this.helloMessage.sayHello();
} }

  这个类就是一个Bean,一般的规范就是属性私有,并且设置get/set方法,分别有无参的和带参的构造方法,方便使用构造器进行对象的注入,这些类编写完了,然后我们在项目根目录下编写一个配置文件helloMessage.xml,就是这个核心的配置文件,交代了spring应该怎么样对容器中的对象进行管理,所以说这个xml配置文档是spring的最重要的部分之一,我们配置代码如下:

 <?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="net.zengzhiying.spring.HelloWorld"></bean> <bean id="helloChina" class="net.zengzhiying.spring.HelloChina"></bean> <bean id="person" class="net.zengzhiying.spring.Person">
<!-- 配置依赖关系 控制反转 get/set方法注入 -->
<!-- <property name="helloMessage" ref="helloWorld"></property> --> <!-- 构造器注入 -->
<constructor-arg ref="helloWorld" />
</bean> </beans>

  除了通用的头部声明外,所有的配置代码都写到<beans>里面,<bean>就是我们需要控制反转的所有类,然后后面需要向Person中进行对象的注入,可以用过get/set方法进行注入,也可以通过构造方法进行注入,name就是注入的属性名,ref就是需要将哪个类的实例化对象注入进去,这样就完成了简单的配置,也不难理解

  接下来我们配置主类,用来执行相应的方法,代码如下:

 package net.zengzhiying.spring;

 import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource; public class Main { public static void main(String[] args) {
//引入配置文件
Resource r = new FileSystemResource("helloMessage.xml");
//加载配置文件
BeanFactory f = new XmlBeanFactory(r);
//获取Person实例
Person person = (Person) f.getBean("person");
String s = person.sayHello();
System.out.println(s);
} }

  现在只需要引入并加载配置文件,调出bean对象,然后就可以任意使用所有的类中的方法了,可以通过注入不同的类实现不同的操作,结果如下:

  

  同样的,现在我们也可以通过注入HelloChina类来输出大家好!实现起来也比较简单

  以上就是一个简单的spring初学小例子,体现了依赖注入的方式和控制反转的思想,spring让复杂应用的开发变得清晰简单了

  

在eclipse中配置一个简单的spring入门项目的更多相关文章

  1. 构建一个简单的Spring Boot项目

    11 构建一个简单的Spring Boot项目 这个章节描述如何通过Spring Boot构建一个"Hello Word"web应用,侧重介绍Spring Boot的一些重要功能. ...

  2. 配置一个简单的传统SSM项目

    背景 我们知道,从2002年开始,Spring一直在飞速的发展,如今已经成为了在Java EE开发中的标准,早期的项目都是传统的Spring-SpringMVC-Mybatis项目,打成一个war包丢 ...

  3. Eclipse中创建一个新的SpringBoot项目

    在Eclipse中创建一个新的spring Boot项目: 1. 首先在Eclipse中安装STS插件:在Eclipse主窗口中点击 Help -> Eclipse Marketplace... ...

  4. 新建一个新的spring boot项目

    简单几步,在Eclipse中创建一个新的spring Boot项目: 1.Eclipse中安装STS插件: Help -> Eclipse Marketplace... Search或选择&qu ...

  5. 创建一个简单的Spring应用

    环境已经安装完成,接下来创建一个简单的Spring应用. 创建Spring应用步骤: 创建一个maven项目 添加spring库依赖 创建Bean类 添加Bean的xml装配文件 创建主类 运行应用程 ...

  6. 一个简单的spring boot程序

    搭建一个spring boot项目十分的方便,网上也有许多,可以参考 https://www.cnblogs.com/ityouknow/p/5662753.html 进行项目的搭建.在此我就不详细介 ...

  7. eclipse中配置maven和创建第一个 Spring Boot Application

    关于Maven的下载.环境变量的配置自行百度,今天记录一下在Eclipse中配置Maven的操作: mvn -v 出现上图说明maven和jdk的要求都达到了(jdk要8.0及以上的版本) 然后在ec ...

  8. eclipse中配置spring环境

    初识Spring框架 1.简单使用 eclipse中配置Spring环境,如果是初学的话,只需要在eclipse中引入几个jar包就可以用了, 在普通java project项目目录下,建一个lib文 ...

  9. Maven学习(一) -- 安装Maven及Eclipse中配置Maven

    标签(空格分隔): 学习笔记 本文环境:Windows7, JDK1.7.0_76 安装及配置Maven环境变量 需要电脑中已经有Java环境 在控制台中输入:echo %JAVA_HOME%看是否能 ...

随机推荐

  1. Caused by: java.lang.IllegalStateException: Detected both log4j-over-slf4j.jar AND slf4j-log4j12.jar on the class path, preempting StackOverflowError

    SLF4J: Detected both log4j-over-slf4j.jar AND slf4j-log4j12.jar on the class path, preempting StackO ...

  2. POJ2411 Mondriaan's Dream

    Description Squares and rectangles fascinated the famous Dutch painter Piet Mondriaan. One night, af ...

  3. 表单form action的url写法

    在写web页面时,标签 是很常见的元素,它的一个属性是action,用来标识将表单交给谁去处理.很显然,这里有一个地址的问题,而且是在服务器这边的地址.比如服务器内的一个servlet.   那么这个 ...

  4. HDU 5714

    Problem Description 小明在旅游的路上看到了一条美丽的河,河上有许多船只,有的船只向左航行,有的船只向右航行.小明希望拍下这一美丽的风景,并且把尽可能多的船只都完整地拍到一张照片中. ...

  5. 初识A*算法

    写这篇文章的初衷是应一个网友的要求,当然我也发现现在有关人工智能的中文站点实在太少,我在这里抛砖引玉,希望大家都来热心的参与. 还是说正题,我先拿A*算法开刀,是因为A*在游戏中有它很典型的用法,是人 ...

  6. data URI

    参考资料:http://www.cnblogs.com/hustskyking/p/data-uri.html 与http,ftp等协议类似,data URL也是一种协议,不同的是它直接将数据(编码或 ...

  7. oracle中Blob和Clob类型的区别

    BLOB和CLOB都是大字段类型,BLOB是按二进制来存储的,而CLOB是可以直接存储文字的.其实两个是可以互换的的,或者可以直接用LOB字段代替这两个.但是为了更好的管理ORACLE数据库,通常像图 ...

  8. linux远程连接客户端总结

    序:刚从阿里ECS买了一个ubuntu14.04_64_20G,但是没有提供页面登陆工具,因此从网上找了几个远程连接工具,特写在这里算是总结. 1 secureCRT SecureCRT是一款支持SS ...

  9. C# JavascriptSerializer与匿名对象打造Json的完美工具

    一:背景 在web项目中经常需要生成json数据,返回给前端ajax. 无论是ashx,还是WebMethod,可以人工的用字符串去拼接,最终得到json数据. 有没有更好的方法呢?我个人推荐使用Ja ...

  10. Fortran向C传递NULL值

    在很多C或C++的头文件定义中,NULL被指定定义为0,这里不再具体展开 gfortran的手册关于iso c binding的章节,定义NULL如下 Moreover, the following ...