spring笔记

spring笔记

spring全家桶:spring springmvc springboot等等…

spring存在两大核心对象IOC,AOP

IOC(inversion of control)

控制反转 是一个理论概念或者思想

描述的是:把对象的创建,赋值,管理工作都交给代码之外的容器实现

也就是对象的创建时有其他外部资源完成

控制:创建对象 对象的属性赋值 对象之间的关系管理

反转:把原来的开发人员管理和创建对象的权利转移给代码之外的容器实现,由容器代替开发人员管理对象,创建对象,给对象赋值

正转:由开发人员在代码中使用new构造方法创建对象 开发人员主动管理对象

容器:可以是一个服务器软件 也可以是一个框架 spring就是一个容器

为什么使用ioc

目的是减少对代码的改动,也能实现不同的功能,实现解耦合

IOC技术实现

DI就是IOC技术的实现

DI(dependency injection):依赖注入只需要在程序中提供要使用的对象名称就可以了,只与对象如何在容器中创建,渎职,查找 都是容器内部自己帮你实现的 不需要你管理

spring就是使用的di实现的IOC功能 spring底层创建对象 使用的是反射机制

使用注解的di:通过注解完成java创建对象 属性赋值

di实现的两种方式:

1.在spring的配置文件中 使用标签和属性完成 叫做基于xml的di实现

<?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 id="MyStudent" class="com.one.service.bao3.Student" autowire="byName">
        <property name="name" value=""/>
        <property name="age" value="20"/>
    </bean>
  <bean id="school"class="com.one.service.bao3.school">
        <property name="name" value=""/>
        <property name="address" value=""/>
    </bean>
</beans>

将对象在xml中完成创建赋值 id是唯一标识 class是你要赋值的对象

autowire是当你对象存在引用类型时添加的 比如 学生引用学校

需要添加引用类型注入 将两个简单类型关联

2.使用spring中的注解 完成属性的赋值 叫做基于注解的di实现

di语法分类:

​ 1.set注入(设值注入):spring调用类的set方法 在set放可以实现属性的赋值

​ 2.构造注入 spring调用类的有参数构造方法 创建对象 在构造方法中完成赋值

使用步骤:

​ 1.加入maven依赖 关于spring的依赖

​ 2.在类中加入spring注解 不同的地方使用不同的注解

​ 3.在spring的配置文件中 加入一个组件扫描器的标签 用来说明注解在你的项目中的位置

常用注解:

			1.@Component
			2.@Respotory
			3.@Service
			4.@Controller
			5.@Value
			6.@Autowired
			7.@Resource

AOP

1.动态代理:

​ jdk动态代理 时使用proxy method InvocationHandler创建代理对象

jdk动态代理需求目标类必须有实现接口

​ cdlib动态代理:属于第三方工具 创建代理对象 原理是继承 通过继承目标类 创建子类 子类就是代理对象 需求目标类不能是final的 方法也不能是final

动态代理作用:

​ 1.在目标类源代码不改变的情况下 增加功能

​ 2.减少代码的重复

​ 3.专注业务逻辑代码

​ 4.解耦合 让你的业务功能和日志 事务非业务功能分离

aop面向切面编程

基于动态代理实现 可以使用以上两种代理方式

aop就是动态代理的规范化 把动态代理的实现步骤方式都定义好了让开发人员用一种统一的方式就是用的动态代理

切面:给你的目标类增加的功能就是切面 像是日志 事务都是切面

​ 切面的特点:一般都是非业务方法 独立使用的

oop:面向对象编程

怎么理解面向切面的编程?

1.需要在分析项目的功能是 找出切面

2.合理的安排切面的执行时间 (在目标方法前 还是目标方法后)

3.合理的安排切面的执行的位置 在哪个类 哪个方法增加的增强功能

切面三要素

1.切面的功能代码 切面用来干什么

2.切面的执行位置 使用point表示切面执行的位置

3.切面执行时间 使用advice表示时间 在目标方法之前还是之后

术语

1.aspect 切面

2.joinpoint 连接点 连接事务方法和切面位置 就某类的中业务方法

3.pointcut 切入点 指多个连接点方法的集合 多个方法

4.目标对象 给那个类的方法增加功能 这个类就是目标对象

5.advice 通知 通知表示切面功能执行的时间

AOP实现

aop是一个规范 是动态代理的一个规范 一个标准

aop技术的实现框架:

​ 1.spring:spring内部实现了aop规范化 但是我们项目中一般不使用spring的aop实现 因为这不内置的比较笨重

​ 2.aspectj 一个开源的专门做aop的框架 spring继承了aspectj框架

​ 实现方法:1.使用xml 2.注解 常用

学习aspectj框架的使用:

​ 1.切面执行时间 advice

​ 常用注解:

		1.@Before 在方法执行前加入的切面
		2.@AfterReturning 后置切面 在方法执行以后运行的切面
		3.@Around	环绕切面 类似于jdk的动态代理里面的					InvocationHandler
		4.@AfterThrowing 抛出异常
		5.@After 最终切面 在后置切面还要往后的地方执行的注解

执行步骤:

1.创建maven项目

2.加入依赖

3.创建目标类 接口 和他的实现类

​ 要做的事:给类中方法增加功能

4.创建切面类:本质就是一个普通类

​ 1.在类的上面加@aspect

​ 2.在类中定义方法 方式就是切面要执行的功能代码

​ 在方法的上面加入aspectj中的通知注解例如:@before

​ 需要执行切入点表达式execution()

5.创建spring的配置文件 声明对象 把对象交给容器管理

​ 声明对象使用注解或者xml

​ 1.声明目标对象

​ 2.声明切面对象

​ 3.声明aspectj框架中的自动代理生成器标签

​ 自动代理生成器:用来完成代理对象的自动创建功能

6.创建测试类:从spring中获取到目标对象 执行方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值