Spring - 快速入门(一)

1、 介绍

本教程文章是基于以下编写的:

  • Spring Framework 4.3.9 RELEASE
  • MyEclipse 2017 CI

在本文中使用Maven来声明Spring库,而不是下载Spring库,并以正常的方式来声明。

Maven是一个工具,可以帮你自动,高效地管理您的库,它已成为惯例,所有 Java 程序员必须知道。如果你不知道如何使用Maven,可以花10分钟就学会如何使用它:

如果你想下载Spring和声明库,您可以用传统的方式见附录在文件的结尾。

2、 Spring框架

下图显示了Spring框架的结构。

  • IoC Container: 这是最重要的,也是最基础的, Spring的基础。它的作用是配置和Java对象的生命周期管理。这篇教程中我们将学习这一部分。
  • DAO, ORM, AOP, WEB: 该模块可用于将工具或框架集成到了Spring。

2.1 反转控制和依赖注入

要了解这个问题,我们使用以下几类:

// MyInterface接口
public interface MyInterface {
    public void sayHello();
}

// SpringInterfaceImpl实现了MyInterface接口
public class SpringInterfaceImpl implements MyInterface {
    public void sayHello() {
        System.out.println("Spring say Hello!");
    }
}

// StrutsInterfaceImpl实现了MyInterface接口
public class StrutsInterfaceImpl implements MyInterface {
    public void sayHello() {
        System.out.println("Struts say Hello!");
    }
}

// 添加一个MyInterface的服务类
public class MyInterfaceService {
    // 定义一个接口类型的引用变量
    private MyInterface myInterface;

    // MyInterfaceService类的构造方法
    // 初始化myInterface的引用对象实例
    public MyInterfaceService()  {
        this.myInterface = new StrutsInterfaceImpl();
  }
}

显而易见的是 MyInterfaceService 类管理创建 MyInterface 对象。

- 另外,在上述情况下,当 MyInterfaceService 对象从它的构造创建时,MyInterface对象也被创建了。 它是从StrutsInterfaceImpl 创建。

现在的问题是,您要创建一个MyInterfaceService对象,MyInterface对象也同时被创建,但它必须是SpringInterfaceImpl。

所以 MyInterfaceService 是控制“对象创建” MyInterface 的。我们为什么不创建 MyInterface 转让由第三方,

而是使用 MyInterfaceService ?因为我们有“反转控制”(IOC)的定义。

并且IoC容器将充当管理者角色,创建了MyInterfaceService 和 MyInterface 。

IoC容器创建 MyInterfaceService 对象,是通过 setter 方法传递 MyInterface 对象到MyInterfaceService。IoC容器做的是“依赖注入”到MyInterfaceService。这里的相关性是指对象之间的依赖关系: MyInterfaceService 和 MyInterface.

在这一点上,我们已经明确了什么是 IoC和DI。让我们举个例子来更好的理解。

3、 创建项目

  • File/New/Other...

输入:

  • Group Id: com.qf
  • Artifact Id: HelloSpring

4、 声明Spring的基础库

这是 Spring的 HelloWorld 例子,所以我们只使用基本的Spring库(核心)。打开pom.xml文件来将使用的库声明:

  • 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.qf</groupId>
    <artifactId>HelloSpring</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>4.3.9.RELEASE</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.3.9.RELEASE</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

5、 工程代码

HelloWorld.java

package com.qf.spring;

public interface HelloWorld {
    void sayHello();
}

SpringHelloWorld.java

package com.qf.spring.impl;

import com.qf.spring.HelloWorld;

public class SpringHelloWorld implements HelloWorld {

    @Override
    public void sayHello() {
        System.out.println("Spring Say Hello!!");
    }
}

StrutsHelloWorld.java

package com.qf.spring.impl;

import com.qf.spring.HelloWorld;

public class StrutsHelloWorld implements HelloWorld {

    @Override
    public void sayHello() {
        System.out.println("Struts Say Hello!!");
    }
}

HelloWorldService.java

package com.qf.spring;

public class HelloWorldService {
    private HelloWorld helloWorld;

    public void setHelloWorld(HelloWorld helloWorld) {
        this.helloWorld = helloWorld;
    }

    public HelloWorld getHelloWorld() {
        return this.helloWorld;
    }
}

HelloProgram.java

package com.qf.spring;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class HelloProgram {

    public static void main(String[] args) {
        ApplicationContext applicationContext = new  ClassPathXmlApplicationContext("applicationContext.xml");
        HelloWorldService helloWorldService = applicationContext.getBean(HelloWorldService.class);
        HelloWorld helloWorld = helloWorldService.getHelloWorld();
        helloWorld.sayHello();
    }
}

applicationContext.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.qf.spring.impl.SpringHelloWorld"></bean>
    <bean id="strutsHelloWorld"
        class="com.qf.spring.impl.StrutsHelloWorld"></bean>

    <bean id="helloWorldService"
        class="com.qf.spring.HelloWorldService">
        <property name="helloWorld" ref="springHelloWorld"/>
    </bean>
</beans>

6、 运行示例

运行 HelloProgram.java

运行 HelloProgram 类的结果如下:

打开 applicationContext.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.qf.spring.impl.SpringHelloWorld"></bean>
    <bean id="strutsHelloWorld"
        class="com.qf.spring.impl.StrutsHelloWorld"></bean>

    <bean id="helloWorldService"
        class="com.qf.spring.HelloWorldService">
        <property name="helloWorld" ref="strutsHelloWorld"/>
    </bean>
</beans>

重新运行 HelloProgram 类并得到以下结果。

时间: 2024-11-09 12:22:19

Spring - 快速入门(一)的相关文章

Spring快速入门

时间:2017-1-29 02:15 Spring的IOCSpring的AOP,AspectJSpring的事务管理,三大框架的整合 --什么是Spring 1.Spring是分层的JavaSE/EE full-stack(一站式)轻量级开源框架.    1)分层:        *   SUN公司提供的EE的三层结构:Web层.业务层.数据访问层(持久层)        *   Struts2是Web层基于MVC设计模式框架.        *   Hibernate是持久层的一个ORM框架.

【第2章 Spring快速入门】2.2 WEB应用之HelloWorld

上一节:[第2章 Spring快速入门]2.1 Java应用之HelloWorld 本章节主要介绍在WEB开发过程中,Spring是怎么使用的?上一节中我们已经讲到在普通的Java Project中如何使用Spring容器了,那么在WEB开发中集成Spring时,Spring又应该与Web容器是如何集成使用的呢?本章会着重介绍WEB与Spring的集成使用,同时提供一个简单的Web Demo,供大家快速入手学习.本章主要讲解内容:1. Web开发中如何集成Spring:2. Spring MVC

【Java】Spring快速入门(一)

Spring介绍 Spring可以轻松创建Java企业应用程序.它提供了在企业环境中使用Java语言所需的一切,支持Groovy和Kotlin作为JVM上的替代语言,并可根据应用程序的需要灵活地创建多种体系结构.从Spring Framework 5.1开始,Spring需要JDK 8+(Java SE 8+),并为JDK 11 LTS提供开箱即用的支持. Spring Framework最重要的是控制反转(IoC)容器.Spring框架的IoC容器的全面处理紧随其后,全面覆盖了Spring的面

Spring 快速入门

1.持久层 (1) 域模型层   (2) Dao 持久层接口  (3) DaoImpl 持久层接口实现 2.业务层 Service 业务接口层 ServiceImpl  业务接口实现 3.展现层 Spring 2.5 新增基于注解的MVC , SPring 3.0 中提供Rest风格的MVC. 首先 需要对 web.xml 文件配置 ,以便 Web 容器启动时能够自动启动 Spring 容器. <!-- 从类路径下加载Spring配置文件,param-value指定 加载路径,classpath

spring快速入门(一)

对于为什么使用spring框架,这里不多做解释,详情请百度.本人推荐面向驱动程序学习,通过实战来瞧瞧spring技术的伟大.所以先来看看原始开发一个简单的例子,由例子引入spring相关的技术.如果错误,敬请指正~~ 1.新建一个java项目,项目结构图如下: 项目说明:该项目简单模拟添加一个用户的一个过程,由客户端client发送请求,Acton作为控制层,Dao作为数据层处理,数据处理层有两个不同的实现! UserDao代码: package com.murong.dao; public i

JAVAWEB开发之Spring详解之——Spring的入门以及IOC容器装配Bean(xml和注解的方式)、Spring整合web开发、整合Junit4测试

Spring框架学习路线 Spring的IOC Spring的AOP,AspectJ Spring的事务管理,三大框架的整合 Spring框架概述 什么是Spring? Spring是分层的JavaSE/EE full-stack(一站式)轻量级开源框架. 所谓分层: SUN提供的EE的三层结构:web层.业务层.数据访问层(也称持久层,集成层). Struts2是web层基于MVC设计模式框架. Hibernate是持久的一个ORM的框架. 所谓一站式:Spring框架有对三层的每层解决方案.

Spring快速上手

Spring是分层的Java平台应用一站式的轻量级开源框架,以反转控制(Inversion of Control,IoC)和面向切面编程(Aspect Oriented Programming,AOP)为内核,提供了展现层SpringMVC.持久层SpringJDBC以及业务层事务管理等众多企业级应用技术,此外Spring还整合了中国第三方框架和类库. Spring给我们带来以下几个好处: 方便解耦,简化开发.通过Spring提供的IoC容器,可以将对象之间的依赖关系交由Spring进行控制,避

笔记:Spring Cloud Zuul 快速入门

Spring Cloud Zuul 实现了路由规则与实例的维护问题,通过 Spring Cloud Eureka 进行整合,将自身注册为 Eureka 服务治理下的应用,同时从 Eureka 中获取了所有其他微服务的实例信息,这样的设计非常巧妙的将服务治理体系中维护的实例信息利用起来,使得维护服务实例的工作交给了服务治理框架自动完成,而对路由规则的维护,默认会将通过以服务名作为 ContextPath 的方式来创建路由映射,也可以做一些特别的配置,对于签名校验.登录校验等在微服务架构中的冗余问题

Netty5快速入门及实例视频教程(整合Spring)

Netty5快速入门及实例视频教程+源码(整合Spring) https://pan.baidu.com/s/1pL8qF0J 01.传统的Socket分析02.NIO的代码分析03.对于NIO的一些疑惑04.Netty服务端HelloWorld入门05.Netty服务端入门补充06.Netty客户端入门07.如何构建一个多线程NIO系统08.Netty源码分析一09.Netty源码分析二10.Netty5服务端入门案例11.Netty5客户端入门案例12.单客户端多连接程序13.Netty学习