SSM框架学习第一天
Spring框架、SpringMVC框架、Maven高级、SpringBoot框架、MyBatis-Plus框架
Spring技术
Spring Frameword 框架
Spring Boot 简化开发,使得Spring开发更快
Spring Cloud 分布式开发
Spring Frameword 系统架构
是Spring中最基础的项目,是其他项目的根基。
架构图(4系列)
上层依赖于下层
Core Container 核心容器
是用来装对象的窗口。
AOP 面向切面编程
在不惊动原始程序的基础上给它增强功能。
Aspects AOP思想的实现
实现AOP思想。
Data Access 数据访问 Data Integration 数据集成
与数据层相关的技术
Transactions 事务控制方案
Web web开发
Test 测试 单元测试与集成测试
IoC 控制反转
解决问题
创建对象时不主动new产生对象,而是由外部提供对象。
思想
对象的创建控制权由程序转移到外部,这种思想称为控制反转。
好处
解耦,降低耦合度
Spring实现IoC思想
1、Spring提供一个容器,称为IoC容器,用来充当IoC思想中的外部。
2、IoC容器负责对象创建、初始化等一系列工作,这些对象称为Bean。
DI 依赖注入
当Bean与Bean之间存在依赖关系,IoC容器建立Bean与Bean之间的依赖的过程,称为依赖注入。
最终效果
使用对象不仅直接从IoC容器中获取,而且获取到的Bean已经绑定好依赖关系了。
IoC入门案例
1、引入依赖坐标
导Spring Context
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
2、配置Bean
1、创建一个spring config的配置文件
2、在配置文件里配置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 http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 配置Bean-->
<!-- 格式 <bean id="名字" class="对应的对象类" />-->
<bean id="dao1" class="com.lwg.dao.dao1" />
<bean id="service1" class="com.lwg.service.service1" />
</beans>
3、获取IoC容器
格式:ApplicationContext applicationContext=new ClassPathXmlApplicationContext(“配置文件名”);
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
扩展:
4、获取Bean
applicationContext.getBean(“配置文件中起的id”);
daoFace dao1 = (daoFace) applicationContext.getBean("dao1");
dao1.demo1();
DI入门案例
1、将new对象删除掉,创建一个set方法由外部提供对象。
2、在配置文件里绑定依赖,谁调用就在谁里面配置。
property里的属性值对应关系:
配置Bean
id:起的唯一名字。
name:别名,可以多个,中间用空格或者逗号分隔,用法和id一样的。
class:对应的对象类,类的全包名
scope:Bean的作用范围,也就是创建对象的个数,有singleton和prototype两个值。
singleton:默认是这个,单个对象,无论你获取Bean多少次都是一个Bean,都是第一次获取的那个Bean。
prototype:多个,每一次获取Bean都是一个新Bean。
init-method:设置创建时调用的方法。
destroy-method:设置销毁时调用的方法。
<?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">
<!-- 配置Bean-->
<!-- 格式 <bean id="名字" class="对应的对象类" />-->
<bean id="dao1" name="dao2 dao3" class="com.lwg.dao.dao1" scope="singleton" init-method="init" destroy-method="desstoy" />
<bean id="service1" class="com.lwg.service.service1" >
<property name="dao1" ref="dao1" />
</bean>
</beans>
适合用容器进行管理的Bean:
数据层对象
逻辑层对象
表现层对象
工具类对象
不适合容器进行管理的Bean:
封装实体域的对象
Bean实例化
Bean实例化调用了类的无参的构造方法
Bean生命周期
设置生命周期方法
1、在配置文件里设置init-method、destroy-method属性值。
2、在Bean对应的类里实现两个接口InitializingBean, DisposableBean
覆盖两个方法, afterPropertiesSet()创建、 destroy()销毁
依赖注入
sett注入
1、注入引用类型
在配置文件中使用property标签注入,注入多个就写多个property
<property name="dao1" ref="dao1" />
2、注入基本数据类型和字符串类型
在配置文件中使用property标签,注入多个就写多个property,不过这里不使用ref而是value。
<property name="string" value="132456" />
注:这里的value永远都是字符串,无论Bean类那边的是什么基本类型,它已经封装好了,会进行转换的。
构造器注入
1、注入引用类型
方法不再是用set方法了,而是换成了构造方法。
在配置方法里不再是使用property标签,而是constructor-arg标签,一样是设置name和ref的值,只不过name对应的是构造方法里的形参名了。
<constructor-arg name="dao2" ref="dao2" />
2、注入基本数据类型和字符串类型
和注入引用类型一样,只不过是将ref替换成value。
<constructor-arg name="string" value="456" />
解决这个name名要与构造方法的形参名的耦合度高的问题:
1、将name属性换成type属性按形参的类型注入。
<!-- <constructor-arg name="string" value="456" />-->
<constructor-arg type="java.lang.String" value="456" />
2、将name 换成index属性按形参位置注入。
<!-- <constructor-arg name="string" value="456" />-->
<constructor-arg index="0" value="456" />
依赖自动装配
IoC容器根据Bean所依赖的资源在容器中自动查找并注入到Bean中。
1、按类型自动装配
自动装配只能对引用类型注入
首先Bean对应的类要提供set方法,然后配置文件不再使用property标签,而是添加了autowire=“byType” 。
<bean id="service1" class="com.lwg.service.service1" autowire="byType" >
<!-- 不在需要这个了 <property name="dao1" ref="dao1" />-->
</bean>
注:这个是按类型装配,自动装配查找是在IoC容器里查找,如果容器里面没有这种类型的Bean会装配失败,报错,同样,当存在两个及以上这种类型的Bean也装配不了,报错。
2、按名称自动装配
autowire=“byType” 改为autowire=“byName”
注:按名称自动装配要求IoC容器里的id名和Bean对应的类中注入属性名字一样,或者装配不了。
注:自动装配优先级低于sett注入和构造器注入。
集合注入
当注入是数组、list、set、map
Bean对应的类要设置对应的set方法。
配置文件中使用property标签注入
注入数组:
<property name="array" >
<array>
<value>123</value>
<value>456</value>
<value>789</value>
</array>
</property>
注入List:
<property name="stringList">
<list>
<value>boot</value>
<value>spring</value>
<value>ssm</value>
</list>
</property>
注入Set
<property name="stringSet" >
<set>
<value>spring</value>
<value>boot</value>
<value>boot</value>
<value>mvc</value>
</set>
</property>
注:注入set即使value里面写了重复的它会自动去掉。
注入Map
<property name="stringMap">
<map>
<entry key="cot" value="123" />
<entry key="git" value="456" />
</map>
</property>
Set" >
<set>
<value>spring</value>
<value>boot</value>
<value>boot</value>
<value>mvc</value>
</set>
</property>
注:注入set即使value里面写了重复的它会自动去掉。
注入Map
<property name="stringMap">
<map>
<entry key="cot" value="123" />
<entry key="git" value="456" />
</map>
</property>