spring笔记

spring是什么?

spring是一个容器容器中存放的是java对象,用来创建对象,管理对象,给对象赋值,底层是反射创建对象,存放到map中
spring中的对象默认是单例的

核心技术

  1. IOC 控制反转
    ioc技术实现使用的是di(依赖注入),开发人员在项目中只需要提供对象的名称,对象的创建、查找、赋值都由容器内部实现。di包含(1)set注入(2)构造方法
    ioc能够实现业务对象之间的解耦合,例如service和dao对象之间的解耦合
  2. AOP 面向切面编程

spinrg目的?

实现解耦合,即使得类和类之间解绑,容易修改

spring把创建好的对象放到map中,spring框架中有map存储对象
map的key是唯一的对象的id值,value是对象

在创建spring的容器时,会创建配置文件中的所有对象

什么样的对象放入到容器中?

dao类、service类、controller类、util类
【怎么放入】

  • 使用XML配置文件
  • 注解

不放到容器类的对象?

servlet、listener、filter

使用spring框架的步骤

在这里插入图片描述

常用注解

@Component 创建对象(创建下面三个以外的其他对象)
@Repository 创建dao对象,用来访问数据库的
@Service 创建Service对象,用来处理业务逻辑的,可以有事务功能
@Controller 创建控制器对象的,用来接收请求,显示处理结果
@Value 简单类型的属性赋值
@Autowired spring框架中引用类型的赋值注解,支持byName,byType,默认是byType
@Resource jdk中的注解,使用自动注入给引用类型赋值,支持byName,byType,默认是byType

注解的使用步骤

  1. 加入依赖:spring-context,间接加入spring-apo
  2. 在类中加入注解
  3. 在配置文件中加入组件扫描器 <context: component-scan base-package=“包名”>

byName按名称注入,java类中引用类型的属性名和spring容器中的bean的id一样,这样的bean赋值给引用类型
byType按类型注入,java引用类型是数据类型和spring容器中的bean的class是

代理 proxy

代理对象是目标对象的拓展,并会调用目标对象

动态代理实现方式:jdk 、 cglib
动态代理的作用:

  1. 在目标类源代码不改变的情况下,增加功能
  2. 减少代码重复
  3. 专注业务逻辑代码
  4. 解耦合,让你的业务功能和日志,事务非业务功能分离

AOP Aspect Orient Programming

AOP的底层就是动态代理,采用了两种代理方式:JDK的动态代理、CGLIB的动态代理,可以理解为AOP就是动态代理

jdk动态代理:使用jdk反射包中的类实现创建代理对象的功能(要求目标类必须实现接口
cglib:使用第三方工具库,实现代理对象的创建(要求目标类必须继承
目标类没有接口,用的cglib动态代理
(或者有接口,加上proxy-target-class="true"

【AOP即动态代理的规范化】把动态代理的实现步骤,方式都定义好了,让开发人员用统一的方式使用动态代理

Aspect:切面,给你的目标类增加的功能,就是切面
切面的特点,一般都是非业务方法,独立使用

常见的切面:日志、事务、统计信息、参数检查、权限验证

怎么理解面向切面编程?
1.需要在分析项目功能时,找出切面
2.合理的安排切面的执行时间(在目标方法前还是目标方法后)
3.合理安排切面的执行位置,哪个类、哪个方法增加功能

一些术语

  1. joinPoint:连接点【一个方法】,连接业务方法和切面位置,就是某个类中的业务方法
  2. pointcut:切入点【多个方法】,多个连接点方法的结合
  3. 目标对象:给哪个类增加功能,这个类就是目标对象
  4. advice:通知,通知表示切面功能执行的时间

切入表达式语法

execution(访问权限 方法返回值 方法声明(参数) 异常类型)
【以下的点 都是两个点】

*表示:0至多个任意字符
…表示:【1】用在方法参数中,表示任意多个参数【2】用在包名后,表示当前包以及其子包路径

execution(public * *(..))  
**任意公共方法**
 execution(* set*(..)) 
 **任何一个以set开始的方法**
execution(* com.xyz.service.*.*(..))
**service 包下面的所有类 所有方法**
execution(* *..service.*.*(..))
**所有包下面的service子包下所有类 所有方法为切入点**
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值