什么是Spring
Spring 是一个开源框架,是JavaEE开发必备级技能,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。任何 Java 应用都可以从 Spring 中受益。Spring 的核心是控制反转(IoC)和面向切面(AOP)。简单来说,Spring 是一个分层的 JavaSE/EE full-stack(一站式) 轻量级开源框架。Spring发展到今天已经形成了一种开发的生态圈,Spring提供了若干个项目,每个项目用于完成特定的功能
Spring 官网:https://spring.io
Spring核心
● Spring 面向切面编程(AOP)和控制反转 (IOC) 容器
Spring优势
☞ 简化开发,降低企业级开发的复杂性
➠IOC
➠AOP
◆事务处理(基于AOP衍生而出)
☞ 框架整合,高效整合其他技术,提高企业级应用开发与运行效率
➠MyBatis
➠MyBatis-plus
➠Struts
➠Struts2
➠Hibernate
➠…
️️️️️️
spring全家桶
以下几种技术基本上能够应对企业级开发所有的主流工作 ***
Spring Framework:(底层框架,设计层框架,在整个Spring家族中具有举足轻重的地位,其它所有技术均依赖Spring Framework,是Spring生态圈中最基本(顶级)的项目,是其他项目的根基)
Spring Boot:(Spring能够简化开发,使用Spring Boot技术可以在简化开发的基础上加速开发,用来提高开发速度)*
spring Cloud:(分布式开发)
Spring Framework 系统架构
Spring 学习路线
核心概念
耦合度
☞ IOC (Inversion of Control)控制反转 ➠ 降低耦合度(充分 )
●使用对象时,由主动new产生对象转换为由外部 提供对象,此过程中对象创建控制权由程序转移到外部 ,此思想称为控制反转
️️Spring技术对IOC思想进行了实现
●Spring提供了一个容器,称为IOC容器(管理对象的创建和初始化 ),用来充当IOC思想中的“外部”
●IOC容器负责对象的创建、初始化等一系列工作,被创建或被管理的对象在IOC容器中统称为Bean
☞ DI(Dependency Injection)依赖注入
●在容器中建立Bean与Bean之间的依赖关系的整个过程,称为依赖注入
☞目标:充分解耦
●使用IOC容器管理bean (IOC)
●在IOC容器内将有依赖关系的bean进行关系绑定(DI)
☞最终效果
●使用对象时不仅可以直接从IOC容器中获取,并且获取到的bean已经绑定了所有的依赖关系
Spring配置文件
import com.GY.service.impl.BookService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class GY {
public static void main(String[] args) {
//1.获取IOC容器
ApplicationContext c= new ClassPathXmlApplicationContext("applicationContext.xml");
//2.获取bean
BookService bookService= (BookService) c.getBean("bookService");
bookService.save();
}
}
(可以观察到业务层中一点数据层的影子都没有)
Bean的配置
Bean的基础配置
*若对Bean的id的命名习惯不同,Bean也可以起多个名称(别名)
注意事项
获取Bean无论是通过id还是name获取,如果无法获取到,将抛出异常(未定义的Bean)
Bean的作用范围配置( 控制Bean创建的实例的数量)
Spring默认给我们创建的Bean是一个单例的( singleton)
通过配置scope创建非单例的Bean
? 为什么bean默认为单例?***
对于Spring来说它帮我们管理的Bean放在它的容器中,假定它给我们创建出的Bean为非单例的,那么这个Bean的数量将会有无穷多个(用一次,创建一个)这样对Spring容器来说也将会有一个很大的压力。所以Spring不是帮我们管理这一类Bean的(Spring帮我们管理那一类复用的对象)
☞适合交给容器进行管理的Bean
●表现层对象
●业务层对象
●数据层对象
●工具对象
☞不适合交给容器进行管理的Bean
●封装实体的域对象
# bean本质上就是对象,创建bean使用构造方法完成
️️️️️️
实例化bean的三种方式:
①构造方法(常用)
②静态工厂(了解)(创建对象不用new,而是使用工厂做一定程度的解耦) 了解
?如果对象是以静态工厂创建出来的,那么Spring该如何管理?
(接口)
package com.GY.dao.impl;
public interface sss {
public void save();
}
(接口实现类)
package com.GY.dao.impl;
public class useSSS implements sss {
public void save(){
System.out.println("GYGYGYGYGYYGY");
}
}
(实现类的静态工厂)
package com.GY.dao.impl;
public class sssFactory {
public static sss getsss(){
return new useSSS();
}
}
运行结果:
③实例工厂(了解)与FactoryBean(实用)
package com.GY.dao.impl;
public class sssFactory {
public sss getsss() {
return new useSSS();
}
}
实力工厂运行方式
×××配置繁琐×××
️️️️️️
Spring针对实例工厂创建模式进行了改良
☞使用FactoryBean实例化Bean-
package com.GY.dao.impl; import org.springframework.beans.factory.FactoryBean; //实现FactoryBean接口指定泛型 public class sssFactoryBean implements FactoryBean{ //得到Bean实例 @Override public sss getObject() throws Exception { return new useSSS(); } //得到Bean返回对象类型 @Override public Class> getObjectType() { return sss.class; } //用来设定单例(true)/非单例(false);通常我们都为单例,因此这个方法一般不写 @Override public boolean isSingleton() { return false; } }
☞配置Bean的方式



