• SSM-1第一章 认识SSM框架和Redis


    第一章 认识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 创建者模式
    创建者模式属于对象的创建模式。可以将一个产品的属性与产品的生成过程分开,从而使一个建造过程中生成具有不同属性的产品对象。
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    事以密成,能者低调
    时间过得真快,一晃三年过去了
    读书随记2011111
    Makefile
    ubuntu 7 下 tftp 的配置
    uboot移植到nano2410
    ubuntu 7.04 Feisty Fawn 安装手记之五:安装常用软件
    移植linux2.6.18到arm9
    移植busybox 1.4.2
    UBoot中SMDK2410的NAND Flash驱动。
  • 原文地址:https://www.cnblogs.com/xiaodeyao/p/9715215.html
Copyright © 2020-2023  润新知