Spring学习笔记

558

一、Spring的概述

1.1、什么是Spring

Spring框架是 Java 平台的一个开源的全栈(Full-stack)应用程序框架和控制反转容器实现,一般被直接称为 Spring。该框架的一些核心功能理论上可用于任何 Java 应用,但 Spring 还为基于Java企业版平台构建的 Web 应用提供了大量的拓展支持。虽然 Spring 没有直接实现任何的编程模型,但它已经在 Java 社区中广为流行,基本上完全代替了企业级JavaBeans(EJB)模型。
Spring的核心是控制反转(IoC)和面向切面(AOP)。

1.2、Spring的优势

  • 方便解耦,简化开发 (高内聚低耦合)
    通过spring提供的IoC容器,可以将对象之间的依赖关系交由spring来进行空值,避免程序硬编码所造成的程序过度耦合,用户不必再为单例模式类、属性文件解析这些较底层的需求编写代码,可以更专注于上层的应用。
  • AOP编程的支持
    通过Spring的AOP功能,方便进行面向切面编程,许多不容易用传统的面向对象编程(OOP)实现的功能可以通过AOP轻松解决。
  • 声明式事务的支持
    只需要通过配置即可完成对事务的管理,灵活的管理事务,提高开发效率。
  • 方便程序的测试
    可以用非容器依赖的方式完成几乎所有的测试工作(Spring对Junit4支持,可以通过注解方便的测试Spring程序)
  • 方便集成各种优秀框架
    Spring可以降低其它开源框架的使用难度,其内部提供了对各种优秀框架(如:Struts、Hibernate、MyBatis、Quartz等)的直接支持。
  • 降低JavaEE API的使用难度
    Spring 对JavaEE开发中非常难用的一些API(JDBC、JavaMail、远程调用等),都提供了封装,使这些API应用难度大大降低

1.3、Spring的体系结构

bffaf8db763ea

二、Spring IoC 和 DI 简介

2.1、IoC:Inverse of Control(控制反转)

  • 控制反转模式(也称作依赖性介入)的基本概念是:不创建对象,但是描述创建它们的方式。
  • 正控:若要使用某个对象,需要自己去负责对象的创建。
  • 反控:要使用某个对象,只需要从 Spring 容器中获取需要使用的对象,不关心对象的创建过程,也就是把创建对象的控制权反转给了Spring框架。

2.2、需要的jar包(不限于此)
spring-beans-XXX.jar
spring-context-XXX.jar
spring-core-XXX.jar

2.3、目标类

  • 提供AccountService接口和实现类
  • 获得AccountService实现类的实例(
    之前开发中,需要某个实例对象直接主动new一个即可得到;学习spring之后,将由Spring创建对象实例。
    之后需要实例对象时,从spring工厂(IoC容器)中获得,需要将实现类的全限定名称配置到xml文件中)。

接口

public interface IAccountService {

    void addAccount();

    void updateAccount(Integer id);

    int deleteAccount();
}

实现类

public class AccountServiceImpl implements IAccountService {
    public void addAccount() {
        System.out.println("添加了账号");
    }

    public void updateAccount(Integer id) {
        System.out.println("更新了账号" + id);
    }

    public int deleteAccount() {
        System.out.println("删除了账号");
        return 0;
    }
}

2.4、配置文件

  • 位置:不限,一般在src下(classpath)
  • 命名:不限,通常使用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" xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
	http://www.springframework.org/schema/context
	http://www.springframework.org/schema/context/spring-context-3.0.xsd">
    <!-- 配置service 
        <bean> 配置需要创建的对象
            id :用于之后从spring容器获得实例时使用的
            class :需要创建实例的全限定类名
    -->
    <bean id="accountService" class="cc.xuhao.spring_test.service.impl.AccountServiceImpl"/>
</beans>

2.4、测试

public static void main(String[] args) {
    ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
    IAccountService accountService = (IAccountService) ac.getBean("accountService");
    accountService.updateAccount(2);
}

输出: 更新了账号2