Spring总结

Spring

IOC

inversion of control 译为控制反转,也可以称之为DI

dependency injection 依赖注入

控制反转:反转的是获取对象的方式,将之前的new反转成了从ioc容器中进行获取

依赖注入:将属性值注入给属性,将属性注入给bean,将bean注入给了Ioc容器

依赖注入的方式

构造器注入

1.需要有构造方法

2.在xml使用标签

set注入

1.需要使用

2.在xml使用标签

注意:当构造器中的参数和构造方法不一致的时候,可以使用标签中index、type、name进行指定

自动装配(autowire)
byName

根据名字(id)装配。自动寻找其他bean和字段名相同的id

byType

根据类进行匹配。但是此种方式不能有两个相同类型的bean

constructor

自动寻找其他类型的bean是否和构造方法参数类型一致,本质就是byType

使用注解进行自动注入

1.在需要装配的类加上@Component或者其他注解

2.然后在applicationContext.xml文件中进行配置扫描器

<context:component-scan base-package="包"/>

@Component细化

dao层:@Repository

service层:@Service

controller层:@Controller

事务

事务特性

原子性、一致性、持久性、隔离性

编程式事务

spring推荐使用TransactionTemplate来进行编程式事务管理

我们可以手动的进行事务的开始和结束,我们可以清楚的控制事务边界

声明式事务(推荐)

声明式事务是将事务的管理交给spring进行控制,底层使用AOP技术进行事务管理。具有非侵入的特点,因此推荐。

1.在xml配置文件中加入对事务的支持

<tx:annotaion-driven transaction-manager="txManager" />

2.配置事务管理器txManager

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

3.配置数据库相关dataSource

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <配驱动>
    <配url>
    <配账号>
    <配密码>
    </bean>

4.在service加@Transaction

事务的传播行为(propagation)婆婆给逊

传播行为含义
PROPAGATION_REQUIRED(默认)必须运行在事务中,如果当前事务存在,方法将会在该事务中运行。否则会启动一个新的事务
PROPAGATION_SUPPORTS表示当前方法不需要事务上下文,但是如果当前存在事务的话,那么方法会在这个事务中运行
PROPAGATION_MANDATORY表示该方法必须在事务中运行,如果当前不存在事务则会抛出异常
PROPAGATION_REQUIRED_NEW表示当前方法必须运行在自己的事务中,如果增加新方法,则会重新开启一个新的事务
PROPAGATION_NOT_SUPPORTER表示该方法不应该运行在事务中,如果当前存在事务,在该方法执行期间,当前事务将会被挂起
PROPAGATION_NEVER使用事务会抛异常

AOP

AOP是Aspect Oriented Progarmming 面向切面编程的简称,底层实现是动态代理,动态代理分为cglib和jdk

通知

前置通知

在目标方法执行前执行,需要实现MethodBeforeAdvice接口,重写before方法

后置通知

在目标方法执行后执行,需要实现AfterReturningAdvice接口,重写afterReturning

环绕通知

在目标方法的前、后、异常发生时、最终等各个地方都可以进行的通知,是最强大的一个通知,需要实现MethodInterceptor接口(本质是拦截器实现的),重写的invoke方法

异常通知

在出现异常的时候进行通知,需要实现ThrowsAdvice接口

配置切入点

在applicationContext.xml中进行配置

<aop:config>
<aop:pointcut expression="切点表达式" id="唯一标识符"/>
<aop:advisor advice-ref="哪个方法切进去" pointcut-ref="pointcut"/>
</aop:config>

AOP的注解实现

1.写一个类,在类上加注解@Component将类加入ioc容器,配置扫描器扫描注解所在类,在类上使用注解@Aspect声明该类是一个通知,开启注解对aop的支持

<aop:aspectj-autoproxy />
注解的前置通知

2.写一个方法。在方法上使用注解@Before,注解中写切点表达式

注解的后置通知

2.写一个方法。在方法上使用注解@AfterReturning,注解中写切点表达式

注解的环绕通知

2.写一个方法。在方法上使用注解@Around,注解中写切点表达式

注解的异常通知

2.写一个方法。在方法上使用注解@AfterThrowing,注解中写切点表达式

注解的异常通知

2.写一个方法。在方法上使用注解@After,注解中写切点表达式

基于schema的AOP

写一个类,然后在xml中配置

Spring开发web项目

web项目如何初始化springioc容器

思路:当服务启动时,通过监听器将springioc容器初始化一次

使用spring-web.jar的监听器来实现

在web项目启动时会自动加载web.xml,因此需要在web.xml中加载监听器

 <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
  </context-param>
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值