1. IoC的概念
本质上就是工厂模式
以前
以前我们是由自己主动创建一个对象,主动获取一个资源
//Car是接口, 后面是实现类
Car bmw = new Bmw();
Car benZ = new BenZ();
Car audi = new Audi();
现在
使用工厂模式,我们需要的对象由工厂去创建,我们不再自己创建,我们只消费对象。
Car bmw = BeanFactory.getBean("bmw");
Car benZ = BeanFactory.getBean("benZ");
Car audi = BeanFactory.getBean("audi");
好处
-
降低类与类之间的耦合度
-
我们不再需要自己创建对象,只要使用对象就可以了
-
使用Spring框架就是使用工厂模式来创建对象,由Spring容器帮我们管理所有的Java对象
容器的概念
在项目开发中将对象存放在什么地方?
由于项目中对象是大量的, 所以考虑用集合 Map/List 存储。而在使用时需要根据名称查找, 所以通常使用 Map 存储
2. Spring框架介绍
-
Spring是分层的Java SE/EE应用的full-stack轻量级开源框架。
-
它是以IOC(Inversion Of Control)控制反转和AOP(Aspect Oriented Programming)面向切面编程为核心
-
提供了表现层springmvc和持久层Spring JDBC以及业务层的事务管理等企业级应用解决方案。
-
将开源世界中众多优秀的第三方框架和类库整合,成为越来越受欢迎的Java EE企业级应用框架。
体系结构组成
Core Container核心容器
-
Beans模块:提供了BeanFactory,工厂模式的实现,Spring将所有管理的对象称为Bean。
-
Core模块:提供了Spring框架的基本组成部分,包括IoC和DI依赖注入的功能。
-
Context模块:访问和配置Bean对象的上下文对象,核心容器。如:ApplicationContext
Data Access/Integration数据访问与集成
-
JDBC模块:提供了JDBC的支持,如:JdbcTemplate
-
ORM模块:对主流的ORM框架提供了支持,如:JPA,JDO,Hibernate等
-
Transaction模块:支持声明式事务的管理
Web
-
Servlet模块:包含了SpringMVC和REST Web Services实现的Web应用程序
-
Web模块:提供了基本的Web开发集成特性,如:文件上传,收发邮件等。
其他模块
-
AOP模块:提供了面向切面编程的功能
-
Aspects模块:提供了与AspectJ框架集成功能
-
Test模块:提供了对单元测试和集成测试的支持
3、搭建Spring入门开发环境
1、导入依赖包
<!--导入Spring基础框架-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.0.RELEASE</version>
</dependency>
2、创建applicationContext.xml文件
1、该配置文件是Spring框架的主配置文件,文件位置为类的根路径下,文件名称可以修改。
2、在idea中使用菜单创建,会自动编写Schema的约束信息
3、配置applicationContext.xml文件,让Spring框架管理对象
3、编写持久层
编写CustomerService接口,添加保存客户的方法 void saveCustomer();
CustomerService.java
package com.it.service;
/**
* 业务层接口
*/
public interface CustomerService {
/**
* 保存客户对象
*/
void saveCustomer();
}
编写客户业务层实现类,实现接口中的方法,直接输出一句话"保存客户"
CustomerServiceImpl.java
package com.it.service.impl;
import com.it.service.CustomerService;
/**
* 业务层实现类
*/
public class CustomerServiceImpl implements CustomerService {
/**
* 保存客户对象
*/
@Override
public void saveCustomer() {
System.out.println("保存了客户");
}
}
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容器中
class:指定类全名,指定的是实现类,不是接口
id:容器中唯一标识,通过id获取这个对象
-->
<bean class="com.it.service.impl.CustomerServiceImpl" id="customerService"/>
</beans>
测试类
package com.it.test;
import com.it.service.CustomerService;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestCustomer {
@Test
public void testCustomer() {
//1.创建Spring容器,参数:指定spring的配置文件
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
//2.从容器中获取对象
CustomerService customerService = (CustomerService) context.getBean("customerService");
//3.调用对象的方法
customerService.saveCustomer();
//4.关闭容器
context.close();
}
}