一些Spring笔记总结

http://ifeve.com/spring-interview-questions-and-answers/
https://juejin.im/post/5b065000f265da0de45235e6
https://www.shsxt.com/it/coder/1649.html

BeanFactory或ApplicationContext?

BeanFactory API为Spring的IoC功能提供了基础。其特定 Contract 主要用于与Spring的其他部分和相关的第三方框架集成,其DefaultListableBeanFactory 实现是更高级别 GenericApplicationContext 容器中的关键委托。
ApplicationContext 包含 BeanFactory 的所有功能。

Feature BeanFactory ApplicationContext
Bean实例化/装配
集成生命周期管理
自动 BeanPostProcessor 注册
自动 BeanFactoryPostProcessor 注册
方便 MessageSource 访问(内部化)
内置 ApplicationEvent 发布机制

动态代理(cglib 与 JDK)JDK

动态代理类和委托类需要都实现同一个接口。也就是说只有实现了某个接口的类可以使用Java动态代理机制。但是,事实上使用中并不是遇到的所有类都会给你实现一个接口。因此,对于没有实现接口的类,就不能使用该机制。而CGLIB则可以实现对类的动态代理。
• JDK动态代理只能对实现了接口的类生成代理,而不能针对类.
• CGLIB是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法因为是继承,所以该类或方法最好不要声明成final。
• JDK代理不需要第三方的库,只要JDK环境就可以进行代理
• CGLib 必须依赖于CGLib的类库,但是它需要类来实现任何接口代理的是指定的类生成一个子类,覆盖其中的方法,是一种继承.

Spring 事务实现方式

1、编码方式所谓编程式事务指的是通过编码方式实现事务,即类似于JDBC编程实现事务管理。2、声明式事务管理方式声明式事务管理又有两种实现方式:基于xml配置文件的方式;另一个实在业务方法上进行@Transaction注解,将事务规则应用到业务逻辑中

Spring 中的 bean 的作用域

范围 描述
singleton (默认)将每个Spring IoC容器的单个bean定义范围限定为单个对象实例。
prototype 将单个bean定义范围限定为任意数量的对象实例。
request 将单个bean定义范围限定为单个HTTP请求的生命周期;也就是说,每个HTTP请求都有自己的bean实例,它是在单个bean定义的后面创建的。仅在具有Web感知功能的Spring ApplicationContext 的上下文中有效。
session 将单个bean定义范围限定为HTTP Session 的生命周期。仅在具有Web感知功能的SpringApplicationContext 的上下文中有效。
globalSession 将单个bean定义范围限定为全局HTTP Session 的生命周期。通常仅在Portlet上下文中使用时有效。仅在具有Web感知功能的Spring ApplicationContext 的上下文中有效。
application 将单个bean定义范围限定为 ServletContext 的生命周期。仅在具有Web感知功能的SpringApplicationContext 的上下文中有效。
websocket 将单个bean定义范围限定为 WebSocket 的生命周期。仅在具有Web感知功能的SpringApplicationContext 的上下文中有效。
自定义 用户自定义作用域

初始化和销毁bean的额外处理方法

从Spring 2.5开始,您有三个控制bean生命周期行为的选项: 
1、 InitializingBean (afterPropertiesSet)和 DisposableBean (destroy)回调接口;(不建议,因为会依赖于spring接口)
2、自定义 init() 和destroy() 方法,然后在xml配置bean定义 init-method和 destroy-method,或者在beans定义统一的处理方法; 
3、@PostConstruct and @PreDestroy annotations 。您可以组合这些机制来控制给定的bean。

spring 事务

全面的事务支持是使用Spring Framework的最有说服力的理由之一。 Spring Framework为事务管理提供了一致的抽象。
传统上,Java EE开发人员有两种 Transaction 管理选择:全局或本地 Transaction。

全局事务使您可以使用多个事务资源,通常是关系数据库和消息队列。全局事务的使用将限制应用程序代码的任何潜在重用。

本地事务是特定于资源的,例如与JDBC连接关联的事务。本地事务可能更容易使用,但具有明显的缺点:它们无法跨多个事务资源工作。

Spring解决了全局和本地事务的缺点。它使应用程序开发人员能够在任何环境中使用一致的编程模型。您编写一次代码,它可以从不同的方面受益不同环境下的 Transaction 管理策略。Spring Framework提供了声明式和编程式事务管理。

声明式事务管理

使用Spring AOP 可以实现Spring Framework的声明式事务管理。通过@Transactional可以引入事务(需要为公有方法)。
还需要引入配置f

 <!-- enable the configuration of transactional behavior based on annotations -->
 <!-- a PlatformTransactionManager is still required -->
 <tx:annotation-driven transaction-manager="txManager"/>

 <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
 <property name="dataSource" ref="dataSource"/>
 </bean>

发表回复

您的电子邮箱地址不会被公开。

粤ICP备17041560号-2