【spring】杂记

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嵌入式事务 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值