SSM前言——相关设计模式
1.使用代理对象,是为了在不修改目标对象的基础上,增强主业务逻辑。客户类真正的想要访问的对象是目标对象,但客户类真正可以访问的对象是代理对象。
2.静态代理是指,代理类在程序运行前就已经定义好,其与目标类的关系在程序运行前就已经确立
3.SomeServiceProxy和SomeServiceImpl都实现ISomeService接口,并且SomeServiceProxy依赖于实现了ISomeService接口的目标类
4.动态代理
JDK的Proxy:
目标类必须要实现接口
final ISomeService target = new SomeServiceImpl();
ISomeService proxy = (ISomeService) Proxy.newProxyInstance(target
.getClass().getClassLoader(), // 目标类的类加载器
target.getClass().getInterfaces(), // 目标类所实现的所有接口
new InvocationHandler() { // 匿名内部类
// proxy:代理对象
// method:目标方法
// args:目标方法的参数列表
@Override
public Object invoke(Object proxy, Method method,
Object[] args) throws Throwable {
// TODO Auto-generated method stub
Object result = method.invoke(target, args);
if(result!=null)
result = ((String) result).toUpperCase();
return result;
}
});
String result = proxy.doFirst();
CGLIB动态代理:
通过继承实现功能增强,要求目标类能被继承
采用方法回调设计模式:就是类A调用类B中的某个方法b,然后类B又再某个时候反过来调用类A中的某个方法a,对于A来说,这个a方法便叫做回调方法
package com.travelsky.cglib; import java.lang.reflect.Method; import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy; public class MyCglibFactory implements MethodInterceptor{
private SomeService target; public MyCglibFactory() {
super();
// TODO Auto-generated constructor stub
target=new SomeService();
} public SomeService myCglibCreator(){
//创建增强器对象
Enhancer enhancer = new Enhancer();
//指定目标类,即父类
enhancer.setSuperclass(SomeService.class);
//设置回调接口对象
enhancer.setCallback(this);
return (SomeService) enhancer.create();
} //回调方法
@Override
public Object intercept(Object obj, Method method, Object[] args,
MethodProxy proxy) throws Throwable {
// TODO Auto-generated method stub
Object result = method.invoke(target, args);
if(result!=null){
result = ((String)result).toUpperCase();
}
return result;
}
}
5.java命令启动java虚拟机:
1)启动虚拟机:D:\SoftwareInstalled\jdk1.7\jre\bin\server\jvm.dll
2)启动类加载器:Bootstrap ClassLoader:D:\SoftwareInstalled\jdk1.7\jre\lib\rt.jar
3)扩展类加载器:extension ClassLoader:D:\SoftwareInstalled\jdk1.7\jre\lib\ext\*.jar
4)应用程序类加载器:Application ClassLoader:负责加载用户类路径(ClassPath)上所指定的类库。
6.适配器模式
7.模板方法设计模式
在模板方法设计模式中,存在一个父类。其中包含两类方法:模板方法与步骤方法。
模板方法,即实现某种算法的方法步骤和框架,都是通过调用步骤方法完成的。
步骤方法,即完成模板方法的每个阶段性的方法。每个步骤方法完成某一特定的、完成总算法的一部分功能。步骤方法有三种类型:抽象方法、最终方法、与钩子方法。
抽象方法是要求子类必须实现的方法,是完成模板方法的算法步骤中必须由子类完成的个性化定义。
最终方法是子类不能重写的方法,是若要完成模板方法的算法步骤,对于所有子类执行都一样的步骤。(用final修饰)
钩子方法是父类给出了默认实现,但子类也可以重写的方法。
SSM前言——相关设计模式的更多相关文章
- 浅谈JavaScript原型对象与相关设计模式
引言 本文先从介绍JavaScript中基本的几种设计模式开始,最后引出原型对象,然后对原型对象有一个较全面的介绍. 1.创建对象的几种设计模式 A.工厂模式 我们知道在JavaScript中创建对象 ...
- (六:NIO系列) 相关设计模式
出处: 反应器模式 vs 观察者模式 反应器模式 vs 生产者消费者模式 反应器模式 vs 观察者模式 反应器模式 是一种为处理服务请求并发提交到一个或者多个服务处理程序的事件设计模式.当请求抵达 ...
- Java Web Without SSM(前言)
是的,Spring,Mybaties确实给我们带来了方便的轻量级JavaWeb开发,但是,对于大部分中小系统来说,分层,框架,规范,已经成为一种累赘.实际的程序开发过程中,大部分时间都花在了" ...
- Java SSM 框架相关基础面试题
一.Spring 面试题 1. Spring 在 SSM 中起什么作用? Spring 是轻量级框架,作用是作为 Bean 工厂,用来管理 Bean 的声明周期和框架集成. Spring 的两大核心: ...
- ssm搭建相关的问题
在搭建ssm框架时候踩得坑:1.对于拦截器url-parttern的设置:第一次设置的是/** 本以为这个是表示拦截所有,没想到这是错误的写法,正确的写法是/ 启动项目不会报错,但是会出现404 ...
- SSM整合相关试题
1.下列关于Spring自动装配的说法中,错误的是() A 在Spring配置文件中,可以通过<bean>元素的autowire属性指定自动装配方式 B autowire属性值可以设置为n ...
- 转-PHP 设计模式 之策略模式 应用场景 Strategy Pattern
一.前言 关于设计模式的文章,园子里实在是太多太多,而且讲解的也非常精彩,那为什么我还要在这里记录下这篇文章?本文以实际项目应用“自己动手写工具--XSmartNote”为切入点,来讲述策略模式的应用 ...
- C基础 常用设计模式粗解
引言 面向对象, 设计模式是现代软件开发基石. C的面向过程已经很简洁, 但不代表C就没有面向对象.(libuv框架中C面向对象用的很多) 因为思想是互通的.全当熟悉一下那些常用的设计模式.先假定有一 ...
- [Unity 设计模式]IOC依赖倒置
1.前言 最近在看<游戏开发与设计模式>一书,看到控制反转设计模式,作者说:上层模块不应该依赖于下层模块,上层模块和下层模块都应该依赖于接口,这样能减少耦合.然后附带举了个例子,我觉得特别 ...
随机推荐
- mysql 热备份
xtrabackup mysql 的备份和恢复 1.准备 安装依赖 yum install perl-DBD-MySQL perl-Time-HiRes libaio libaio-devel -y ...
- [C++ Primer Plus] 第7章、函数(二)课后习题
一.复习题 6.为什么不对基本数据类型的函数参数使用const? 8.编写一个函数,将字符串中所有c1替换成c2,并返回替换次数. #include<iostream> using nam ...
- 整型 布尔值 字符串 for循环
1.整型 2.布尔值 3.字符串 4.for循环 1.整型:.python中有长整型, Python3中只有整型 2.布尔值: bool:Ture 真 False 假 数字和布尔值可进行转 ...
- JAVA中字符串比较equals()和equalsIgnoreCase()的区别
1.使用equals( )方法比较两个字符串是否相等(区分大小写) 2.使用equalsIgnoreCase( )方法比较两个字符串是否相等(不区分大小写) boolean equalsIgnoreC ...
- 使用python内置库matplotlib,实现折线图的绘制
环境准备: 需要安装matplotlib,安装方式: pip install matplotlib 直接贴代码喽: #引入模块 from matplotlib import pyplot,font_m ...
- Spring boot actuator端点启用和暴露
1.启用端点 默认情况下,除了shutdown端点是关闭的,其它的都是启用的.配置一个端点的启用,使用management.endpoint..enabled属性,下面的例子是启用shutdown端点 ...
- three.js 第一篇:准备工作
demo展示:https://www.hanjiafushi.com/three/index.html 1:复习向量知识 2:学习矩阵知识 3:推荐先看webGL入门指南,对一些基础性的概念有所了解 ...
- 普元eos、soa、esb
http://www.primeton.com/support/video.php http://www.primeton.com/products/bps/overview.php http://w ...
- Sumo生成数据
1.生成input_net.net.xml文件 参数解释:http://www.sumo.dlr.de/userdoc/NETGENERATE.html#Grid_Network 1).生成grid ...
- 『TensorFlow』网络操作API_中_损失函数及分类器
一.误差值 度量两个张量或者一个张量和零之间的损失误差,这个可用于在一个回归任务或者用于正则的目的(权重衰减). l2_loss tf.nn.l2_loss(t, name=None) 解释:这个函数 ...