Spring4 快速入门
Spring4 快速入门
1 Spring简介
1.1 Spring是什么?###
Spring 是一个 IOC 和 AOP 容器的开源框架,为简化企业级应用而生。
IOC(Inversion of Control)控制反转,不再是等待容器返回资源,而是主动让容器推送资源。
其中DI(Dependency Injection)依赖注入,就是IOC的一种表现方式。说白了,就是利用xml解析+java反射机制技术,读取配置文件给对象赋值罢了(也就是下面的第四步)。
详解可参考:Spring4 IOC详解
AOP(Aspect Oriented Programming)面向切面编程,暂时不说!!!Spring4 AOP详解
1.2 Spring 做什么?###
Spring就像一个管家,帮你管理事务。传统的应用,应用层(Struts2)和事务层(Service)联系很紧密,通过Spring管理之间的关系,减低其耦合性。说白了,Spring的出现就是为了解决现有问题,使开发更快捷,更健壮。若是越用越麻烦,谁还用他。另外,一定要好好学习Spring,他可是有一统天下的野心。有针对Struts2的SpringMVC,有针对Hibernate/mybatis的SpringData,以及为了简化开发的 Spring boot 和 Spring Cloud。你害怕了么?
2 入门代码
按照国际惯例,我们先来一个Hello World得意。
第一步:创建maven web项目,不清楚的可以访问:http://blog.csdn.net/qq_19558705/article/details/49887717
第二步:导包。maven导包的好处,就是可以自己控制自己,把需要的最佳的依赖导入,从而减少包的冲突。
<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>spring</groupId>
<artifactId>helloworld</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring.version>4.2.1.RELEASE</spring.version>
</properties>
<dependencies>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.37</version>
</dependency>
<!-- spring start -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- spring end -->
</dependencies>
</project>
第三步:HelloWorld对象
package com.spring.hello;
public class HelloWorld {
private String hello;
public void setHello(String hello) {
this.hello = hello;
}
public void helloWorld(){
System.out.println("Spring say :"+hello);
}
}
第四步:配置xml文件,要严格按照语法来写,便于Spring底层代码解析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"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
<!-- 配置一个 bean -->
<bean id="helloWorld" class="com.spring.hello.HelloWorld">
<!-- 为属性赋值 -->
<property name="hello" value="Hello World"></property>
</bean>
</beans>
第五步:体验一把依赖注入的快感
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class HelloTest {
public static void main(String[] args) {
//1. 创建Spring 的IOC容器
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
//2. 从容器中获取 Bean 其实就是new 的过程
HelloWorld helloWorld = (HelloWorld) ctx.getBean("helloWorld");
// 也可以是,但不建议 HelloWorld helloWorld = ctx.getBean(HelloWorld.class);
//3. 执行函数
helloWorld.helloWorld();
}
}
运行结果如果打印以下内容,则说明完成
十一月 23, 2015 12:01:46 下午 org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@edbe39: startup date [Mon Nov 23 12:01:46 CST 2015]; root of context hierarchy
十一月 23, 2015 12:01:46 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [beans.xml]
Spring say :Hello World
那么一个简单的spring HelloWorld就做好了,是不是很简单!如果你觉得很简单,那么你已经打开了Spring的大门。如果你觉得很难理解,没事!多看敲几遍。原文链接:http://write.blog.csdn.net/postedit/49992021
每天都在进步,每天都在成长,如果有什么问题和建议可以留言,我会及时处理。如果你觉得不错,可以点个赞哦!
----------------------- 以上内容写于 2015-11-23 10:49 ,现在从csdn搬家过来, 以下是2017-10-24 补充内容 -----------------------
其实以上内容并不完全是 spring4.x 的方法 =。=|||
在spring 2.x 和 spring 3.x 的时代:我们通常采用基本配置一般用xml方式,业务开发用注解方式。其实spring 3.x 已经提供了java编程方式。而在spring 4.x的时候就已经开始推荐使用java编程时。原因和具体的使用方法后续有时间补充介绍
使用起来很简单,两个注解:
- @Configuration 修饰在类上,告知程序这是一个配置类。你可以理解为一个xml文件。
- @Bean 修改在一个getXXX() 方法上,告知程序它已经实例化了。你可以理解为是一个bean。
Spring4 快速入门的更多相关文章
- 51cto-spring boot(一Spring4快速入门)
https://search.maven.org/classic 查找maven依赖的pom.xml文件
- SPRING-BOOT系列之Spring4快速入门
上节 : spring boot简介 接着上章节的spring boot简介,我们会发现boot是基于spring的,其中最重要的就是spring容器了.那么本章着重介绍spring容器装配自定义be ...
- (4)Maven快速入门_4在Spring+SpringMVC+MyBatis+Oracle+Maven框架整合运行在Tomcat8中
利用Maven 创建Spring+SpringMVC+MyBatis+Oracle 项目 分了三个项目 Dao (jar) Service (jar) Controller (web) ...
- Web Api 入门实战 (快速入门+工具使用+不依赖IIS)
平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html 屁话我也就不多说了,什么简介的也省了,直接简单概括+demo ...
- SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)
SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...
- 前端开发小白必学技能—非关系数据库又像关系数据库的MongoDB快速入门命令(2)
今天给大家道个歉,没有及时更新MongoDB快速入门的下篇,最近有点小忙,在此向博友们致歉.下面我将简单地说一下mongdb的一些基本命令以及我们日常开发过程中的一些问题.mongodb可以为我们提供 ...
- 【第三篇】ASP.NET MVC快速入门之安全策略(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- 【番外篇】ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- Mybatis框架 的快速入门
MyBatis 简介 什么是 MyBatis? MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果 ...
随机推荐
- 浅谈oracle树状结构层级查询之start with ....connect by prior、level及order by
浅谈oracle树状结构层级查询 oracle树状结构查询即层次递归查询,是sql语句经常用到的,在实际开发中组织结构实现及其层次化实现功能也是经常遇到的,虽然我是一个java程序开发者,我一直觉得只 ...
- 用Python解答百度测试开发算法面试题
吾八哥本人之前有幸能接到百度北京总部的人工智能测试开发岗位的面试机会,在二面的过程中,面试官出了一道算法题,题目是:有一组"+"和"-"符号,要求将" ...
- WinForm程序的发布
- Struts2 06--系统拦截器防止数据重复提交
一.拦截器简要概述 拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作.拦截是AOP的一种实现策略. 在W ...
- 模块:time,random,os,sys
时间模块 import time # print(time.time()) #时间戳 # print(time.strftime('%Y-%m-%d %X')) #格式化字符 # print(time ...
- 用 Eclipse 创建一个简单的web项目
Eclipse neon 汉化版 ; 1;右击新建 --> 选择 动态Web项目 2: 填写 项目名 项目位置 ; 选择 Dynamic web module version 和 tomca ...
- C#常用单元测试框架比较:XUnit, NUnit, 和 Visual Studio(MSTest)
做过单元测试的同学大概都知道以上几种测试框架,但我一直很好奇它们到底有什么不同,然后搜到了一篇不错的文章清楚地解释了这几种框架的最大不同之处. 地址在这里:http://www.tuicool.com ...
- EF异常探究(An entity object cannot be referenced by multiple instances of IEntityChangeTracker.)
今天在改造以前旧项目时出现了一项BUG,是由于以前不规范的EF写法所导致.异常信息如下: "An entity object cannot be referenced by multiple ...
- Linux系统Shell脚本编程
1. shell脚本概念:C语言编写的.命令解释器.编程语言. 是用户使用linux的桥梁. shell脚本语言非常擅长处理文本类型的数据. 2. shell脚本作用:自动化管理.监控管理.日志数据处 ...
- 变量值a交换b,b交换a....
package day01; public class Test1 { public static void main(String[] args) { //不利用其它变量时期A和B的值交换 Inte ...