- 浏览: 32112 次
- 性别:
- 来自: 鲨堡
最新评论
-
H_eaven:
1.相等的对象要返回相等的哈希码,
2.不相等的对象要返回不 ...
equals和hashCode -
dayang2001911:
讲讲hashcode和equals有什么联系?
equals和hashCode
文章列表
本文的目标:
从实现的角度来认识SpringAOP框架。
观察的角度:
从外部接口,内部实现,组成部分,执行过程四个方面来认识SpringAOP框架。
本文的风格:
首先列出AOP的基本概念;
其次介绍框架所涉及到的核心组件列表,组件之间的结构关系图;
然后细化结构图中的部分;
接下来是一个简单的sample;
最后是后记部分。
注:
1.本文的源代码基于Spring2.x。Spring的源代码也处于演变中,但对基础代码的影响并不大。
2.本文是对Spring IoC容器实现的结构分析的姊妹帖。
正文:
Spring AOP框架涉及的基本概念介绍:
关注点(concern):一个关注点可 ...
本文的目标:
从实现的角度来认识SpringIoC容器。
观察的角度:
从外部接口,内部实现,组成部分,执行过程四个方面来认识SpringIoC容器。
本文的风格:
首先列出SpringIoC的外部接口及内部实现所涉及到的组件列表;
其次介绍组件之间的相互关系以对整个执行过程有所把握;
然后针对每一个组件的简单介绍,包括组件的类结构图,核心功能描述,重要接口的重要方法描述;
接下来看SpringIoC容器实现对面向对象基本设计原则的遵守;
最后是后记部分。
术语约定:
组件:本文中的组件是指在功能概念上具有相对独立性的功能单元,物理结构上的特征一般由一组接口、一组抽象类、一组具体实现类、异 ...
写在前面:类的设计图见附件
本文不详细介绍AOP相关概念,比如Concrn(关注点),Aspect(方面),Adivce(通知),Pointcut(切入点),Joinpoint(连接点),AOP实现策略, 不同的AOP实现.但熟悉这些概念是基本的前提条件,相关概念可以查找Google,参考资料查到,Development.Without.Ejb中的第八章<<基于AOP概念的声明性中间件>>值得一读,其中讲到了Spring AOP框架的实现特点:AOP实现策略可以是动态代码,动态字节码. 运行时AopProxy对象的真实存在等.
我们主要关注Spring AOP框架核 ...
对象实例:一个抽象类型是不能够直接被实例化,这是面向对象所要求的,因为一个抽象的概念是无法被具体化的,这个也容易理解,比如说要买一些水果,那么水果是一个抽象概念,等到你买回来之后,它总是表现为苹果,桃等具体的事物,
对于很在意买回来的水果不同种类差别的小朋友来说,你给他说我买回来一些水果,他马上会问都有那些种类的水果,以看有没有自己喜欢的,但是对于不关心这些类型之间差别的人比如小朋友的奶奶,你只需告诉她买回来了一些水果,这时
完全没必要给她细说都有那些。 这里细微的地方是:有时描述一个苹果那就需要说苹果类别,有时描述一个苹果可以说是一种水果。
这里的问题是概念上的实现.
在内存中对象是以什么样的 ...
重构心得:
重构也是对待问题的处理方式,设计更多的是避免问题的发生,而重构是在问题已经发生所进行的解决办法,
好的设计需要对问题的发生有遇见性,前提是需要有丰富的经验,经验的积累可以从重构开始,也许一些重构手法做过几次之后,
就能总结出来可能在什么样的情况下会出现这些问题而需要重构解决,如果对发生问题的可能原因了解的相当透彻后,那么我们就可以避免
这些问题的出现。
重构与设计所针对的目标抽象程度不同也有不同的作法。
针对一个变量,一个方法,一个类,一组合作的类,一个包,一组包,一个子功能,一个子系统,整个系统的架构。
一个小例子:比如引入参数对象,合并参数列表。遇到这样的代码进行重构,再次设计的 ...
观察者模式的实例描述.
角色的对应关系.
观察者模式的角色:
.设计原则的角度,
.单一职责,将数据生成和数据显示的两个职责分离.
.开闭原则, 增加新的观察者类型,只需要实现观察者接口. 修改一个接口实现,也不会造成太大的影响.
.里氏代换原则,实现观察者接口的类有义务遵守接口中的方法定义,不要重新定义,只要做到这些,那么任一实现之间都可以相互替换.
.依赖倒转原则,被观察者对象不直接依赖一个具体的观察者对象,而是依赖一个接口,实现的变化被隔离.(依赖倒转,依赖抽象)
此处接口的定义是由被观察者对象定义的,而观察者实现这个接口定义.
...
Inversion of Control
--Dependency Lookup
--Dependency Injection
--Setter Injection
--Constructor Injection
控制反转的一般表示形式.
依赖注入. 由外部框架管理对象之间的依赖关系.查找资源的逻辑从应用代码中抽取出来,交由框架容器负责.
依赖查找. 一般由工厂对象,如对象注册表.通过键名查找服务对象. JNDI,手动使用BeanFactory, 自己管理的工厂对象.
接口回调. 上面两种的服务一般都是业务对象之间的依赖关系,而 ...
谁来定义接口.
接口就是规则,职责在于描述外部表现,而非内部实现. 那么接口应该由谁来定义?
锅炉厂生产锅炉, 客户在使用过程当中,由于没有全身心的关注锅炉,导致了一些事故的发生. 客户提出了这个问题,要求锅炉上加上报警装置, 锅炉厂本身不生产
报警器的, A:锅炉厂就在锅炉上留下安装报警器的接口,然后找来生产报警器的工厂,让报警器厂按照留好的接口生产出合适的报警来.
这里锅炉厂相当于客户方,报警器厂相当于服务提供方, 接口的定义是由客户方制定,然后交由服务方实现.
B:锅炉厂到市场上去寻找比较满意的报警器,买回来后,按照报警器的说明规格(想要使用此报警器,必须具备什么什么),在锅炉上安装上报 ...
org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.NEVER/MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition.
执行这个方法得时候 出错了getHibernateTemplate().save(agentLog);
错误 ...
a>:异常只应该被用于不正常的条件,它们永远不应该被用于正常的控制流.
b>:一个设计良好的API不应该强迫它的客户为了正常的控制流而使用异常。如Iterator<T>, next()状态方法,hasNext()状态测试方法.
pubilc interface Iterator<T ...
在面向对象中讲,类是对象群体的抽象,对象是类的实例, 类做为对象的模板可以生成无数多个实体,每一个实体都是类的一种特例.
这是普通的情况,也是就一个类对应多个对象.
有普通就有特殊,
一个类没有实例对象,如工具类. ...
- 2009-11-15 04:29
- 浏览 965
- 评论(0)
序列化:
将对象编码成一个字节流,以及从字节流编码中重新构造对象.
将一个对象编码成一个字节流称为序列化,相反的处理过程称为反序列化.
54:=======
实现序列化的代价:
1.一旦一个类发布,则改变这个类的灵活性将大 ...
- 2009-10-19 14:08
- 浏览 1136
- 评论(0)
例子--安全检查.
假设希望检查用户是否有权限执行某个方法,如果没有权限就抛出一个异常,也就是说对要执行安全检查的代码进行方法拦截,以加
入检查代码.如果编程解决这个问题,OO无法给我们任何有效的帮助.得到的是这样的代码.
public class MyBusinessObject implements BusinessObject {
public void businessMethod1() throws UnauthorizedException {
doSecurityCheck();
// Do the work of method1
}
...
- 2009-10-15 21:21
- 浏览 1708
- 评论(0)
1.使用new关键字生成和不使用new关键字生成对象.
对象生成的方式.
1:new 关键字生成.
Person person = new Man();
这是生成对象最直接的方式.
2:反射方式生成.
使用反射方式生成对象,首先要获得一个Class对象.
获得一个Class对象的方式:
...
- 2009-10-14 13:12
- 浏览 1087
- 评论(0)
MVC 把用户界面交互拆分到不同的三种角色中.
Model View Controller
之所以这样做的原因:1,你可能要使用数个不同的用户界面来表现相同的业务逻辑,如果同时承担两种责任,用户界面会变得过分复杂
2,与 ...
- 2009-10-14 11:32
- 浏览 1516
- 评论(0)