spring IOC&ID,AOP和事务的概述

配置bean

   配置形式:基于xml文件的方式;基于注解的方式。

  Bean的配置方式:通过全类名(反射),通过工厂方式(静态工厂方法&实例工厂方法)、FactoryBean

  IOC容器的applicationContext&BeanFactory概述

  依赖注入的方式:属性(set)注入,构造注入。(构造注入用index区分第几个参数,用type匹配类型)

  注入属性值细节

  自动装配 byName&byType

  bean之间的关系:继承;依赖

  bean的作用域:singleton;prototype;WEB环境作用域

  使用外部属性文件

  speL

  IOC容器中bean的生命周期

  Spring 4.x新特性:泛型依赖注入

spring通过注解配置bean

spring能够从classpath下自动扫描,侦测和实例化具有特定注解的组件。

特定组件包括:

@component:基本注解,表示一个受spring管理的组件。

@respository:标识持久层组件

@service:标识逻辑层(业务层)组件

@Controller:标识表现层组件

当在组件类上使用了特定的注解之后,还需要在spring的配置文件中声明<context:component-scan>:

-----base-package属性制定一个需要扫描的基类包,Spring容器将会扫描这个基类包里及其子包中的所有类。

-----当需要扫描多个包时,可以使用逗号隔开

-----如果仅仅希望扫描特定类而不是非基包下的所有类,可使用resource-patterm属性过滤特定的类。

----<contect:include-filter>子节点表示要包含的目标类。

----<contect:exclude-filter>子节点表示排除在外的目标类。

----<context:component-scan>下可以拥有若干个<contect:include-filter>子节点和<contect:exclude-filter>子节点。

组件装配

@Autowired注解自动装配具有兼容性的单个Bean。@Autowired可以在放在构造器,普通字段等一切具有参数方法都可以应用。

默认情况下所有的@Autowired注解的属性都要被设置,找不到配置就会抛出异常。若某一属性允许不被配置,可以设置@Autiwired注解的required属性为FALSE.

AOP

AOP(面向切面编程):主要编程对象是切面,而切面模块化横切关注点。

aop的好处:

----每个事物逻辑位于一个位置,代码不分散,便于维护和升级。

----业务模块更简洁,指包含核心业务代码

eg:每个方法前后的验证和日志,如果在每个方法都加,会很臃肿。所以抽取横切关注点。

AOP的配置:

----基于AspectJ配置AOP

1、要在Spring应用中使用AspectJ注解,必须在classpath下包含AspectJ类库:aopalliance.jar、aspectj.weaver.jar和spring-aspects.jar

2、将aop Schema添加到<beans>根元素中(application.xml中头部)。

3、要在SpringIOC容器中启用AspectJ注解支持,只要在Bean配置文件中定义一个空XML元素<aop:aspectj-autoproxy>

当SpringIOC容器侦测到Bean配置文件中的<aop:aspectj-autoproxy>元素,会自动与AspectJ切面匹配的Bean创建代理。

4、把横切关注点的代码抽象到切面类中。切面首先在IOC中配置一个Bean,再在类前加@Component注解和@AspectJ注解。

5、在类中声明各种通知(@Before前置通知,@After后置通知,@AfterRunning返回通知,在方法返回结果之后执行,@AfterThrowing异常通知,在方法抛出异常之后,@Around环绕通知,围绕着方法执行)

----基于XML配置AOP

AOP优先级:

可以通过@Order注解指定切面的优先级,值越小优先级越高。

使用@Pointcut来声明切入点表达式,后面的其他通知直接使用方法名来引用当前的切入点表达式。

事务

一系列的动作被当作一个独立单元,要么都完成要么都不起作用。

原子性:要么都完成要么都不起作用。

一致性:一旦事务动作完成,事务被提交,数据和资源就处于一种满足业务规则一致性的状态中。

隔离性:可能会有很多事物会同时处理相同的数据,因此每个事物都应该与其他事务隔离开来,防止数据损坏。

持久性:一旦事务完成,无论发生什么系统错误,它的结构都不受影响。通常情况下,事物的结果被写道持久化存储器中。

配置事务:

1、在applacationContext.xml中配置事务管理器DataSourceTransationManager

2、启用事务注解驱动

3、在方法前边加注解@Transational

spring支持事务的传播行为

required -----如果事务在运行,就用当前事务,否则就启动一个新事务。

required_new ----当前的方法必须启动新事务,并在他的新事务内运行。如果有事务在运行,应该将它挂起

supports ---如果有事务在运行,就在当前事务运行,否则它可以不运行在事务中

not_supports ---当前方法不应该在事务中,如果有运行事务,将其挂起。

mandatory ---当前方法必须在事务中运行,如果有正在运行的事务,就抛出异常

never ---当前方法不应该运行在事务中,如果没有正在运行的事务,就抛出异常

nested ---如果有事务在运行,当前方法应该嵌套在事务内运行,否则启动一个新事务,并在自己的事务内运行。

@Transational使用propagation指定事务的传播行为

@Transational(propagation=Propagation.REQUIRED)

出来通过注解使用事务,还可以通过xml配置来使用事务。

原文地址:https://www.cnblogs.com/maoyizhimi/p/7154424.html