Spring
01: Spring简介
02: Spring–Spring组成及拓展
03: Spring–IoC理论推导&IoC本质
04: Spring–第一个Spring程序HelloSpring&修改上节案例
05: Spring–IoC创建对象方式
06: Spring–Spring配置
07: Spring–依赖注入(Dependency Injection)
08: Spring–Bean的作用域
09: Spring–自动装配Bean(使用自动装配xml配置)
10: Spring–使用注解实现自动装配(推荐使用)
11: Spring–注解开发
12: Spring–使用JavaConfig实现配置
13: Spring–静态代理再理解&AOP
14: Spring–AOP(通过 Spring API 实现&自定义类来实现Aop&使用注解实现)
15: Spring–回忆Mybatis
16: Spring–整合Mybatis
17: Spring–Spring声明式事务
1. Spring–静态代理再理解
我们想要去增强原来类的方法
1.1 创建一个抽象角色,比如咋们平时做的用户业务,抽象起来就是增删改查!
UserService.java
//抽象角色:增删改查业务
public interface UserService {
void add();
void delete();
void update();
void query();
}
1.2 我们需要一个真实对象来完成这些增删改查操作
UserServiceImpl.java
package com.tian.staicProxy;
//真实对象,完成增删改查操作的人
public class UserServiceImpl implements UserService {
public void add() {
System.out.println("增加了一个用户");
}
public void delete() {
System.out.println("删除了一个用户");
}
public void update() {
System.out.println("更新了一个用户");
}
public void query() {
System.out.println("查询了一个用户");
}
}
1.3 需求来了,现在我们需要增加一个日志功能,怎么实现!
- 思路1 :在实现类上增加代码 【麻烦!】
- 思路2:使用代理来做,能够不改变原来的业务情况下,实现此功能就是最好的了!
1.4 设置一个代理类来处理日志!代理角色
UserServiceProxy.java
package com.tian.staicProxy;
//代理角色,在这里面增加日志的实现
public class UserServiceProxy implements UserService {
private UserServiceImpl userService;
public void setUserService(UserServiceImpl userService) {
this.userService = userService;
}
public void add() {
log("add");
userService.add();
}
public void delete() {
log("delete");
userService.delete();
}
public void update() {
log("update");
userService.update();
}
public void query() {
log("query");
userService.query();
}
public void log(String msg) {
System.out.println("执行了" + msg + "方法");
}
}
1.5 测试访问类:
Client.java
package com.tian.staicProxy;
public class Client {
public static void main(String[] args) {
// 真实业务
UserServiceImpl userService = new UserServiceImpl();
// 代理类
UserServiceProxy userServiceProxy = new UserServiceProxy();
// 使用代理类来实现日志功能
userServiceProxy.setUserService(userService);
userServiceProxy.add();
}
}
运行结果:
1.6 小结
我们在不改变原来的代码的情况下,实现了对原有功能的增强,这是AOP(AOP为Aspect Oriented Programming的缩写,意为:面向切面编程)中最核心的思想
聊聊AOP:纵向开发,横向开发