SSM框架

SSM框架学习第一天

Spring框架、SpringMVC框架、Maven高级、SpringBoot框架、MyBatis-Plus框架

Spring技术

Spring Frameword 框架

image-20220703130740039

Spring Boot 简化开发,使得Spring开发更快

image-20220703131245822

Spring Cloud 分布式开发
image-20220703131357039

Spring Frameword 系统架构

​ 是Spring中最基础的项目,是其他项目的根基。

架构图(4系列)

上层依赖于下层
image-20220703225950333

Core Container 核心容器

image-20220703132001634

是用来装对象的窗口。

AOP 面向切面编程

在不惊动原始程序的基础上给它增强功能。
image-20220703133007373

Aspects AOP思想的实现

实现AOP思想。

image-20220703133021747

Data Access 数据访问 Data Integration 数据集成

与数据层相关的技术
image-20220703230125226

Transactions 事务控制方案
image-20220703230238910

Web web开发

image-20220703230311419

Test 测试 单元测试与集成测试

image-20220703230408201

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方法由外部提供对象。

image-20220703230534346

2、在配置文件里绑定依赖,谁调用就在谁里面配置。
image-20220703161432733

property里的属性值对应关系:
image-20220703161406892

配置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>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

广深度优先

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值