动态代理
1)包,如果所代理的接口都是public,那么它将被定义在顶层包(即包路径为空)
如果所代理的接口中有非public的接口,那么它将被定义在该接口所在的包。
2)该类有final和public修饰符
3)类名格式是"$ProxyN"
4) 类图 是extends java.lang.reflect.Proxy implements cls.getInterfaces();
5)hashCode,equals和toString也会被分派到invoke方法中执行
6)当代理类的一组接口有重复声明的方法,被调用时,代理类总是从排在前面的接口中获取方法对象。并分派给调用处理器。而无论代理类实例是否正在以该接口(或继承于该接口的子接口)的形式被外部引用
7)需被代理的所有非public接口必须在同一个包中,所有接口必须对类装载器可见。
数目不能超过65535
8)如果在invoke方法中的确产生了接口方法声明中不支持的异常,会抛出UndeclaredThrowableException
是一个RuntimeException 类型,-->然后getCause
模板方法模式
1)一次性实现一个算法的不变部分,并将可变部分留给子类来实现
2)各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复
3)控制子类扩展。
模板方法只在特定点调用操作,这样就只允许在这些点进行扩展或将模板方法设为final就可以了
4)是由父类的模板方法来控制子类中的具体实现,这样在实现子类的时候,不需要对业务流程有太多的了解
工厂模式
工厂方法模式: Factory Method,Virtual Contructor,Polymorphic Factory
是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中。工厂方法模式可以允许很多具体工厂类从抽象工厂类中将创建行为继承下来。
抽象工厂模式: 可以向客户端提供一个接口,使得客户端在不必指定产品的具体类型情况下,创建多个产品族中的产品对象
抽象工厂模式是"抽象产品角色"的工厂
工厂方法模式针对的是一个产品等级结构。
抽象工厂模式针对的是多个产品等级结构
依赖倒转原则
抽象不应当依赖于细节
细节应当依赖于抽象
要针对接口编程,不要针对实现编程
变量的静态类型和真实类型
Static Type,Apparent type
Actual Type
抽象类是一个类的部分实现
IOC inverse of control
DI dependence injection
orm object relational mapping
由容器控制对象之间的依赖关系,而不是具体代码,这就是所谓的控制反转
所谓依赖注入,即组件之间的依赖关系由容器在运行期决定,就是由容器动态的将某种依赖关系注入到组件之中。
依赖注入的类型:
接口注入
setter注入
构造子注入
cglib :net.sf.cglib.proxy