1.Spring简介-Spring Framework架构
1) Spring Framework 由什么构成?
IoC(控制反转,解决代码耦合)和AoP (面向切面编程,解决代码重复编码)核心思想
2)Spring简介
1.Spring是什么?
2.Spring Framework是什么?
3.请说出Spring Frameword2大核心是什么?
IoC和AoP
2.Spring IoC-核心概念
1)Spring解耦(IoC的启蒙思想)
使用对象时,在程序中不要主动使用new实例化对象,转换为由外部提供对象,这种思想就 是IoC的启蒙。
IoC:Inversion of Control简称IoC 即“控制反转“;不是什么技术,而是一种解耦设计思想,在Java开发中,IoC意味着将你应用中的对象实例化、初始化等交给IoC容器控制管理,交给IoC容器管理的对象叫bean。
控制:有了IoC容器后,把创建和查找依赖对象的控制权交给了容器,由容器进行注入组合对象,所以对象与对象之间是松散耦合。
反转:传统应用程序是由程序员在对象中主动控制去直接获取依赖对象,也就是正转;而反转则是由容器来帮忙创建及注入依赖对象。
DI: Dependency Injection,即“依赖注入”,系统运行中,IoC容器根据依赖关系动态的向某个对象提供它所需要的
注意:由于控制反转概念比较含糊(可能只是理解为容器控制对象这一个层面,很难让人想到谁来维护对象关系),所以2004年大师级人物Martin Fowler又给出了一个新的名字:“依赖注入”,相对IoC 而言,“依赖注入”明确描述了“被注入对象依赖IoC容器配置依赖对象”。
使用Spring IoC解决如下代码耦合性问题
public class UserServlet{
private UserService userService=new UserServiceImpl();
public void save() {
userService.save();
}
}
Spring IoC 需要做如下2件事情:
1.UserServlet,UserServiceImpl程序员不需要new了
2.UserServlet中所依赖的UserService,Spring IoC需要给UserService属性赋 值 UserServiceImpl
public class UserServlet{
private UserService userService;
public void save() {
userService.save();
}
}
思路分析
1.IoC容器实现需要SpringFramework哪些模块?
2.IoC容器管理哪些bean?
管理普通bean和工厂bean
3.如何告诉IoC容器哪些bean需要实例化、哪些bean需要依赖?
4.IoC容器是怎么获取bean的配置信息?
5.如何通过IoC容器获取bean?
步骤:
第1步:导包 spring-context,可以传递spring-beans,spring-core,spring-expression依赖
第2步:创建xml配置文件,通过<bean>实例化UserServlet UserServiceImpl对象 通过<property>注入UserServiceImpl对象
第3步:获取Spring IoC容器 ApplicationContext,加载xml配置文件
第4步:通过ApplicationContext getBean(“bean名称”,返回类型 )方法获取UserServiceImpl, UserServlet
搭建Spring开发环境--->从SpringIoC容器中获取bean---->依赖注入指定的bean
①:导入Spring坐标
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.17.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
</dependency>
②:定义Spring管理的类(接口)
public class UserServlet {
private UserService userService;
public void setUserService(UserService userService) {
this.userService = userService;
}
public void save() {
userService.save();
}
}
public class UserServiceImplA implements UserService {
@Override
public void save() {
System.out.println("user service A save....");
}
}
public class UserServiceImplB implements UserService {
@Override
public void save() {
System.out.println("user service B save....");
}
}
③:创建Spring配置文件,配置对应类作为Spring管理的bean
<?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 https://www.springframework.org/schema/beans/spring-beans.xsd">
<!--定义UserServlet bean-->
<bean id="userServlet" class="com.itheima.web.UserServlet">
<property name="userService" ref="serviceImplB"/>
</bean>
<!--定义Service bean--> <bean id="serviceImpl" class="com.itheima.service.impl.UserServiceImpl"></bean> <bean id="serviceImplB" class="com.itheima.service.impl.UserServiceImplB"></bean>
</beans>
④:初始化IoC容器(Spring核心容器/Spring容器),通过容器获取bea
public class App {
@Test
public void testIOC() {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
UserServlet userServlet = applicationContext.getBean("userServlet", UserServlet.class); userServlet.save();}
}
- 导入依赖:Spring -Context
- xml配置:<bean> 实例化、 <properties>依赖注入
- 容器加载:ApplicationContext
3. Spring IoC –bean生命周期
bean实例化![](https://i-blog.csdnimg.cn/blog_migrate/a248b9002ce4bad659bb8d18f9d3d1e3.jpeg)
1.Spring是如何实例化普通bean和工厂bean?
普通bean:构造方法
工厂bean
静态工厂: <bean class factory-method />
实例工厂: <bean factory-class factory-method/>
FactoryBean: <bean class>
bean的依赖注入
bean的依赖注入-setter注入
bean的依赖注入-setter注入
bean的依赖注入-构造函数注入
bean的依赖注入-依赖注入方式选择
依赖注入方式
bean的依赖注入-自动装配
在bean中通过autowire属性来声明
<bean id="userServlet" class="com.itheima.web.UserServlet" autowire=“byType"/>
<bean id="userServlet" class="com.itheima.web.UserServlet" autowire=“byName"/>
bean的依赖注入-自动装配特征
依赖注入方式