Spring读书笔记


1.Spring是分层的java se/ee应用一站式的轻量级开源框架,以Ioc(Inverse Of Control:反转控制)和AOP(Aspect Oriented Programming:面

向切面编程)为内核。
2.JCP(Java Community Process) 是一个开放的国际组织,主要由Java开发者以及被授权者组成,职能是发展和更新。
  JSR是Java Specification Requests的缩写,意思是Java 规范请求。是指向JCP(Java Community Process)提出新增一个标准化技术规范的 

正式请求。任何人都可以提交JSR,以向Java平台增添新的API和服务。JSR已成为Java界的一个重要标准。
  JDO(Java Data Object )是Java对象持久化的新的规范,也是一个用于存取某种数据仓库中的对象的标准化API。
  JMX(Java Management Extensions,即Java管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架。
  JCA(J2EE Connector Architecture, 也缩写为,J2C, J2CA),是J2EE平台上连接传统系统的一个技术规范。
  RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络

  技术的协议。
  SOAP:简单对象访问协议
  SAX是一个用于处理XML事件驱动的“推”模型,虽然它不是W3C标准,但它却是一个得到了广泛认可的API。
  JAXP是Java API for XML Processing的英文字头缩写,中文含义是:用于XML文档处理的使用Java语言编写的编程接口。
  LDAP是轻量目录访问协议,英文全称是Lightweight Directory Access Protocol,一般都简称为LDAP。
  Lucene是apache软件基金会[4] jakarta项目组的一个子项目,是一个开放源代码[5]的全文检索引擎工具包,即它不是一个完整的全文检索 

  引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。
  OSGi(Open Service Gateway Initiative)即开发服务网关,其主要功能是为连接互联网上的商业服务和下一代智能电器定义一个开放的标准
  Java事务API(JTA;Java Transaction API)和它的同胞Java事务服务(JTS;Java Transaction Service),为J2EE平台提供了分布式事务服

  务。
  JOTM(Java Open Transaction Manager)是ObjectWeb的一个开源JTA实现,它本身也是开源应用服务器JOnAS(Java Open Application  

Server)的一部分,为其提供JTA分布式事务的能力。
 
3.Spring七大模块:
  (1)Spring核心模块:Ioc
  (2)Application Context 模块:JNDI、EJB等
  (3)AOP模块
  (4)Spring DAO模块
  (5)ORM模块
  (6)Spring Web模块
  (7)Spring MVC
4.Maven是被认为比Ant更优秀的工程编译管理工具,Spring分别提供了Ant和Maven两种项目管理方式
5.Spring的依赖库:
  (1)持久层:Hibernate、iBatis、toplink、JDO、JPA、Openjpa、hsqldb、C3P0
  (2)展现层:struts、JSF、Velocity、FreeMaker、Jakarta Taglib、Portlet
  (3)AOP:aopallicance、AspectJ
  (4)远程访问及Web Service:caucho、JOTM、Axis
  (5)动态语言:Groovy、Jruby
  (6)文件IO:jexcelapi、iText、poi、JasperReports
  (7)文法分析:Dom4j、ORO、Antlr
  (8)字节码操作:asm、cglib、Serp
  (9)应用服务器:Tomcat、GlassFish
  (10)企业应用常见功能:JMX、ehcache、Quartz、JAMom、junit、EasyMock、Log4j
  (11)其他未分类:CommonJ、Jakarta Commom、OC4J、qdox
6.开源许可证:GPL、LGPL、BSD、NPL、QNCL、NOKOS等
7.Spring下的子项目:Spring Web Flow、Spring Web Services、Spring Security(Acegi Security)、Spring LDAP、Spring Rich Client、

Spring Extensions Modules、Spring IDE for Eclipse、Spring BeanDoc、Spring OSGi、Spring .NET
8.mysql ENGINE=InnoDB代表该类型的表支持事务
9.mysql 备份数据库:
        mysqldump -uroot -p123456 database_name>d:/backup20070713.sql
        恢复数据库:
        删除原有数据库,建立数据库,把备份数据库导入。
        mysqladmin -uroot -p123456 drop database_name
        mysqladmin -uroot -p123456 create database_name
        mysql -uroot -p123456 database_name<d:/backup20070713.sql
10.领域对象即实体类一般要实现Serializable接口。
11.<c:rul/>标签很好的解决了开发和应用部署目录不一致的问题
12.Spring Ioc比喻:Ioc类似于导演,使得剧本和具体的演员解耦,控制的意思指选择电影角色扮演者的控制权,反转是指这种控制权从剧本

中移除,移交到导演手中。对于软件来说,即某一接口具体实现类的选择控制权从调用类中移除,转交给第三方裁决。
13.反射机制可以在外部访问私有变量、调用私有方法 setAccessible(true)
14.BeanFactory是Spring框架最核心的借口,它提供了高级Ioc的配置机制。——Ioc容器
   ApplicationContext应用上下文建立在BeanFactory基础之上,提供了更多面向应用的功能。——Spring容器
15.Resource类:ByteArrayResource:二进制数组表示的资源
               ClassPathResource:类路径下的资源
               FileSystemResource:文件系统资源
               InputStreamResource:以输入流返回表示的资源;
               ServletContextResource:为访问Web容器上下文的资源而设计的类
               UrlResource:访问任何URL表示的资源
16.ApplicationContext的初始化和BeanFactory有一个重大的区别:BeanFactory在初始化容器时,并未实例化Bean,知道第一次访问某个Bean

时才实例化目标Bean;而ApplicationContext则在初始化应用上下文时就实例化所有单实例的Bean。
17.Spirng在非Web的应用的环境下,只有singleton和prototype两种作用域,在WebApplicationContext中还为Bean添加了三个新的作用域:

request、session、global session
18.Spring依赖注入的三种方式:属性注入、构造函数注入、接口注入(不常用)
   属性注入时,若注入的类显示定义了一个带参的构造函数,则需要同时提供一个默认构造函数,否则使用属性注入时将抛出异常
19.Spring属性配置时,必须满足“变量的前两个字母要么全部大写,要么全部小写”
20.Spring构造函数注入时,主要用入参类型和位置索引确定对应关系
21.若是应用同一配置文件中定义的bean<ref bean="car"></ref>
   应用父容器中的Bean<ref parnet="car"></ref>
22.内部bean和JAVA代码中的匿名内部类很相似,也没有id,也不能为其他bean引用,默认为prototype类型。
23.注入null值<value><null/></value>
24.注入集合list:<list><value></value>||<ref></ref></list>
   注入集合set:<set><value></value>||<ref></ref></set>
   注入集合map:<map>
<entry>
                        <key><value></value>||<ref></ref></key>
<value></value>
</entry>
               </map>
25.依赖注入时,若采用简化的方式注入,将无法使用<![CDATA[ ]]>处理特殊字符&、<、>、"、',只能利用转义字符进行转换
26.自动装配bean的应用ref:byName、byType、constructor、autodetect
27.某个bean不希望自己被自动装配到其他的bean中,autowire-candidate="false" 全局非自动装配:在beans设置default-autowire="false"
28.Spring默认singleton即单实例模式,若要在一个singleton类型的bean中prototype一个bean,即使这个bean是prototye型,但由于该bean

注入关联bean的动作仅有一次,因此需要用lookup的方法注入,每次得到的才是新的bean
29.bean之间的继承关系,所引用的bean都是同一个类,abstarct=“true”即可
30.Spring允许用户通过depends-on属性指定bean前置依赖的bean,前置依赖的bean会在本bean实例化之前创建好。
31.Spring推荐bean作用域的配置方式为:scope="<作用域类型>"
32.Spring的ApplicationContext默认在容器启动时,自动实例化所有singleton的bean并缓存与容器中,若是不希望在容器启动时提前实例化

singleton的bean,可以通过lazy-init="true"属性来控制
33.<bean>的autowire属性有如下六个取值,他们的说明如下:
   1、 No:即不启用自动装配。Autowire默认的值。
   2、 byName:通过属性的名字的方式查找JavaBean依赖的对象并为其注入。
   3、 byType:通过属性的类型查找JavaBean依赖的对象并为其注入。
   4、 constructor:通byType一样,也是通过类型查找依赖对象。与byType的区别在于它不是使用Seter方法注入,而是使用构造子注入。
   5、 autodetect:在byType和constructor之间自动的选择注入方式。
   6、 default:由上级标签<beans>的default-autowire属性确定。
34.ctrl+shift+R:根据类名快速搜索出它所在的类包
35.利用PropertyPlaceholderConfigurer类引入外部属性文件进行属性值的注入
36.国际互按自愿文件的命名规范规定资源名称采用以下方式进行命名:<资源名>_<语言代码>_<国家/地区代码>.properties
37.Spring AOP技术主要是利用了JDK动态代理中涉及的java.lang.reflect.Proxy和java.lang.reflect.InvocationHandler.其中

InvocationHandler是一个接口,可以通过实现该接口定义横切逻辑,并通过反射机制调用目标类的代码,动态将横切逻辑和业务逻辑编织在一

起。
PerformanceMonitor.begin(target.getClass().getName()+"."+method.getName());
        Object obj=method.invoke(target,args);//通过反射方法调用业务类的目标方法
        PerformanceMonitor.end();
38.Spring定义的切面接口主要分为三类:一般切面Advisor、具有切点的切面PointcutAdvisor、引介切面IntroductionAdvisor
39.Spring在处理@Aspect注解表达式时,需要用到asm关联类库:asm-2.2.2.jar、asm-commons-2.2.2.jar、ams-util-2.2.2.jar
   asm是轻量级的字节码处理框架,因为java的反射机制无法获取入参名,所以Spring利用asm处理@AspectJ中所描述的方法入参名。
40.切点函数:args()、this()、target()、@args()、@within()、@target()和@annotation
41.切面类型总结:@AspectJ、<aop:aspect>、Advisor、<aop:advisor>,其中<aop:advisor>是<aop:aspect>和Advisor的混血儿,他的切面表

示方式和<aop:aspect>相爱难沟通,增强定义方式则和Advisor相同。
42.ORM框架:Hibernate、iBatis、JDO、JPA、TopLink
43.数据库事务的四个特性:原子性、一致性、隔离性、持久性
44.传统经验,若果某个对象是非线程安全的,在多线程环境下,对对象的访问必须采用synchronized进行线程同步。但线程同步限制了并发访

问,所以Spring中采用ThreadLocal来解决线程安全问题
45.ThreadLocal可以解释为本地线程变量
46.一般情况下,只有无状态的Bean才可以再多线程环境下共享,在Spring中绝大部门Bean都可以声明为singleton作用域,就是因为Spring对

一些Bean中非线程安全状态采用ThreadLocal进行处理,让他们也成为线程安全的状态,即使他们引用的是同一个线程实例,但依旧可以在多线

程的情况下共享。
47.@Transactional注解可以被应用于接口定义和接口方法、类定义和类的public方法上。要注意的是注解并不能被继承。@Transactional(可

跟条件)
48.通过JdbcDaoSupport类来使用JdbcTemplate
49.利用自增键值是不安全的,因此Oracle、Firebird都不提供自增键,只提供序列。序列强制要求用户在新增记录前,先获取主键值。
   Oracel:SELECT <SEQUENCE_NAME> nextval from dual
50.Spring JDBC调用存储过程SQL:doInCallableStatement(CallableStatement cs)
本站声明
本文转载自:http://glyustb.iteye.com/blog/737993     作者:glyustb     发布日期:2010-08-15 23:09:00     本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。


 
© 2014-2016 ITdaan.com 粤ICP备14056181号