Spring(1)之入门使用

Spring(1)之入门使用

微信搜索 zze_coding 或扫描 👉 二维码关注我的微信公众号获取更多资源推送:

介绍

Spring概述

Spring 是一个开放源代码的设计层面框架,它解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用。Spring 是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 创建。简单来说,Spring 是一个分层的 JavaSE/EE full-stack (一站式) 轻量级开源框架。

image.png

关注文章首部微信公众号发送 #47_spring 开发资源包。

IoC

控制反转(Inversion of Control,缩写为 IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称 DI),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。

理解 IoC 和 DI :

  • IoC :控制反转,将对象的创建权交给了 Spring。
  • DI :依赖注入,前提必须有 IoC 的环境,Spring 管理一个类时将类依赖的属性注入(设置)进来,就是 DI 的过程。

简单使用

准备

1、引入如下 Jar 包:

image.png

2、在 src 下添加名为 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">
<!--配置文件约束在 spring-framework-4.2.4.RELEASE\docs\spring-framework-reference\html\xsd-configuration.html 下可以找到-->
</beans>

示例

1、新建测试 Dao 接口:

// com.zze.dao.UserDao;
public interface UserDao {
    void  save();
}

2、新建测试 Dao 接口的实现类:

// com.zze.dao.UserDaoImpl
import com.zze.dao.UserDao;

public class UserDaoImpl implements UserDao {
    @Override
    public void save() {
        System.out.println("from UserDaoImpl.save()");
    }
}

3、在配置文件中注册 Dao 的实现:

<?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">
    <!--配置文件约束在 spring-framework-4.2.4.RELEASE\docs\spring-framework-reference\html\xsd-configuration.html 下可以找到-->
    <bean id="userDao" class="com.zze.dao.impl.UserDaoImpl"></bean>
</beans>

4、测试使用:

/**
 * 原有方式创建 Bean
 */
@Test
public void test1(){
    UserDao userDao = new UserDaoImpl();
    userDao.save();
}

/**
 * 从 Spring 中获取 Bean
 */
@Test
public void test2(){
    ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
    UserDao userDao = (UserDao) applicationContext.getBean("userDao");
    userDao.save();
}

补充

Spirng的工厂类

BeanFactory:老版本的工厂类,调用 getBean 时才会生成类的实例。
ApplicationContext:新版本的工厂类,加载配置文件时就会将 Spring 管理的类实例化。

ApplicationContext 有如下两个常用的两个实现类:

  • ClassPathXmlApplicationContext:加载类路径下的配置文件。
  • FileSystemXmlApplicationContext:加载文件系统下的配置文件。

Bean标签

Bean 标签用来向 Spring IoC 容器中注册 Bean,属性如下:

  • id:使用了唯一约束,不能出现特殊字符。
  • name:没有使用唯一约束(理论上是可以出现重复的,但是实际开发中是不能出现的),可以出现特殊字符。
  • init-method:初始化时执行该方法(在构造方法之后)。
  • destroy-method:销毁时执行该方法(默认情况下 Spring 创建的 Bean 是单例的,在工厂类 ApplicationContext 实例 Close 时执行)。
  • scope:配置 Bean 的作用范围。

scope 有如下几个可选值:

  • singleton:默认值,Spring 会采用单例模式创建这个对象。
  • prototype:多例的。
  • request:应用在 Web 项目中,Spring 创建这个类对象后,将这个对象存放到 request 范围中。
  • session:应用在 Web 项目中,Spring 创建这个类对象后,将这个对象存放的 session 范围中。
  • globalsession:应用在 Web 项目中,必须在 porlet 环境下使用。

分模块配置

第一种方式是在创建工厂实例时一次性加载所有指定的配置文件,例:

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext1.xml","applicationContext2.xml");

第二种方式是通过配置文件中的 import 标签引入其它的配置文件,例:

<import resource="com/zze/dao/applicationContext-dao.xml"/>

Copyright: 采用 知识共享署名4.0 国际许可协议进行许可

Links: https://www.zze.xyz/archives/spring1.html

Buy me a cup of coffee ☕.