第一章 认识SSM框架和Redis
 
1.1 Spring框架
Sring理念 
Ioc  控制反转  IOC是一个容器,在Spring中,它会认为一切Java资源都是JavaBean,容器的目标是管理Bean和它们之间的关系。
Aop 面向切面编程
 
 
第二章 Java设计模式
2.1 java 反射技术
Java反射技术 可以配置:类的全限定名、方法和参数,完成对象的初始化,甚至是反射某些方法。
在Java中反射是通过包java.lang.reflect.*实现的。
 
2.1.1通过反射构建对象
public class ReflectTmp{
    public ReflectTmp(){};
        public  ReflectTmp(Srting str){};
        public  void sayHello(Srting str){};
}
 
/* 通过反射获取对象*/
public ReflectTmp getInstance()
{
   try {
           object =(ReflectTmp)Class.forName("com.xxx.ReflectTmp").getConstructor(String.class).newInstance("123");
           } catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException
                      | NoSuchMethodException | SecurityException | ClassNotFoundException e) {
                 // TODO Auto-generated catch block
                 e.printStackTrace();
           }
    return object;
}
 
2.1.2 反射方法
      public static Object reflectMethod()
      {
           Object returnobj = null;
          ReflectTmpobj1 = newReflectTmp("456");
           
           try {
                 Method method =ReflectTmp.class.getMethod("sayHello", String.class);
                 returnobj = method.invoke(obj1, "hello World !");
           } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e) {
                 // TODO Auto-generated catch block
                 e.printStackTrace();
           }
           return returnobj;
      }
 
2.2 动态代理和责任链模式
动态代理的意义在于生成一个占位(又称为代理对象),来代理真实对象,从而控制真实对象的访问。
代理分为两个步骤:
  1. 代理对象与真实对象建立代理关系
  2. 实现代理对象的代理逻辑方法
 
2.2.1 JDK动态代理
JDK动态代理是由java.lang.reflect.*包提供的方式,它必须借助一个借接口才能产生代理对象,所以先定义接口。
其次,在JDK动态代理中,要实现代理逻辑类必须去实现java.lang.reflect.InvocationHandler接口,它定义了一个invoke方法,并提供接口数组用于下挂代理对象。
 
第一步 建立代理对象与真实对象的关系
Procx.newProxyInstance(target.getClass().getClassLoader(),target.getClass().getInterfaces(), this);
newProxyInstance包含三个参数
第一个:类加载器
第二个:把生成的代理对象挂在哪些接口下
第三个:定义实现方法逻辑的代理类。
 
第二步 实现代理的逻辑方法
public Object invoke(Object proxy, Method method, Object[]args) throws Throwable{}
invoke方法可以实现代理逻辑
三个参数依次为:
proxy 代理对象
method 当前调度的方法
args 调度方法的参数
 
2.2.2 CGLIB动态代理
CGFLIB动态代理优势在于不用定义接口,只要一个非抽象类就能实现动态代理。
第一步 生成CGLIB代理对象
使用CGLIB的加强者Enhancer,通过设置超类的方式(setSuperclass),然后通过setCallback方法设置哪个类为它的代理类。被设为代理类的对象必须实现接口MethodInterceptor的方法intercept。
 
第二步实现代理逻辑
public Object intercept(Object proxy, Method method, Object[]args, MethodProxy methodProxy)throws Throwable{
/* CGLIB反射调用真实对象方法*/
Object obj = methodProxy.invokeSuper(proxy, args);
return obj;
}
 
 
2.2.3 拦截器
 
定义拦截器接口
public interface Interceptor{
public boolean before(Object proxy, Object target, Method method, Object [] args);
public boolean around(Object proxy, Object target, Method method, Object [] args);
public boolean after(Object proxy, Object target, Method method, Object [] args);
}
3个方法的参数依次为:proxy代理对象,target真实对象,method方法,args运行方法的参数。
 
before方法返回boolean值,它在真实对象前调度。当返回true,则反射真实对象的方法,返回false,则调用around方法。
 
在反射真实对象方法或者around方法执行后,执行after方法。
 
 
拦截器对象在代理对象创建时同时创建,拦截器对象的方法 在代理对象的逻辑处理方法中调用。
 
2.2.4 责任链模式
当一个对象在一条链上被多个拦截器处理时,我们把这样的设计模式成为责任链模式,它用于一个对象在多个角色中传递的场景。可以使用层层代理的的方式来实现。
public interface HelloWorld{
    public void sayHello(String str);
}
public interface HelloWorldImpl implements HelloWorld{
    public void sayHello(String str)
    {
        /* xxx*/
    }
}
 
public static void main(String []args)
{
    HelloWorld proxy1 = (HelloWorld)InterceptorJDKProxy(new HelloWorldImpl(),“com.xxx.Interceptor1”);
       HelloWorld proxy2 = (HelloWorld)InterceptorJDKProxy(proxy1,“com.xxx.Interceptor2");
       HelloWorld proxy3 = (HelloWorld)InterceptorJDKProxy(proxy2,“com.xxx.Interceptor3");
       proxy3.sayHello("hello");
}
 
 
结果:
【拦截器3的】的before方法执行
【拦截器2的】的before方法执行
【拦截器1的】的before方法执行
  hello
【拦截器1的】的after方法执行
【拦截器2的】的after方法执行
【拦截器3的】的after方法执行
before方法按照从最后一个拦截器到第一个拦截器的加载顺序执行,after按照从第一个拦截器到最后一个拦截器的加载顺序执行。
 
2.3 观察者模式
观察者模式又称为发布订阅模式,是对象的行为模式。观察者模式定义了一种一对多的依赖关系,让多个观察者同时监视着被观察者,当观察者发生变化的时候,通知所有观察者,并让其自动更新自己。
第一步 定义被观察者
首先继承java.util.Observable类
 
观察者的方法:
/* 添加观察者*/
addObserver(Observer observer);
/* 告知观察者 被观察者发生了改变,如果没有,则无法触发其行为*/
setChanged();
/* 告知观察者,让他们发生相应的动作,并将参数传递给观察者*/
notifyObservers(object obj);
第二步 定义观察者
观察者要实现 java.util.Observer接口的update()方法
 
 
 
2.4 工厂模式和抽象工厂模式
 
2.5 创建者模式
创建者模式属于对象的创建模式。可以将一个产品的属性与产品的生成过程分开,从而使一个建造过程中生成具有不同属性的产品对象。
 
 
 
 
 
 
 
 
 

SSM-1第一章 认识SSM框架和Redis的更多相关文章

  1. 第一章 自定义MVC框架

    第一章  自定义MVC框架1.1 MVC模式设计    组成:Model:模型,用于数据和业务的处理          View :视图,用于数据的显示          Controller:控制器 ...

  2. 第一章 : javaScript框架分类及主要功能

      从内部架构和理念划分,目前JavaScript框架可以划分为5类. 第一种是以命名空间为导向的类库或框架,如果创建一个数组用new Array(),生成一个对象用new Object(),完全的j ...

  3. 第一章 Spring整体框架和环境搭建

    1.Spring 的整体架构 Spring框架主要由7大模块组成,它们提供了企业级开发需要的所有功能,而且每个模块都可以单独使用,也可以和其他模块组合使用,灵活且方便的部署可以使开发的程序更加简洁灵活 ...

  4. 第一章 深入.NET框架

    一. .NET的过人之处 1..NET框架提高了软件的可重复行 ,可扩展性,可维护行和灵活性. 2.对web应用的强大支撑. 3.对Web Service(Web服务)的支持. 4.实现SOA,支持云 ...

  5. 左手Mongodb右手Redis 第一章,进入Mongodb和Redis的世界

    ---恢复内容开始--- 1,为什么要使用非关系型数据库,关系型数据库咋滴,不能用嘛? 存在即合理,非关系型数据库的出现,那说明关系型数据库不适用了. 非关系型数据库(NOSQL)-->Not ...

  6. Nova PhoneGap框架 第一章 前言

    Nova PhoneGap Framework诞生于2012年11月,从第一个版本的发布到现在,这个框架经历了多个项目的考验.一直以来我们也持续更新这个框架,使其不断完善.到现在,这个框架已比较稳定了 ...

  7. 《Entity Framework 6 Recipes》翻译系列 (1) -----第一章 开始使用实体框架之历史和框架简述

    微软的Entity Framework 受到越来越多人的关注和使用,Entity Framework7.0版本也即将发行.虽然已经开源,可遗憾的是,国内没有关于它的书籍,更不用说好书了,可能是因为EF ...

  8. 《Entity Framework 6 Recipes》翻译系列(2) -----第一章 开始使用实体框架之使用介绍

    Visual Studio 我们在Windows平台上开发应用程序使用的工具主要是Visual Studio.这个集成开发环境已经演化了很多年,从一个简单的C++编辑器和编译器到一个高度集成.支持软件 ...

  9. jQuery系列 第一章 jQuery框架简单介绍

    第一章 jQuery框架简单介绍 1.1 jQuery简介 jQuery是一款优秀的javaScript库(框架),该框架凭借简洁的语法和跨平台的兼容性,极大的简化了开发人员对HTML文档,DOM,事 ...

随机推荐

  1. Java中的浮点型(Double&Float)计算问题

    在刚刚做完的一个项目中,遇到了double型计算不精确的问题.到网上查找后,问题得到解决.经验共享,在这里总结一下. Java中的浮点数类型float和double不能够进行精确运算.这个问题有时候非 ...

  2. BZOJ2173 整数的lqp拆分(生成函数)

    首先有序整数拆分有个显然的递推式是g(n)=Σg(i) (i=0~n-1),即枚举加入最后一个数之前和是多少.(虽然不用递推式也能显然地知道答案是2n-1). 类似地,lqp拆分有递推式f(n)=Σf ...

  3. UVALive5874 - Social Holidaying-二分图匹配/匈牙利算法

    有n个家庭,m个房间,一个房间只能两个家庭住.求最大匹配. 比较标准的二分图问题.先初始化把可能的家庭建边,然后跑一边匈牙利算法. 最后的答案是最大匹配数/2,因为建图时有重复. #include & ...

  4. pip download 只下载不安装命令的使用方法

    比如下载 django 1.8.11版本和simplejson 3.14.0版本的包 那么就将所需的包写入  requirement.txt 那么我的requirement.txt内容就是: djan ...

  5. Wordpress 之删除 RSS 功能 的"文章RSS"、"评论RSS"、"WordPress.org"

    一. 去除底部“自豪地采用 WordPress”版权信息: 1.打开主题文件夹:wp-content/themes/twentyeleven/footer.php; 2.找到 这段代码 删除即可: & ...

  6. Python3网络爬虫(3):使用User Agent和代理IP隐藏身份

    Python版本: python3 IDE: pycharm2017.3.3 一.为何要设置User Agent 有一些网站不喜欢被爬虫访问,所以会检测对象,如果是爬虫程序,他就会不让你访问,通过设置 ...

  7. 【BZOJ3193】[JLOI2013]地形生成(动态规划)

    [BZOJ3193][JLOI2013]地形生成(动态规划) 题面 BZOJ 洛谷 题解 第一问不难,首先按照山的高度从大往小排序,这样子只需要抉择前面有几座山就好了.然而有高度相同的山.其实也不麻烦 ...

  8. Shell基础知识(一)

    教程链接:shell从入门到入门 这个网站还有其他教程,可以尝试下看看.   普及类文章:bash/cmd/dos之间有什么区别与联系 >> bash是Linux下的一个shell应用程序 ...

  9. 洛谷 P2158 [SDOI2008]仪仗队 解题报告

    P2158 [SDOI2008]仪仗队 题目描述 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线 ...

  10. A1083. List Grades

    Given a list of N student records with name, ID and grade. You are supposed to sort the records with ...