1. 什么是spring框架。
1.spring它是一款开源框架,它用来解决企业开发的复杂性。 2.spring框架提供了两个核心技术:IOC和AOPIOC:控制反转。把创建对象的权力交于spring框架来创建。并且管理对象的生命周期 AOP:面向切面编程。在不改变源码的基础可以对我们的代码进行扩展。 3.spring框架有什么特点:1.方便解耦,简化开发。2.AOP编程的支持--更方便对源码进行扩展。3.声明式事务的支持4.方便集成各种优秀框架--mybatis hibernate mybatis-plus 等5.方便程序的测试--spring提供了自己的单元测试。
2. 为什么使用spring?
控制正转--类与类之间耦合性太高。可维护性差。借助工厂模式来解决类与类之间的耦合。
2.1 使用工厂模式和接口来解决上面的耦合
上面我们通过工厂模式+接口模式解决了类与类之间的耦合。 但是我们编写的工厂模式代码考虑不全面。spring框架提供了IOC模式帮你完成类的创建。以及类与类之间的依赖。
3. IOC
控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。 IOC:控制反转--有spring容器创建对象并管理对象的生命周期。 DI: 依赖注入,spring会自动注入该类所依赖的属性。
3.1 怎样实现spring的ioc功能
1.引入spring依赖
<dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.2.15.RELEASE</version></dependency>
2.配置文件
<?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"> <!--把Teacher 对象交给spring管理.bean表示一个对象.id: bean的唯一标识class: 表示要创建对象的全类名--><bean id="t" class="com.aaa.Teacher"></bean> </beans>
3.创建一个类
public class Teacher {public void show(){System.out.println("Teacher show()");} }
4.测试
public class Test01 {public static void main(String[] args) {//获取spring容器。ApplicationContext app=new ClassPathXmlApplicationContext("spring.xml");//从容器中获取指定的对象。---测试目的就是想让大家知道容器帮你创建Teacher类的对象。Teacher teacher= (Teacher) app.getBean("t");teacher.show();} }
3.2 获取bean的方式
表示从spring中获取对象的方式。
1.根据id获取bean对象
//获取spring容器。ApplicationContext app=new ClassPathXmlApplicationContext("spring.xml");//从容器中获取指定的对象。---测试目的就是想让大家知道容器帮你创建Teacher类的对象。Teacher teacher= (Teacher) app.getBean("t");
缺点: 根据id获取需要强制转换。 一旦强制就可能出现数据安全问题。
2.根据反射类获取bean对象
Teacher teacher = app.getBean(Teacher.class);teacher.show();
缺点: 如果容器中存在多个该类型的对象时无法拿到。
3.根据id和反射类获取bean对象
Teacher teacher = app.getBean("t",Teacher.class);
面试题: 获取bean的方式。
3.3使用注解完成bean的创建
上面我们在xml文件中通过bean标签,已经完成了bean创建交于spring来管理。如果有大量的类都需要交于spring创建,那么我们就需要在xml中写大量的bean标签。spring提供了注解方式。
常用注解:
@Controller: 控制层类上
@Service: 业务层
@Repository: mapper层
上面三个注解的作用和@Component一样的。它们的底层都是用的@Component.区分不同层的类。
3.4 bean的作用域。
spring帮你创建bean的方式。
提供了四种作用域:
singleton: 单例。--spring只创建一次对象。 采用该模式。
prototype: 多例。--每次得到beanspring都创建新的bean;
request: 当请求时创建bean对象。。
session: 一个会话共享一个bean.
![]()
request和session只适合web
4. DI依赖注入
上面我们知道spring可以帮你完成bean对象的创建。 如果某个类依赖另一个类对象。我们也可以使用spring的DI功能。
DI( Dependency Injection ):依赖注入 就是给对象中的属性注入相应的值.
IOC控制反转的最终目的就是降低程序的耦合,也就是削减依赖关系。
依赖关系的管理以后都交给spring维护,依赖关系的管理就称之为依赖注入。也就是说在当前类需要用到其它类的对象时,由spring为我们提供,我们只需要在配置文件中说明依赖关系的维护就可以了。
4.2 注入方式
第一种: 通过set方法注入 第二种: 通过构造方法 第三种: 自动注入
自动注入
通过set方法
构造方法注入值
<bean id="t2" class="com.ddd.Teacher"><constructor-arg name="name" value="李四"/><constructor-arg name="age" value="19"/></bean>
使用第三方的类,第三方的值需要我们安装我们的要求给定
4.3 可以使用注解完成注入关系。
@Autowired:安装类型匹配,在按照id匹配。