Spring学习

1、Spring

前期准备

spring framework

官网文档:https://spring.io/projects/spring-framework#overview
中文网站:https://springref.com/
官方下载地址:
Github:https://github.com/spring-projects/spring-framework
maven依赖:

<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.3.21</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>5.3.21</version>
</dependency>

Spring是一个轻量级、非入侵式的控制反转(IOC)、面向切面(AOP)的框架!

2、控制反转(IOC)

理论推导

思想原型:控制权交到用户手中,实现依赖注入

IOC创建对象

1、默认使用无参构造
2、有参构造方式

  • 下标赋值
  • 通过类型创建
  • 通过参数名设置
    在配置文件加载时,容器中管理的对象就已经初始化了

3、Spring配置

alias 别名
bean配置

!--使用Spring来创建对象时,都称为bean-->
    <!--类型 变量名 = new 类型()
    Hello hello = new Hello();
    id = 变量名
    class = new 对象
    name = 别名,可以定义多个
    property 相当于对象的属性
    核心:使用set方法实现注入
    -->
    <bean id="hello" class="com.yangs.pojo.Hello" name="h2 h2,h3">
        <property name="str" value="Spring"></property>
    </bean>

import:一般用于团队开发使用,可以将多个配置文件合并

4、依赖注入

构造器注入

set注入【重点】

依赖:bean对象的创建依赖容器
注入:bean对象的所有属性,由容器注入

拓展方式注入

可以使用p命名空间和c命令空间
需导入约束

5、bean的作用域 scope

singleton 单例模式(默认)
prototype 原型模式:每次从容器中get时,都会产生一个新对象
其他的(request、application、session)在web中使用

6、Bean的自动装配

Spring会在上下文中自动寻找,并自动给bean装配属性
三种方式:

1、在xml中显示装配

2、在java中显示装配

3、autowire - 隐式自动装配bean【重点】

  • byName自动装配:和set方法后面的值对应的bean id。需保证bean id要唯一
  • byType:和自己属性类型相同的bean。需保证class唯一

4、使用注解方式

  1. 需导入约束:context约束
  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"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd">

    <context:annotation-config/>

</beans>
  1. 在属性中使用@Autowired注解,实现自动装配,使用byType方式实现
    required 属性 默认为false,为true时,支持null值
    @Autowired(required = false)
    扩展:@Nullable 标记此注解后,该字段就可以为null值
  2. @Qualifier(value=“xxx”):如果@Autowired不能唯一自动装配时,需要通过该注解指定id
  3. @Resource 可以实现自动装配,默认使用byName方式实现,如果找不到名字,就会使用byType方式实现,两个都找不到则报错
    name属性,自定义id
    @Resource(name=“xxx”)

7、使用注解开发

指定要扫描的包

<context:component-scan base-packages/>

1、bean
@Component
2、属性注入
@Value(“xxx”)
3、@Component 衍生注解
dao @Repository
serivice @Service
controller @Controller
四个注解功能一样,都代表将某个类注册到spring中,装配bean
4、作用域 @Scope
5、最佳实践:

  • xml管理bean
  • 注解只负责完成属性的注入

8、javaConfig

@Configuration 也会被spring容器托管,注册到容器中,本质也是一个@Component
代表一个配置类,相当于beans.xml

9、代理模式

SpringAOP 底层
代理模式分类:

  • 静态代理
  • 动态代理

静态代理

优点:

  • 使真实角色更纯粹,不用关注一些公共业务【单一职责】
  • 公共的处理交给代理角色,实现业务分工
  • 公共业务发送扩展时方便集中管理

缺点:一个真实角色就对应一个代理角色,代码量会翻倍

动态代理

动态生成的代理角色
分类:基于接口、基于类
本质:反射机制
Proxy --代理
InvocationHandler --接口,调用处理程序
优点:
一个动态代理类可以代理多个类,只要实现了同一个接口即可

10、AOP切面

导包 aspectjweaver
配置文件导入aop的约束
切入点、环绕增强

11、整合Mybatis

DataSource、sqlSessionFactory
1、sqlSessionTemplate
2、sqlSessionDaoSupport

12、声明式事务

编程式事务:改变原有的代代码逻辑
声明式事务:通过AOP横切进去,不影响原有的代码逻辑

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值