Spring5-IDEA版学习笔记

1、Spring简介

Spring 是一个轻量级的控制反转(IOC)且面向切片(AOP)的容器框架

官方文档:核心技术 (spring.io)

七大模块: 

 导入spring maven地址:

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

优点:

  • 开源免费的框架
  • 轻量级、非入侵式的框架
  • 控制反转IOC、面向切面AOP
  • 支持事务处理,对框架整合的支持


2、Spring组成及拓展

  • SpringBoot:快速开发单个微服务、约定大于配置
  • Spring cloud:基于Spring boot,企业级开发,前置学习springmvc和spring
  • 弊端:发展太久违背了原来的理念,杂糅太多,配置繁琐(配置地狱!)


3、IOC理论推导

 IOC原型:set注入,再新增业务后,程序员不用再大量更改代码,新增了dao业务后,不用更改service层,而是在用户test类里面直接set业务类型,相当于程序由原来的主动执行变成了受用户控制的被动执行,这就是控制反转。


4、10C本质

控制反转是一种通过描述(XML或注解)并通过第三方去生产或获取特定对象的方式。在Spring中实现控制反转的是loC容器,其实现方法是依赖注入(DependencyInjection,Dl)。 


5、HelloSpring

到了现在,我们彻底不用再程序中去改动了,要实现不同的操作,只需要在xml配置文件中进行修改,所谓的loC,一句话搞定:对象由Spring 来创建,管理,装配! 

控制:谁来控制对象的创建,传统应用程序的对象是由程序本身控制创建的,使用Spring后,对象是由Spring来创建的
反转:程序本身不创建对象,而变成被动的接收对象依赖注入:就是利用set方法来进行注入的.IOC是一种编程思想,由主动的编程变成被动的接收


6、IOC创建对象方式

  • 1默认使用无参构造创建
  •  2有参构造,通过下标赋值、参数名、参数类型创建 

创建bean时就已经实例化了。 


7、Spring配置说明

  • 别名alias ;
  • bean内的配置:
<!--id :bean 的唯一标识符,也就是相当于我们学的对象名class :bean 对象所对应的全限定名:包名 +类型name :也是别名,而且name 可以同时取多个别名
-->
<bean id="userT" class="com.kuang.pojo.UserT" name="user2 u2,u3;u4"><property name="name" value="西部开源"/></bean>
  • import导入别的xml文件,应用于多人开发,合成所有的xml文件为一个总的,内容相同的也会被合并。 


8、DI依赖注入环境

三种方式注入:

  • 构造器注入(之前的做法)
  • set方式注入
  • 拓展方式注入 

例如官网案例的p标签注入:


9、依赖注入之Set注入


10、c命名和p命名空间注入

官方案例解释: 

p注入就是特根据特性注入,为set注入;而c注入就是构造器注入:

11、Bean的作用域

  • 单例模式:(默认是单例模式,不需要显式设置)

  • 原型模式:prototype

每次从容器中get都会产生新对象

  • 其余的request、session、application


12、自动装配Bean

  • 在xml中显式配置
  • 在java中显示配置
  • 隐式自动装配 (autowired)

byname会自动查找对象中set方法后面的变量对应的beanID,且要保证id唯一;bytype与byname相似,但是必须类型唯一才能装配;


13、注解实现自动装配

  •  注解开发一般比xml更好,配置注解支持<context:annotation-config/>(若不配置则会报错空指针异常)
<?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>

使用注解可以忽略set方法,因为底层是使用反射实现,可以直接使用在属性上,也可以写在set方法上  

  • nullable,可以使字段为空:

  • autowired的required设置: 

  • 可以使用此注解指定装配对象:

  • autowired和qualifier是一套,Resource也可以实现: (可以加name属性来定位)

 

  • 小结: 
  1. 都可以自动装配,都可以放在属性字段;
  2. @Autowired默认bytype实现,@Resource默认byname,如果找不到就通过bytype,再找不到就报错
  3. 执行顺序不同


14、Spring注解开发

  • bean

@Component

使用组件功能,则不再需要配置bean,直接使用注解扫描 :(@Component放在类上 )

  • 属性注入

@Value:

  • 衍生注解

@Component有几个衍生注解,在web开发中按照mvc分层:这三个注解都和component等价,只是用于表示mvc分层,都是将类放在容器中装配

  1. dao
  2. service
  3. controller

  • 作用域

@Scope

  • 小结 
  1. xml万能,适用于任何场合,维护简单方便;
  2. 注解开发不是自己的类用不了,维护复杂;
  3. 最佳实践:xml用来管理bean,注解只负责属性注入(只用@value) ;
  4. 使用时只需要注意开启注解支持:


15、使用JavaConfig实现配置

完全不需要配置文件,只用java类配置,不用xml配置  ;Java Config是spring的一个子项目,spring4后成为核心功能。 

官方示例:

创建configjava文件,且配置config文件:

注意@Configuration也是用于将类注册到容器中:

ApplicationContext下的类:

 全程没有配置xml文件: 

 @Import: 

  • 总结:

实体类用@Component,配置类用@Configuration,(可能还用到@ComponentScan、@Import),纯java配置的方式在spring boot中随处可见。


16、@SpringBootApplication注解 源码追溯

SpringBoot底层逻辑就是Spring扩展而来  


17、静态代理模式

  •    类似中介


18、静态代理再理解

  


19、动态代理详解

静态代理缺点就是类增加了,开发效率降低了,动态代理底层是反射,代理类是动态生成的

实现机制氛围里两类:

  1. 基于接口实现:JDLLK代理 
  2. 基于类实现 :cglib、java字节码

需要了解两个类:Proxy、InvocationHandle 

InvocationHandle 需重写invoc方法:

代理类的创建程序: 

客户:(动态生成代理) 

  • 情景2:

万能模板:(创建代理角色)

 

新增需求(获取日志功能),横向增加需求:


20、AOP实现方式一 

 

 需要导入AOP织入依赖包

<!--https://mvnrepository.com/artifact/org.aspecti/aspectiweaver -->
    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectiweaver</artifactId>
      <version>1.9.4</version>
    </dependency>

 配置Spring的xml:

Service:

packagecom.kuang.service;
public interface Userservice {
public void add();
public void delete()public void update(
public void select();
}

 log:

Test: 

import com.kuang.service.UserService;
import com.kuang.service.UserServiceImp1;
import org.springframework.context.Applicationcontext;
import org.springframework.context.support.classPathXmlApplicationcontext;
public class MyTest {
public static void main(string[] args){
Applicationcontext context = new classPathXmlApplicationcontext( configLocation: "applicationContext.xml");//动态代理代理的是接口UserService userService =(UserService)context.getBean( s: "userService");
userService.add();}}

21、AOP实现方式二

使用自定义类实现AOP:

 


22、注解实现AOP

 


23、回顾Mybatis

  • mybatis步骤:

环境:

技术:

编写实体类 

编写核心配置文件

注册接口

编写接口和实现类 

编写Mapper.xml

测试

  •  导入jar包:
  1. junit
  2. mybatis
  3. mysql
  4. spring
  5. aop织入
  6. mybatis-spring(new)


24、整合Mybatis方式一

 MyBatis-Spring 会帮助你将 MyBatis 代码无缝地整 合到 Spring 中。它将允许 MyBatis 参与到 Spring 的事务管理之中,创建映射器 Mapper 和 SqlSession 并注入到 Bean 中,以及将 Mybatis 的异常转换为 Spring 的 DataAccessException。最终,可以做到应用代码不依赖于 MyBatis。

工程目录:

步骤:

 

user:

user接口:

userxml:

导入依赖:

 

xml配置:

spring配置

写实现类:

 注入spring:

测试:

 


25、整合Mybatis方式二

 

 

测试类使用usermapper2 


26、事务回顾 

  • 确保完整性和一致性,要么成功要么失败 
  • ACID原则:原子性、一致性、隔离性、持久性
  • 步骤:
  1. 导入上述24点中依赖
  2. 建包、类(实体类、接口)
  3. 导入mybatis配置文件
  4. 整合spring 
  5. 写实现类(两种方式)


27、Spring声明式事务

spring事务管理分为:

  1. 声明式事务(AOP),交由容器管理
  2. 编程式事务 (会改变代码,不考虑)

 mybatis-spring – MyBatis-Spring | 简介 (vrd.net.cn)

 

  • 24
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值