Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。

控制反转:应用本身不负责依赖对象的创建及维护,依赖对象的创建和维护是由外部容器负责的。控制权的转移就是所谓的反转。

依赖注入:在运行期,由外部容器动态的将依赖注入到组件中。

项目中使用spring的好处:
1.降低组件之间的耦合度,实现软件各层之间的解耦。
2.可以使用容器提供的各种服务,如事务管理服务,消息服务等,开发人员不需要手工控制事务,也不需处理复杂的业务传播。
3.容器提供单例模式支持,开发人员不需要自己编写实现代码。
4.容器提供了AOP(Aspect-Oriented Programming 切面编程)技术,利用它很容易实现如权限拦截、运行期监控等功能。
5.容器提供众多辅助类,使用这些类能够加快应用的开发,如jdbc Template 、Hibernate Template。
6.Spring对主流的应用框架提供了集成支持,如集成Hibernate、JPA、Struts等,更方便应用的开发。

Maven中pom.xml文件所需jar包依赖:

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.2.1.RELEASE</version>
<scope>runtime</scope>
</dependency>

maven会自动下载所需jar包,包括:spring-core, spring-beans, spring-context, spring-context-support, spring-expression

实例化Spring容器的方法:
ApplicationContext act = new ClassPathXmlApplicationContext(“beans.xml”);
Spring配置文件可指定多个,可通过String数组传入。

下面通过一个例子来演示spring的使用:
项目目录结构:

项目所需jar包,可在maven中定义依赖,会自动下载

action包中的TestAction.java

package action;

import service.TestService;

public class TestAction {
public TestService testService; public void doTest() {
testService.test();
} public void setTestService(TestService testService) {
this.testService = testService;
}
}

service包中的TestService.java

package service;

public interface TestService {
public void test();
}

service.impl中的TesterA.java

package service.impl;

import service.TestService;

public class TesterA implements TestService {

    public TestService testService;

    public void test() {
System.out.println("testA---test");
}
}

service.impl中的TesterB.java

package service.impl;

import service.TestService;

public class TesterB implements TestService{
public TestService testService; public void test(){
System.out.println("testB---test");
}
}

test包中的AppTest.java

package test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; import action.TestAction;
import service.TestService; public class AppTest { public static void main(String[] args) {
//读取配置文件
ApplicationContext act = new ClassPathXmlApplicationContext("config/beans.xml");
TestAction testAction = (TestAction) act.getBean("testAction");
testAction.doTest();
}
}

config包下beans.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.xsd"> <bean id="testA" class="service.impl.TesterA" />
<bean id="testB" class="service.impl.TesterB"/> <!-- 在TestAction中通过setTestService方法获取testService -->
<bean id="testAction" class="action.TestAction">
<property name="testService" ref="testB">
<!-- 如果需要实例化对象,只需修改ref即可-->
</property>
</bean>
</beans>

运行AppTest.java,控制台结果如下

一月 09, 2016 2:34:07 下午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@1829ae5e: startup date [Sat Jan 09 14:34:07 CST 2016]; root of context hierarchy
一月 09, 2016 2:34:07 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [config/beans.xml]
testA---test

总结一下:spring可以创建和管理对象,这样在业务逻辑层就不需要手动创建对象,降低了个层之间的耦合度。

Spring入门实例的更多相关文章

  1. Spring中IoC的入门实例

    Spring中IoC的入门实例 Spring的模块化是很强的,各个功能模块都是独立的,我们可以选择的使用.这一章先从Spring的IoC开始.所谓IoC就是一个用XML来定义生成对象的模式,我们看看如 ...

  2. Eclipse安装springsource-tool-suite插件及spring helloworld入门实例

    转载至: https://www.cnblogs.com/aaron-shu/p/5156007.html 一.查看eclipse版本 Help-->About Eclipse,我的版本是4.4 ...

  3. Spring入门1. IoC入门实例

    Spring入门1. IoC入门实例 Reference:Java EE轻量级解决方案——S2SH 前言: 之前学习过关于Spring的一点知识,曾经因为配置出现问题,而总是被迫放弃学习这些框架技术, ...

  4. Spring oxm入门实例

    O/XMapper是什么? Spring3.0的一个新特性是O/XMapper.O/X映射器这个概念并不新鲜,O代表Object,X代表XML.它的目的是在Java对象(几乎总是一个plainoldJ ...

  5. Spring Boot下Spring Batch入门实例

    一.About Spring Batch是什么能干什么,网上一搜就有,但是就是没有入门实例,能找到的例子也都是2.0的,看文档都是英文无从下手~~~,使用当前最新的版本整合网络上找到的例子. 关于基础 ...

  6. Spring入门学习(一)

    SpringMVC基础平台补充(2016.03.03) 如果想要开发SpringMVC,那么前期依次安装好:JDK(jdk-8u74-windows-x64,安装后配置环境变量JAVA_HOME和CL ...

  7. Spring入门(9)-AOP初探

    Spring入门(9)-AOP初探 0. 目录 什么是面向切面编程 AOP常见术语 AOP实例 参考资料 1. 什么是面向切面编程 Aspect Oriented Programming(AOP),即 ...

  8. Spring入门(3)-Spring命名空间与Bean作用域

    Spring入门(3)-Spring命名空间与Bean作用域 这篇文章主要介绍Spring的命名空间和Bean作用域 0. 目录 Spring命名空间 Bean作用域 1. Spring命名空间 在前 ...

  9. spring 入门篇

    spring 入门篇         相对于Hibernate(冬眠),Spring(春天),具有更多的诗意与希望的感觉,是为了解决传统J2EE开发效率过低.开发商之间不统一.没有真正实现“写一次到处 ...

随机推荐

  1. iPhone X 的原深感模组

    物理与数字世界正走向融合,我们每天醒来的时间.睡眠时长.心率和步数等数据都会被分享.上传并转化为分析数据.无处不自的 AI.互联互通和软件平台将改变用户对现实的感知. 2018 年的 CES 展(国际 ...

  2. 解题:WC 2006 水管局长

    题面 初见LCT,动态最小生成树+链上查询max,具体做法是把边转换成点(LCT只能维护点) 时光倒流,先把最后剩的连起来.然后查询就看链上最大值,修改看看链上最大值是否大于当前边,如果是就断开原来的 ...

  3. faster rcnn算法及源码及论文解析相关博客

    1. 通过代码理解faster-RCNN中的RPN http://blog.csdn.net/happyflyy/article/details/54917514 2. faster rcnn详解 R ...

  4. 【题解】Willem, Chtholly and Seniorious Codeforces 896C ODT

    Prelude ODT这个东西真是太好用了,以后写暴力骗分可以用,写在这里mark一下. 题目链接:ヽ(✿゚▽゚)ノ Solution 先把原题解贴在这里:(ノ*・ω・)ノ 简单地说,因为数据是全部随 ...

  5. egg.js路由的优雅改造

    引言 在使用express,koa, 或者是egg.js进行node server开发的过程中,我们的路由基本上都是定义在controller层的,框架对于 node 原生路由都会进行一层封装,一版都 ...

  6. Git5:Git操作远程仓库

    目录 说明 一.git clone 二.git remote 三.git fetch 四.git pull 五.git push 说明 Git有很多优势,其中之一就是远程操作非常简便.本文详细介绍5个 ...

  7. python模块module package

    python模块module   package module package 常用模块 模块与包的区别 模块分为内置模块.第三方模块,自定义模块 程序会先从内置到第三方再到当前工作目录下去找你导入的 ...

  8. P4888 三去矩阵

    P4888 三去矩阵 给出一个字符矩阵, 多次询问求以 \((x, y)\) 为中心的最长回文串长度(即横竖两种) \(l, q <= 2000\) Solution 数据范围小直接模拟即可 C ...

  9. Java消息队列三道面试题详解!

    面试题 为什么使用消息队列? 消息队列有什么优点和缺点? Kafka.ActiveMQ.RabbitMQ.RocketMQ 都有什么区别,以及适合哪些场景? 面试官心理分析 其实面试官主要是想看看: ...

  10. 51 nod 1243 排船的问题

    1243 排船的问题http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1243 题目来源: Codility 基准时间限制:1 ...