【spring】杂记
来源:互联网 发布:python 生成器 迭代器 编辑:程序博客网 时间:2024/06/14 03:39
1.[spring aop]AOP核心概念
1、横切关注点对哪些方法进行拦截,拦截后怎么处理,这些关注点称之为横切关注点2、切面(aspect)类是对物体特征的抽象,切面就是对横切关注点的抽象3、连接点(joinpoint)被拦截到的点,因为Spring只支持方法类型的连接点,所以在Spring中连接点指的就是被拦截到的方法,实际上连接点还可以是字段或者构造器4、切入点(pointcut)对连接点进行拦截的定义5、通知(advice)所谓通知指的就是指拦截到连接点之后要执行的代码,通知分为前置、后置、异常、最终、环绕通知五类6、目标对象代理的目标对象7、织入(weave)将切面应用到目标对象并导致代理对象创建的过程8、引入(introduction)在不修改代码的前提下,引入可以在运行期为类动态地添加一些方法或字段
2.[spring mvc]Spring AOP 支持编译期织入、装载期织入、运行时织入
AOP 实现的关键就在于 AOP 框架自动创建的 AOP 代理,AOP 代理则可分为静态代理和动态代理两大类
静态代理是指使用 AOP 框架提供的命令进行编译,从而在编译阶段就可生成 AOP 代理类,因此也称为编译时增强;
动态代理则运行时借助于 JDK 动态代理、CGLIB 等在内存中“临时”生成 AOP 动态代理类,因此也被称为运行时增强。
Spring对AOP的支持
1、如果目标对象实现了接口,默认会采用JDK的动态代理机制实现AOP
2、如果目标对象实现了接口,可以强制使用CGLIB实现AOP
3、如果目标对象没有实现接口,必须使用CGLIB生成代理,spring会自动在CGLIB和JDK动态代理之间切换
3.spring的DispatcherServlet配置能有多个
<load-on-startup>1</load-on-startup> 要设置成不同的优先级。以及 <servlet-mapping> <servlet-name>weixin</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>应该不同。
4.自动装配提供五种不同的模式供Spring容器用来自动装配beans之间的依赖注入:
no:默认的方式是不进行自动装配,通过手工设置ref 属性来进行装配bean。
byName:通过参数名自动装配,Spring容器查找beans的属性,这些beans在XML配置文件中被设置为byName。之后容器试图匹配、装配和该bean的属性具有相同名字的bean。
byType:通过参数的数据类型自动自动装配,Spring容器查找beans的属性,这些beans在XML配置文件中被设置为byType。之后容器试图匹配和装配和该bean的属性类型一样的bean。如果有多个bean符合条件,则抛出错误。
constructor:这个同byType类似,不过是应用于构造函数的参数。如果在BeanFactory中不是恰好有一个bean与构造函数参数相同类型,则抛出一个严重的错误。
autodetect:如果有默认的构造方法,通过 construct的方式自动装配,否则使用 byType的方式自动装配。
5.【事务】Spring事务管理核心接口
6.Spring bean 的默认作用范围singleton
7.集合注入
<bean id="collectionBean" class="com.tarena.entity.CollectionBean"> <!-- list 注入 --> <property name="cityList"> <list> <value>北京</value> <value>上海</value> <value>北京</value> <value>广州</value> </list> </property> <!-- set注入 --> <property name="citySet"> <set> <value>北京</value> <value>上海</value> <value>北京</value> <value>广州</value> </set> </property> <!-- 数组 注入 --> <property name="cityArray"> <list> <value>北京</value> <value>上海</value> <value>广州</value> <value>北京</value> </list> </property> <!-- Map注入 --> <property name="mms"> <map> <entry key="1" value="如花"/> <entry key="2" value="如来"/> <entry key="3" value="如草"/> </map> </property> <!-- Properties key=value --> <property name="props"> <props> <prop key="driverClassName"> com.mysql.jdbc.Driver </prop> <prop key="url"> jdbc:mysql://127.0.0.1:3306/mydb </prop> <prop key="username">root</prop> <prop key="password">1234</prop> </props> </property> </bean>
8.Spring 处理 XML 的编入编出(marshal/unmarshal)
Spring包装了很多库,包括 Jackson 和 JAXB
9.spring 缓存 @CachePut 和 @Cacheable
@CachePut:这个注释可以确保方法被执行,同时方法的返回值也被记录到缓存中。
@Cacheable:当重复使用相同参数调用方法的时候,方法本身不会被调用执行,即方法本身被略过了,取而代之的是方法的结果直接从缓存中找到并返回了。
@Cacheable的key生成方式 可以是方法参数及其成员变量的任意表达式
10.Spring 中 “@Transactional”注解是用 AOP 实现的
11.Spring框架支持如下五种不同的作用域:
singleton:在Spring IOC容器中仅存在一个Bean实例,Bean以单实例的方式存在。
request:每次HTTP请求都会创建一个新的Bean。该作用域仅适用于WebApplicationContext环境。
session:一个HTTP Session定义一个Bean。该作用域仅适用于WebApplicationContext环境.
globalSession:同一个全局HTTP Session定义一个Bean。该作用域同样仅适用于WebApplicationContext环境.
bean默认的scope属性是’singleton‘。
12.利用spring的mock类进行HTTP 请求单元测试:
spring框架提供了大量测试的mock类,包括与jndi,porlet,web应用相关的mock类。尤其是web应用相关的mock类,可以大大提高web组件测试的方便性。
打开spring的下载包的mock文件夹(路径…mock\org\springframework\mock\web),就发觉有如下几个文件:
MockHttpServletRequest:是HttpServletRequest接口的mock实现,用来模拟客户端的HTTP请求,很常用的一个类。
MockHttpServletResponse:是HttpServletResponse接口的mock实现,用于模拟服务器对客户端的响应。
MockHttpSession:是对HttpSession接口的mock实现。
DelegatingServletInputStream:是对ServletInputStream接口的mock实现。
DelegatingServletOutputStream:ServletOutputStream的mock实现。需要拦截和分析服务器的输出的流的内容,可以使用该类。
其他的,例如MockFilterConfig,MockPageContext(可以测试预编译的
JSP),MockRequestDispatcher,MockServletConfig看名称就知道大概是mock什么的。
13.@Required注解
@Required注解应用于bean属性的setter方法,它表明影响的bean属性在配置时必须放在XML配置文件中。
使用@Required但不关联bean 来注解setter方法,将会发生BeanInitializationException 的异常
14.Spring框架中bean的生命周期
Spring容器读取XML文件中bean的定义并实例化bean。
Spring根据bean的定义设置属性值。
如果该Bean实现了BeanNameAware接口,Spring将bean的id传递给setBeanName()方法。
如果该Bean实现了BeanFactoryAware接口,Spring将beanfactory传递给setBeanFactory()方法。
如果任何bean BeanPostProcessors 和该bean相关,Spring调用postProcessBeforeInitialization()方法。
如果该Bean实现了InitializingBean接口,调用Bean中的afterPropertiesSet方法。
如果bean有初始化函数声明,调用相应的初始化方法。 如果任何bean BeanPostProcessors 和该bean相关,调用postProcessAfterInitialization()方法。
如果该bean实现了DisposableBean,调用destroy()方法
15.Spring框架的基本模块如下所示:
Core module Bean module Context module Expression Language module JDBC module ORM module OXM module Java Messaging Service(JMS) module Transaction module Web module Web-Servlet module Web-Struts module Web-Portlet module
16.有两个重要的bean生命周期方法。
第一个是setup方法,该方法在容器加载bean的时候被调用。
第二个是teardown方法,该方法在bean从容器中移除的时候调用。
bean标签有两个重要的属性(init-method 和 destroy-method),你可以通过这两个属性定义自己的初始化方法和析构方法。
Spring也有相应的注解:@PostConstruct 和 @PreDestroy。
17.spring事务的隔离级别和传播行为
隔离级别 - DEFAULT使用数据库默认的隔离级别 - READ_UNCOMMITTED会出现脏读,不可重复读和幻影读问题 - READ_COMMITTED会出现重复读和幻影读 - REPEATABLE_READ会出现幻影读 - SERIALIZABLE最安全,但是代价最大,性能影响极其严重 传播行为: - REQUIRED存在事务就融入该事务,不存在就创建事务 - SUPPORTS存在事务就融入事务,不存在则不创建事务 - MANDATORY存在事务则融入该事务,不存在,抛异常 - REQUIRES_NEW总是创建新事务 - NOT_SUPPORTED存在事务则挂起,一直执行非事务操作 - NEVER总是执行非事务,如果当前存在事务则抛异常 - NESTED嵌入式事务
- Spring杂记
- 【spring】杂记
- spring项目杂记5
- Spring学习杂记
- spring初学杂记
- Spring源码解析-杂记
- Spring杂记之--Spring配置文件
- Struts Spring Hibernate学习杂记
- Struts1,Struts2,Spring 对比杂记
- [Java]struts,spring,svn杂记
- Spring学习杂记(AOP)
- spring boot杂记fastjson swagger
- Spring杂记之Bean注入(xml)
- Spring MVC 自学杂记(一)
- 杂记
- 杂记
- 杂记
- 杂记
- ipmi创建的proc接口
- 深入了解android平台的jni(一)
- IDEA热部署(三)---jetty插件调试
- 86. Partition List
- mysql的免安装版下载与配置
- 【spring】杂记
- 【项目管理和构建】——Maven简介(一)Maven是什么,以及为什么要使用Maven
- python邮件发送
- Android开发小技巧
- python 获取当前函数的 函数名 sys._getframe().f_code.co_name
- dbutils
- Emgu学习之(一)——Emgu介绍
- Z-function的构造与应用
- 发送有序广播