Spring学习笔记
一、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的体系结构
二、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