没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
今日内容
0 复习昨日
1 AOP编程
2 注解实现AOP
0 复习昨日
1 ioc+di用注解实现,都用了哪些注解,什么作用
用于创建对象的: @Controller,@Service,@Repository,@Component
属性赋值
基本类型赋值@Value
引用类型赋值
按类型@Autowired
按名称@Resources
按名称@Autowired+@Qualifier
applicationContext.xml要扫描注解
从容器中获得对象,默认对象名是类名首字母小写
2 spring创建的对象默认是单例?多例?
默认是单例:singleton
也可以指定scope=prototype,多例
3 代理是什么?为什么需要代理?代理类型有几种?什么特点?
代理的是某个类;代理之后,就可以改变对象的访问方式
好处: 保护对象; 对原有方法增强
类型: 静态和动态
区别
静态代理: 提前自己创建好,每个类都会有一个代理,这样不好,因为代理类
越来越多,代码会有冗余
动态代理: 给定一个目标类,会运行时自动创建出代理
动态代理的类型
JDK: 目标类必须有接口,即只能代理接口
CGLIB: 目标类可以有接口,也可以没有接口,即可以代理接口也可以代理
实现类
CGLIB动态代理,有时候也叫做 字节码增强
4 什么是AOP
1 AOP
1.1 概念
Spring中另外一个核心功能,AOP
AOP(Aspect Oriented Programming),即面向切面编程.
OOP(Object Oriented Programming ),即面向对象编程.
AOP面向切面编程,利用 一种称为 "横切" 的技术,剖开封装的对象内部,并将那些影
响了 多个类的公共行为 抽取出封装到一个可重用模块,并将其命名 为"Aspect",即切
面。所谓"切面",简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责
任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的
可操作性和可维护性。
面向切面编程的作用:就是将项目中与核心逻辑无关的代码横向抽取成切面类,通过织
入作用到目标方法,以使目标方法执行前后达到增强的效果.
原理: AOP底层使用的就是动态代理,给AOP指定哪些类型(目标类)需要增强,就会产生对应的
代理对象,代理对象执行方法前后会先执行增 强的方法.
好处:减少系统的重复代码,降低模块之间的耦合度,便于维护,可以只关注核心业务
1.2 AOP术语
连接点(Joinpoint):连接点是程序类中客观存在的方法,可被Spring拦截并切入内
容。即每个方法在切入之前,都是连接点
切入点 (Pointcut):被Spring切入连接点。即真正会增强的目标方法
通知、 增强 (Advice):可以为切入点添加额外功能,分为:前置通知、后置通知、异
常通知、环绕通知等。
目标对象 (Target):被代理的目标对象
织入(Weaving):把通知应用到具体的类,进而创建新的代理类的过程。
代理 (Proxy):被AOP织入通知后,产生的结代理类。
切面 (Aspect):由切点和通知组成,将横切逻辑织入切面所指 定的连接点中。
1.3 应用场景
事务管理
后续spring管理事务用的AOP原理
权限校验
后期使用Spring Security注解开发时,其实利用了AOP思想
日志记录
性能检测
等等
1.4 AOP入门编程【重点】
需求: UserService以及UserServiceImpl,在其中方法执行前,后执行增强的方法
编程的过程:
创建项目
导入依赖
核心依赖
切面依赖
目标类
切面类
织入(配置文件设置)
测试
1.4.1导入依赖
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.1.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>5.1.6.RELEASE</version>
</dependency>
1.4.2 目标类
1.4.3 切面类
演示的环绕通知
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.1</version>
<scope>test</scope>
</dependency>
</dependencies>
public interface UserService {
void findUserById();
void deleteUserById();
}
public class UserServiceImpl implements UserService {
@Override
public void findUserById() {
System.out.println("核心业务---> 查询用户" );
}
@Override
public void deleteUserById() {
System.out.println("核心业务---> 删除用户" );
}
}
public class MyAspect {
剩余23页未读,继续阅读
资源评论
凤凰AI
- 粉丝: 191
- 资源: 353
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功