核心之代理模式"/>
Spring核心之代理模式
代理实现程序功能的统一维护的一种技术。 AOP 的作用:不修改源码的情况下,程序运行期间对方法进行功能增强 好处: 1 、减少代码的重复,提高开发效率,便于维护。 2 、专注核心业务的开发。 核心业务和服务性代码混合在一起 开发中:各自做自己擅长的事情,运行的时候将服务性代码织入到核心业务中。 通过 spring 工厂自动实现将服务性代码以切面的方式加入到核心业务代码中。代理模式
代理:自己不做,找人帮你做。 代理模式:在一个原有功能的基础上添加新的功能。 分类:静态代理和动态代理。
首先,新建一个service包,作为业务层,业务层新建代码UserService
package com.lr.spring.service;public interface UserService {void insert();
}
再新建一个staticProxy(静态的代理服务器)包,写UserService的实现类放在staticProxy包里
1.代码逻辑
目标对象
package com.lr.spring.staticProxy;import com.lr.spring.service.UserService;
//目标对象
public class UserServiceImpl implements UserService {@Overridepublic void insert() {System.out.println("目标对象的方法:插入一个User对象");}
}
代理对象
package com.lr.spring.staticProxy;import com.lr.spring.service.UserService;
//代理对象
public class UserServiceProxy implements UserService {//1.注入目标对象,底层我们依然需要去调用目标对象中接口的方法private UserService userService;//构造方法public UserServiceProxy(UserService userService) {this.userService = userService;}//2.需要对目标对象的特定方法进行增强(加上事务),调用目标对象的方法@Overridepublic void insert() {try{System.out.println("开启事务");userService.insert();//调用目标对象的方法System.out.println("提交事务");}catch (Exception e){System.out.println("回滚事务");}finally {System.out.println("最终操作");}}
}
测试目标对象与代理对象
@Testpublic void test01() {//目标对象UserService userService = new UserServiceImpl();userService.insert();System.out.println("..................");//代理对象UserServiceProxy userServiceProxy = new UserServiceProxy(userService);userServiceProxy.insert();}
面向切面编程思想
AOP 为 Aspect Oriented Programming 的缩写,意思为 面向切面编程 ,是通过预编译方式和运行期动态 代理实现程序更多推荐
Spring核心之代理模式
发布评论