`
文章列表
Ognl 中PropertyAccessor 用于从类实例中获取或设置属性值 Ognl中已有的PropertyAccessor :因为不同的类的获取属性值和赋值方式不同,如Map、List、javabean,因此有多个子类,第一个子类对应一种类型。   Struts 对PropertyAccessor  的扩展:    Struts 加载扩展的PropertyAccessor  :             Struts 中在OgnlValueStackFactory中调用OgnlRuntime.setPropertyAccessor(Class class,PropertyAc ...
 Container 是struts 中的 bean的容器,用于创建bean并将依赖关系注入。   Container的默认实现类是ContainerImpl类, ContainerImpl内部持有一堆InternalFactory工厂,负责创建各种类,那么就需要有 被创建类与工厂的对应关系,才能定位到工厂。 实现类的表示方式:类型+实现类的名称, ContainerImpl 内部执有 ”类型+实现类的名称“与工厂的对应关系,那么就可创建指定的类了。   类创建后,它的依赖对象如何注入?通实依赖类型+实现类名称可以定位到依赖类的工厂,依赖类的工厂可以创建依赖类的实例,通过反射就可 ...
Ognl的扩展点: http://java12345678.iteye.com/blog/2031790   OGNL TypeConverter接口 :      类型转换,setValue时将值转换为实际的类型,或getValue时将获取的对象转换为需要的类型 Struts对TypeConverter的扩展:   OgnlValueStack中生成的上下文中使用了XworkConverter 做为类型转换类: protected void setRoot(XWorkConverter xworkConverter, CompoundRootAccessor accesso ...
Ognl的扩展点: http://java12345678.iteye.com/blog/2031790   OGNL ClassResolver接口 :     用于由类名到类路径中找到Class文件,并加载生成Class对象,以支持静态属性或方法的调用 Struts对ClassResolver 的扩展:     Struts中ClassResolver的加载:   OgnlValueStack类(Struts对Ognl的封装类):   protected void setRoot(XWorkConverter xworkConverter, CompoundRoo ...
Ognl的扩展点: http://java12345678.iteye.com/blog/2031790   MemberAccess接口  定义了对于Memeber(Constructor,Method,Filed是否可以访问),Ognl默认实现DefaultMemberAccess对非公有Member不可以访问。  Struts2对DefaultMemberAccess进行了扩展:在DefaultMemberAccess的非公有Member不可以访问的基础上,添加哪些公有Member可以访问或不可被访问      一、参数决定哪些Memeber可以访问   1.静态方法 ...
Ognl的扩展点: http://java12345678.iteye.com/blog/2031790      类OgnlValueStack 是struts2对Ognl的封装,提供了表达式取值或赋值方法,并不像ognl那样需要在方法参数中传递context,root 对象,因为context 、root对象已封状在OgnlValueStack 内部   Struts 对Ognl的封装,提供了setValue、set、setParameter等方法通过表达式赋值,findValue,findString 等方法取值。 构建器调用setRoot方法构建OgnlValueS ...
  root 对象        CompoundRoot, CompoundRoot扩展了ArrayList,具有容纳对象及后进先出类似“栈”的能力。      public class CompoundRoot extends ArrayList { public CompoundRoot() { } public CompoundRoot(List list) { super(list); } public CompoundRoot cutStack(int index) { ...

Ognl的扩展

OGNL提供的扩展方式,见官网:http://commons.apache.org/proper/commons-ognl/developer-guide.html   一、PropertyAccessor:提供了对属性赋值和提取属性值的方法。                              因为不同的类的获取属性值和赋值方式不同,如Map、List、javabean,因此有多个子类,第一个子类对应一种类型。    PropertyAccessor 类何时加载的:    OgnlRunTime类中静态代码块,在类加载时调用: static { ...

OGNL的使用

 OGNL 可以通过表达式从java对象中获取值或向java对象赋值。 Ognl.java 源码:     参数说明:   expression :Strig对象,             表达式 指明对root或context中的哪个属性或方法操作 (set or get or call) Object root :任意一个java对象             从中取值或赋值,不以#开头的表达式,是对root取值或赋值  context :一个Map对象,           1.可以从中取值 以#开头的表达式是从context取值                   ...
一个工厂用于创建对象,如果对象在指定范围内存在(singleton,thread,request,session),则不创建新对象,而是使用之前创建的对象。 UML类图如下:  每个实现类中都有一样创建对象的过程,因此将生成对象方法抽成父类:    父类ObjectFactoryImpl实现了对象创建的过程,在创建对象之前(create方法中)首先调用抽像方法getObjectFromCache()来判断是否已存在该对象,如果已存在就直接返回,不存在就创建对象并调用putObjectToCache 方法存入缓存,已使下次使用时能直接获取。    从上图看出,每一个实现类都负责了二 ...

锁的使用

锁用于解决多线程对共享资源的同时访问,而引起的非线程安全问题:某一时该只有一条线程可以访问共享资源,达到了线程安全的目的,但同时也限制了并发处理的速度。   锁的分类: 同步锁: synchronized 是java 内置的语法 可重入锁:ReentrantLock  是一个java类 读写锁:ReentrantReadWriteLock 是一个java类     锁定的范围:  由于锁使线程互斥访问,未获得锁的线程会阻塞,限制了并发处理的速度,因此线程应该锁定尽量小的范围及尽快的释放锁。    比如一家企业,有10个厕所,每个厕所有5个坑,每个员工都要上厕所,厕所的同 ...

枚举--策略模式

    博客分类:
  • OOD
某个功能或算法有多种实现方式,可以使用策略模式:         枚举类也可以实现策略模式类似的功能:(前提:实现个数固定) 枚举类声明一个抽像的方法,由各个实例去实现。   枚举实例的选择:  1.直接引用Scope.实例名  2.由字符串生成 Scope.valueOf("实例名");     示例:(参考了Struts 2.3.26 的Scope源码) public enum ScopeFactory { SINGLETON{ public Object create(Class classz){ return null; ...
单例:某个类系统范围内只有一个实例 多例:某个类在系统范围内同时有多个实例 无状态类:类中没有状态信息,一般是无成员变量或成员变量的值是不变的。  有状态类:类中有状态信息,一般表现成员变量的值可变,在某一时该被调用而改变状态,之后再调用时获取其正确的状态。 有状态类的实例 ,一般是多例的,用于保存多个相同类型的不同状态值。因为只有一个实例,单线程重复调用情况下可能覆盖实例中之前的成员变量值、多线程下一次调用也可能覆盖实例中之前的成员变量值,造成状态丢失,就需要多个实例来保存不同的状态。 无状态类的实例,一般是单例的,因为没有状态,所以单线程下重复调用或多线程下调用对实例没有影响 ...

封 装

    博客分类:
  • OOD
每一个类都应该有自己的职责,职责应该是单一类型的,就是我只做这一类的事情,其它的事件不需要我来管,而”这一类事情“有紧密的相关性,也就是高内聚。       类中每个方法都应该功能单一、代码简洁,如果有多个地方使用的相同的代码块,应该将该代码块抽成独立的private的方法。     封状的意义在于降底耦合度,只对外提供能够完成职责的方法,而封闭内部实现细节和数据等。     类中除了职责方法外,一般还包含:    1.属性 对外应该是private ,如果外部确实需要访问,可以提供get/set方法      2.某些方法,是为了支撑职责的实现而存在,如果这些方法对外部没 ...

类的设计--接口

    博客分类:
  • OOD
需要一个类提供某些功能,这些功能可能有不同的实现方式,可以把它设计为接口。    1.首先明确接口职责范围,职责需要高内聚的,即相关性的职责,无关的职责不应该加进来。     2.按照分析好的职责范围定义接口   ...
Global site tag (gtag.js) - Google Analytics