`

spring参考文档学习笔记

阅读更多

spring参考文档学习笔记     

 

     用spring也用了很长一段时间了,都没有系统的看过spring的文档及源码。对于一个已经成为默认企业标准的框架,他的优秀不言而喻,其中用到得一些设计模式与技巧也是值得学习的。于是乎决定花点时间来好好系统的研究下。

 

一、依赖注入
1、bean属性“idref”与“ref”的区别
idref有两个作用,1.方便xml检查,2.它和<value>差不多,只一个字符串。
ref:是spring提供的用于引用类的元素
<idref>是xml以定义的属性,所以在编写beanDefinition.xml的时候就会检查是否存在<idref>的local属性所指定的元素是否已经存在于beanDefinition.xml中,如果不在.xml中,不但spring不能通过,就连检查格式的xml编辑器也提示错误,但bean就不同了,即使bean属性值的内容不在xml中,spring也不会报错,因此只有<idref local>的赋值才是严格检验的<value>,<idref bean>与<value>无意总之,别看idref的名字象是引用,其实际作用就是一个<value>,只不过如果用local属性值只能是.xml中的<bean>的id值而已,<idref local='...'>与id属性一样都是xml中以定义的元素 <ref>元素用来设置属性值引用容器管理的其他bean2(这个其他bean2可以叫做合作者)用ref元素的bean属性指定目标bean是最常见的形式,它允许指向的bean可以在同一个BeanFactory/ApplicationContext(无论是否在同一个XML文件中)中,也可以在父BeanFactory/ApplicationContext中。bean属性的值可以同目标bean的id属性相同,也可以同目标bean的name属性中任何一个值相同。用local属性指定目标bean可以利用XML解析器的能力在同一个文件中验证XML id引用。local属性的值必须与目标bean的id属性一致。如果在同一个文件中没有匹配的元素,XML解析器将会产生一个错误。因此,如果目标bean在同一个XML文件中,那么使用local形式将是最好的选择(为了能够尽可能早的发现错误)一个bean的<idref local='idValue'/>会不引起id值为idValue的bean元素对应的类对象的创建,<idref name='...'>也不会引起对应的类对象的创建
2、是否使用自动装配
自动装配可以使配置减少,但是自动装配无法直接从spring配置文档中去获取bean之间的依赖关系。为了程序的可读性,建议还是尽量不用自动装配。

二、AOP

1、AOP结构分解

spring的AOP由这么几个主要的部分组成:ProxFactory,代理工厂用于声称代理类;PointCut,切点,可以理解为满足条件,条件大致分为两种,一种是类级别的,一种是方法级别的,通过对相应方法的判断来告诉程序你的条件;Advice,通知,可以理解为你要在满足条件之前,之后或前后要做哪些事。Advisor,通知者,代理工厂直接与这个对象打交道,他把切点和通知包裹起来告诉代理工厂代理出来的对象应该有的动作。

2、AOP需要注意的问题

a、spring的代理工厂只能设置一个目标(setTarget),如果要设两个目标,那要再新建一个工厂,重新设置目标。

b、PointCut的静态与动态的差别主要在于动态可以更进一步判断方法传递的参数。如果没有这个需要,考虑性能问题只需要使用静态就行了。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics