AOP(Aspect Oriented Programmimg) 面向切面编程
核心:spring中的代理设计模式
1.静态代理设计模式
service
核心:
核心功能:一定要有的功能,没有的话业务将无法进行
书写业务逻辑代码
额外功能:核心功能基础之上添加的功能(可有可无)
调用DAO
额外:
控制事务
在service层中应不应该写额外功能?
业务调用者:
service中应该有额外功能,没有额外功能,业务将面临风险
代码设计者:
service中不应该有额外功能,违反了Java中的各司其职性,额外功能经常被修改,不免影响到核心功能
矛盾:静态代理模式进行解决

生活案例:租房

房东类

package com.hp.proxy;/***  房东 出租角色*/
public class Landlord implements Rent{@Overridepublic void rent() {System.out.println("我是房东 我房屋租出");}}

代理类 中介

package com.hp.proxy;
/***  代理角色 房屋中介*/
public class HousingAgency implements Rent{private Rent rent;public HousingAgency() {}public HousingAgency(Rent rent) {this.rent = rent;}@Overridepublic void rent() {// 看房look();// 合同contract();// 收费moneys();// 转交房租give();// 成功租房rent.rent();}/*** 看房* @return boolean*/private boolean look(){System.out.println("中介带房客看房,房客觉得可以");return true;}/*** 签合同* @return boolean*/private boolean contract(){System.out.println("签合同,如果没有霸王条款则正常签订");return true;}/*** 交钱* @return boolean*/private boolean moneys(){System.out.println("签订完合同交房租");return true;}/*** 中介将房租转给房东* @return 返回一张收据*/private String give(){System.out.println("转交房租给房东");return "房东已收到钱";}
}

租房

package com.hp.proxy;public interface Rent {// 出租房屋方法public void rent();
}

package com.hp.proxy;

/*** 房客 承租角色*/
public class Tenant {public static void main(String[] args) {// 创建真实的房东对象Landlord landlord = new Landlord();// 创建代理对象并代理房东出租HousingAgency housingAgency = new HousingAgency(landlord);// 将房屋出租housingAgency.rent();}
}
静态代理中的概念:原始类:只负责核心功能的类原始方法:原始类中的方法代理类:给原始类添加额外功能的类
静态代理的本质:代理类只负责额外功能,原始类只负责核心功能,通过代理类为原始类增加额外功能
静态代理的缺点①类过载有一个原始类,就需要写一个代理类,造成类过载②额外功能代码冗余,不利于项目的维护

Java中的静态代理设计模式相关推荐

  1. 一篇文章让你搞懂Java中的静态代理和动态代理

    文章目录 什么是代理模式 代理的优缺点 静态代理 动态代理 InvocationHandler 接口 和 invoke 方法介绍 静态代理和动态代理的区别 什么是代理模式 代理模式是常用的java设计 ...

  2. java中的静态、动态代理模式以及Spring中的CgLib动态代理解读(面试必问)

    java中的静态.动态代理模式以及Spring中的CgLib动态代理解读(面试必问) 静态代理 动态代理 CgLib动态代理     基础知: 反射知识 代理(Proxy)是一种设计模式,提供了对目标 ...

  3. 【Spring AOP】静态代理设计模式、Spring 动态代理开发详解、切入点详解(切入点表达式、切入点函数)

    AOP 编程 静态代理设计模式 1. 为什么需要代理设计模式 2. 代理设计模式 名词解释 代理开发的核心要素 静态代理编码 静态代理存在的问题 Spring 动态代理开发 搭建开发环境 Spring ...

  4. java设计模式中不属于创建型模式_23种设计模式第二篇:java工厂模式定义:工厂模式是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式...

    23种设计模式第二篇:java工厂模式 定义: 工厂模式是 Java 中最常用的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 工厂模式主要是为创建对象提供过渡接口, ...

  5. 吃透Java中的动态代理

    动态代理在Java中是很重要的一部分,在很多框架中都会用到,如Spring中的AOP.Hadoop中的RPC等.为此在这把我对Java中的动态代理的理解分享给大家,同时写了一个模拟AOP编程的实例.( ...

  6. 笔记:Java中的单例设计模式

    之前接触过单例模式,当初不明白这样的设计用意,今天特地研究了下java中的单例设计模式的用处及用法. 单例模式:单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例类的特殊类.一个类 ...

  7. Java多线程之静态代理

    1 package org.study2.javabase.ThreadsDemo.staticproxy; 2 3 /** 4 * @Date:2018-09-18 静态代理 设计模式 5 * 1. ...

  8. Java中如何实现代理机制(JDK、CGLIB)

    代理分为两种: 1.静态代理 2.动态代理  动态代理又分为两种:jdk 实现  :Cglib 实现 3.Java中如何实现代理机制(JDK.CGLIB) JDK动态代理:代理类和目标类实现了共同的接 ...

  9. 非静态方法可以访问Java中的静态变量/方法吗?

    "非静态方法可以访问静态变量或调用静态方法"是Java中有关静态修饰符的常见问题之一,答案是, 是的 ,非静态方法可以访问静态变量或调用静态方法. Java中的方法. 这没有问题, ...

最新文章

  1. 人工智能助力北京冬奥会
  2. 《数学之美》第26章 维特比和他的维特比算法
  3. python能表示多大整数_Python无法表示99999999999999999999这样大的整数。
  4. html5前端裁剪图片,FocusPoint.js 实现图片的响应式裁剪
  5. Guava 是个风火轮之基础工具(4)
  6. Numbers on the Chessboard(CF-1027B)
  7. 回顾Spirng ioc 控制反转
  8. 拿到串口的数据如何解析_大数据解析如何租到“物美价廉”的好房?
  9. 第一:Java+MyBatis(快速入门)
  10. delphi dbgrid 焦点 行号_徐睿知真人版娜美?!2020釜日电影奖铅笔腿、超凶双峰,惊人身材抢下所有焦点...
  11. cad字体安装_拿了CAD字体不知道怎么装?看过来
  12. dev chart 绘制图形
  13. 淘宝用户分析(步骤详细,数据分析项目)
  14. 小猿圈分享利用python网络爬虫获取网易云歌词
  15. 微信小程序文本、图片内容违规信息校验
  16. 深度学习目标检测模型测试评价指标的选取及介绍
  17. 计算机的硬盘就是内存不足,电脑内存不够用加内存条还是固态硬盘_电脑内存不够解决方法 - 系统家园...
  18. Flutter 功能最全的JsonToDart工具(桌面Web海陆空支持)
  19. CSS学习记录9/3D的正方体的两种编写方式/3D长方体的编写方式/3D动画/3D播放器
  20. 访问学者英语口语顺利通关秘诀

热门文章

  1. android博学谷我的代码,Android项目实战系列—基于博学谷(四)我的模块(下)...
  2. echart 世界地图、中国地图
  3. PDF、OFD,普通、专用电子发票批量解析V1.2
  4. 关于配置Associated Domains Capability遇到的问题
  5. 如何使用DxO PureRAW 获得更好的RAW文件?
  6. gdb openocd jlink arm-a9调试
  7. cad转换刻绘图 文泰去除节点方法 cad变成圆滑文泰刻绘图 cad转换为刻绘图 无锯齿转换cad至刻绘图
  8. mac安装旺旺启动台找不到_第一次用 Mac?推荐你先了解这些…
  9. 2018年全国各省市区编号大全(2)
  10. hdu4343倍增思想