——学习笔记01【Ioc开发的模式】
——学习笔记02【和的整合】
——学习笔记03【AOP开发】
——学习笔记04【的事务管理】
——学习笔记05【的逆行工程】
——学习笔记06【Maven创建Web工程】
目录
六、的AOP开发
1. AOP的概念
2. 动态代理(了解)
2.1 JDK动态代理
2.2 Cglib动态代理
3. AOP的编程的好处
4. AOP的编程相关术语
?5. AOP的开发模式
5.1 Aop的Xml开发方式
5.2 Aop的注解开发方式
六、的AOP开发 1. AOP的概念
AOP的英文全程为,叫做面向切面编程,主要是在运行期间动态实现在不修改源码的情况下给程序及进行功能增强 。针对目标功能进行扩展或是增强,通俗来说就是不修改源码,让目标获得它本身没有用的新功能 。其实就是OOP编程的一个补充,降低了代码的耦合性 。
AOP开发的底层是通过动态代理来完成,动态代理分为JDK动态代理和Cglib动态代理 。
JDK动态代理:依赖于一个接口
Cglib动态代理:依赖一个类
2. 动态代理(了解)2.1 JDK动态代理
只能对实现了接口的类产生代理 。
实现的步骤:
1)业务的接口和实现类
/** 用户的接口* */public interface UserDao {public void save();public void update();public void find();public void delete();}
/** 用户接口实现类* */public class UserDaoImpl implements UserDao {@Overridepublic void save() {System.out.println("保存用户信息");}@Overridepublic void update() {System.out.println("更改用户信息");}@Overridepublic void find() {System.out.println("查询用户信息");}@Overridepublic void delete() {System.out.println("删除用户信息");}}
2)JDK动态代理的类
/** JDK动态代理的类:实现Invocation Handler* */public class JdkProxy implements InvocationHandler {//将被增强的对象传递进来(目标类)private UserDao userDao;public JdkProxy(UserDao userDao) {this.userDao = userDao;}//产生UserDao代理的方法public UserDao createProxy() {/** 第一个参数:UserDao类的加载器* 第二个参数:要实现的接口* */UserDao userDaoProxy = (UserDao) Proxy.newProxyInstance(userDao.getClass().getClassLoader(),userDao.getClass().getInterfaces(), this);return userDaoProxy;}/* 方法功能增强* 第一个参数: 代理对象* 第二个参数: 真正执行的方法* 第三个参数: 是方法的参数**/@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {if ("save".equals(method.getName())) {//增强System.out.println("权限校验==========");return method.invoke(userDao, args);}return method.invoke(userDao, args);}}
3)测试方法
/** 用户方法增强的测试类* */public class UserDaoTest {public static void main(String[] args) {//创建一个UserDao的实现类对象UserDao userDao = new UserDaoImpl();//创建代理的对象UserDao proxy = new JdkProxy(userDao).createProxy();proxy.save();proxy.update();proxy.find();proxy.delete();}}
2.2 Cglib动态代理
1)针对类而言:引入第三代理的jar包
2)目标类
/** 客户信息的类* */public class CustomerService {public void save() {System.out.println("保存用户信息");}public void update() {System.out.println("更改用户信息");}public void find() {System.out.println("查询用户信息");}public void delete() {System.out.println("删除用户信息");}}
3)Cglib代理的类
- 九大镇国神器之一,中华第一神物——陈仓石鼓 中国之最历史文物
- 从万米高空坠落的空姐——奇迹生还,创吉尼斯纪录 高空跳水吉尼斯记录
- 来一场说走就走的旅行——巴东携美景赴汉推介“清凉秘境” 巴东世界之最
- 聊聊过去的事——我国古代十大经典名曲及他们背后的故事 中国十大古曲
- 高165米!雄安新区第一高楼——中国中化001大厦,最新进度 中国之最雄安
- 初一地理,难点突破——经纬网 初一地理世界之最
- 一颗围棋心——记96岁的日本职业棋手杉内寿子 黑白世界之最
- 世界上体型最大最猛的鳄鱼——湾鳄,鳄鱼界的扛把子 世界吉尼斯记录鳄鱼
- 常识积累——你不知道的中国“自然之最” 最长的河流中国之最
- 世界之最——最小的动物 世界之最之最小