原创

Spring学习(1):入门

Spring概述

Spring是一个开源框架,Spring是为简化企业级应用开发而生的,使用Spring可以使简单的JavaBean实现以前只有EJB才能实现的功能;Spring是JavaEE/JavaSE的一站式框架。JavaEE在开发过程中会将服务器划分为三层:Web层,业务逻辑层,持久层。Spring对于这三层都提供了较为完善的解决方案:在Web层提供了SpringMVC;业务逻辑层提供了用于Bean管理的SpringIOC和事务;持久层提供了JDBC Template,或者与Mybatis等ORM框架进行整合。

优点:

接下来是Spring的模块(本文以Spring4为例进行学习介绍):

Spring Ioc实现原理

下载Spring

Spring官网并不直接提供Spring的下载,Spring现在托管在GitHub上,相应的下载步骤如下:你可以点击这里查看文章下载Spring,或者直接看下面的步骤:

1、进入Spring官网 -> PROJECTS -> SPRING FRAMEWORK:

2、点击GitHub的图标,进入GitHub:

3、进入Spring仓库后,继续按照图示操作进行:

接着点击org -> springframework -> spring,选择要下载的版本,展开它:

Spring目录分析

docs文件夹里是一些html文件,是Spring的API文档。libs文件夹里是Spring的jar包,一共63个。

正如你所看见的文件是三个一组,其中.RELEASE.jar用于项目中,.RELEASE-javadoc.jar是该jar包的说明文档,.RELEASE-source.jar是该jar包的源码,也就是说真正在项目中用的就只有21个。

虽然有这么多包,但是只有4个是Spring的基础包,分别对应Spring核心容器的4个模块,注意它们是Spring项目必须的。

spring-core-5.1.8.RELEASE.jar是Spring的核心工具类,其它jar包是建立这个包基础上的,都要用到这个包中的类;

spring-beans-5.1.8.RELEASE.jar通常用于配置、创建、管理Bean,同时负责Ioc控制反转和DI依赖注入;

spring-context-5.1.8.RELEASE.jar用于提供在基础IoC上的扩展服务

spring-expression-5.1.8.RELEASE.jar用于提供对Spring表达式语言的支持。

另外Spring核心容器依赖第三方的commons.logging.jar包,需要自己去下载这个包;通常也会添加log4j包用于开发时的代码调式和测试。

总结起来就是:使用Spring时,需要把Spring自带的21个jar包+1个第三方的commons.logging.jar包添加到项目中即可。

Spring Ioc快速入门

下载安装Spring开发包-->复制Spring jar包至工程-->理解IOC控制反转和DI依赖注入-->编写Spring核心配置文件-->在程序中读取Spring配置文件,并通过Spring获得Bean,最终实现操作Bean的目的。

入门小demo

使用IDEA创建一个webapp项目,接着配置pom.xml:

<dependencies>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-context</artifactId>

<version>4.2.4.RELEASE</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-core</artifactId>

<version>4.2.4.RELEASE</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-beans</artifactId>

<version>4.2.4.RELEASE</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-expression</artifactId>

<version>4.2.4.RELEASE</version>

</dependency>

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>4.13</version>

</dependency>

<dependency>

<groupId>log4j</groupId>

<artifactId>log4j</artifactId>

<version>1.2.17</version>

</dependency>

</dependencies>

接着在main包下面新建一个java源程序包,然后在main包中新建com/envy.service文件包,里面新建一个接口UserService.java的文件:

public interface UserService {

public void sayHello();

}

为了实现这个接口,在该service包中新建一个UserServiceImpl.java的文件:

public class UserServiceImpl implements UserService {

private String name;

public String getName(){

return this.name;

}

public void setName(String name){

this.name=name;

}

public void sayHello() {

System.out.println("hello,spring!");

}

}

接着在main包下面新建一个与java同级的test文件夹,该文件夹是一个测试目录,然后在该test包中新建com/envy.test文件包,里面新建一个测试文件UserServiceTest.java

/**

* 传统开发模式

**/

@Test

public void testOne() {

// UserService userService = new UserServiceImpl();

// userService.sayHello();

UserServiceImpl userServiceimpl = new UserServiceImpl();

userServiceimpl.setName("张三");

System.out.println(userServiceimpl.getName());

userServiceimpl.sayHello();

}

上面是传统的开发模式,如果单纯的需要使用sayHello方法,那么可以直接调用被注释的两行代码(只需要让接口的引用指向实现类的引用即可,无需创建实现类对象);如果是需要获取对象的属性,那么需要创建一个实现类对象,然后使用setter和getter方法分别去赋值和获值,这是非常麻烦的,因为涉及到修改实现类中的原始代码。

但是如果你是用SpringIOC 和DI的话,就需要按照如下进行操作:

第一步:在resource包中新建一个applicationContext.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">

<!-- 将userService的创建权交给了Spring -->

<bean id="userService" class="com.envy.service.UserServiceImpl">

<!-- 属性控制 -->

<property name="name" value="李四"></property>

</bean>

</beans>

最后在UserServiceTest测试文件中写入以下代码:

/**

* Spring开发模式

**/

@Test

public void testTwo() {

//创建Spring的工厂

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");

//通过工厂获得类,参数是applicationContext.xml文件中的Bean的id,返回对象是Bean中的class对象

UserServiceImpl userServiceimpl = (UserServiceImpl) applicationContext.getBean("userService");

//调用对象的方法

System.out.println(userServiceimpl.getName());

userServiceimpl.sayHello();

}

注意到没有,需要使用属性只需在bean中进行property设置,然后在测试文件中直接调用实现类对象的getter方法就可以。更重要的是我们的Bean对象不再是自己来创建了,而是通过Spring来创建。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Spring学习(1)——快速入门

    认识 Spring 框架 Spring 框架是 Java 应用最广的框架,它的成功来源于理念,而不是技术本身,它的理念包括 IoC (Inversion of ...

    我没有三颗心脏
  • docker入门学习(1)

    1、简化程序: Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,便可以实现虚拟化。Docke...

    RobinsonZhang
  • spring boot框架学习1-认识spring boot和快速入门

    本文是《凯哥陪你学系列-框架学习之spring boot框架学习》中spring boot框架学习1-认识spring boot和快速入门。

    凯哥Java
  • Spring Boot(1) 入门

    假设你受命用Spring开发一个简单的Hello World Web应用程序。你该做什么?我能想到一些 基本的需要。   1.  一个项目结构,其中有一个包含必...

    haoming1100
  • Spring学习笔记(一)--- Spring入门

    Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,简单来说,Spring是一个分层的JavaSE/EEfull-st...

    挽风
  • Python 学习入门(1)—— PyDev

    PyDev for Eclipse 是一个功能强大且易用的 Eclipse Python IDE 插件。本文将向读者介绍 PyDev 开源项目及其安装配置方法,...

    阳光岛主
  • Nodejs入门学习1.md

    模块:在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护。

    WeiyiGeek
  • Clojure 学习入门(1)—— 学习资料

    Clojure(发音类似"closure",['kləʊʒə(r)])是一套现代的Lisp语言的动态语言版,它是一个函数式多用途的语言,其语法和其他的Lisp一...

    阳光岛主
  • 首页Spring BootSpring Boot入门学习

    J2EE笨重的开发,繁多的配置,低下的开发效率,复杂的部署流程,第三方技术集成难度大。

    cherishspring
  • spring cloud 学习(3) - feign入门

    默认情况下,spring-boot的redis自动配置,只能注册一个StringRedisTemplate实例,如果希望注入多个,比如:1个读写database...

    菩提树下的杨过
  • Servlet基础入门学习1

    描述:在进行JavaWeb开发学习的时候必不可少就是Tomcat Web 容器服务器,因为它开源免费、便于上手,并且使用安装简单。

    WeiyiGeek
  • 1-Go快速学习入门

    WeiyiGeek
  • springMVC 学习笔记(一):spring 入门

    springMVC 是 spring 框架的一个模块,springMVC 和 spring 无需通过中间整合层进行整合。springMVC 是一个基于 mvc ...

    希希里之海
  • 快速学习-Spring Data JPA 入门

    使用Spring Data JPA,需要整合Spring与Spring Data JPA,并且需要提供JPA的服务提供者hibernate,所以需要导入spri...

    cwl_java
  • 《机器学习》(入门1-2章)

    这篇笔记适合机器学习初学者,我是加入了一个DC算法竞赛的一个小组,故开始入门机器学习,希望能够以此正式进入机器学习领域。 在网上我也找...

    mantch
  • Git入门学习到进阶1

    描述:Git是目前世界上最先进的分布式版本控制系统(没有之一),如下面的Git生态化流程;

    WeiyiGeek
  • 机器学习学习笔记(1) -- 简析入门

    机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科;机器学习是一种偏向于技术的方法,研究目的包括模式识别、神经网络和深...

    挽风
  • 从零学习Spring Boot-入门起步

    Spring Boot是Spring社区较新的一个项目。该项目的目的是帮助开发者更容易的创建基于Spring的应用程序和服务,让更多人的人更快的对Spring进...

    用户1093975
  • Spring Cloud 源码学习之 Hystrix 入门

    Hystrix 译为 "豪猪",豪猪以棘刺闻名,集肉用、药用、欣赏价值于一体。刺猬的小短刺和豪猪长矛比起来,根本不在同一个level。超市中70块一斤的猪肉指不...

    码代码的陈同学

扫码关注云+社区

领取腾讯云代金券