Spring IoC、AOP、Transaction、MVC 概括小结




  • 前言java

  • Spring的一些概念和思想程序员

  • 关于IOCweb

  • 关于AOP面试

  • Spring与web整合的原理编程

前言

若是说有什么框架是Java程序员必然会学习、使用到的,那么Spring确定是其中之一。本篇博客,将根据博主在平常工做中对Spring的使用作一个系统的概括小结。session

Spring的一些概念和思想

Spring的核心:AOP、IOC。架构

简单点说,就是把对象交给Spring进行管理,经过面向切面编程来实现一些"模板式"的操做,使得程序员解放出来,能够更加关注业务实现。app

Spring已是一站式的开源框架解决方案,并且造成了Spring生态。框架


小编分类整理了许多java进阶学习材料和BAT面试题,须要资料的请加JAVA高阶学习Q群:8515318105;就能领取2019年java架构师进阶学习资料和BAT面试题。学习

关于IOC

IOC,从操做上来看,要么经过XML配置实现,要么经过注解的方式实现。在实际开发中,愈来愈流行注解的方式。

须要根据你使用到的功能,来进行依赖的引入,以及XML的Schema约束引用。

Spring的核心配置文件,名称和位置不固定,不过在实际开发中,通常指定为applicationContext-xxx.xml的方式。这种方式,有2个好处:第一,能够对Spring的配置文件进行分模块管理;第二,因为统一的前缀,方便正则加载这些配置文件。

image.pngSpring

bean的XML配置建立

直接经过来进行,这样的前提是该类存在无参数的构造方法(背后的原理就是经过反射实例化的)。这种方式是实际中最常使用的,固然,除此以外还存在静态工厂、实例工厂的方式建立。

另一点还须要注意的是:bean是单例的,仍是多例的?

bean标签中存在scope属性用于说明:

singleton:单例,default

prototype:多例

request/session等。

bean的属性注入:XML方式

bean的XML建立是经过反射进行,那么bean的属性注入,是如何进行的呢?

能够在构造bean的时候,提供有参数的构造方法进行设置;

能够在提供setter方法,进行设置;(最经常使用)

什么接口注入,什么P名称空间注入,这些实际都不用……


或者


要么利用value直接给出属性值,要么经过ref引用另外一个bean。

基于注解方式的bean建立以及注入

由于Spring注解的实现是须要AOP的支持,所以在依赖方面须要注意,其次,要在XML中开启注解扫描:


实际上这个配置,会让Spring在指定包下扫描,把带有注解标志的bean实例化,而且会进行属性注入。(你能够参考《写出个人第一个框架:迷你版Spring MVC》)

建立对象的4个注解:

@Component/@Controller/@Service/@Repository

在这4个注解上,经过value属性来指定bean的id,经过@scope配合来声明单例OR多例。(目前这4个注解功能是同样的,只是为了让标注类的用途更加清晰,并且Spring留了一手,之后说不定会加强功能呢?)

如何注入属性?

@Autowired/@Resource/@Qualifier

须要注意的是@Resource是javax包下的,说白了就是J2EE提供的;而@Autowired是Spring提供的。(没必要提供setter方法

@Resource默认按照名称注入,若是找不到才按照类型注入。

@Autowired默认按照类型注入,能够结合@Qualifier进行名称注入。

那么咱们须要注意什么呢?

若是@Autowired进行类型注入,极可能类型会有多个知足(多态),那么到底注入哪一个呢?因此说,若是按照@Autowired类型注入,必定注意这点,结合@Qualifier。实际开发中,显然,注入应该是肯定的,那么按照名称注入,应该是首选!

IOC VS DI

IOC,控制反转;DI,依赖注入;

只有把对象交给Spring,才能由Spring帮助完成属性设置;所以,依赖注入不能单独存在,须要在IOC基础之上完成操做。


小编分类整理了许多java进阶学习材料和BAT面试题,须要资料的请加JAVA高阶学习Q群:8515318105;就能领取2019年java架构师进阶学习资料和BAT面试题。

关于AOP

AOP的实现,一种横向抽取机制,依赖于动态代理模式。

关于AOP的几个重点概念:

JoinPoint:链接点,说白了,就是能够被加强的方法;

PointCut:切入点,对哪些JoinPoint进行拦截;

Advice:通知,就是拦截后的动做;

Aspect:切面,把加强应用到具体方法的过程;

Spring的AOP须要借助aspectj来实现,能够经过XML,也能够经过注解来完成。

好比,采用XML方式的话,须要指明用A类的哪一个方法对B类的哪些方法上进行加强,这里就涉及到execution表达式了;

好比,采用注解方式的话,就更加简单了,先在XML中开启AOP(),而后在加强方法上直接使用相似@Before(value="execution(具体的表达式)")便可;

其实,在实际开发中,咱们对于AOP最经常使用的就是事务了。

Spring的事务管理

Spring的声明式事务管理,用的最多的就是基于注解的方式。首先咱们得配置一个事务管理器,而事务管理器须要咱们注入DataSource(DBCP,c3p0等链接池),这一点好理解,由于是DB的事务。要知道,Spring对不一样的DAO层框架(Spring JDBC/MyBatis/Hibernate…)提供了不一样的事务实现类。

咱们能够看个例子:

image.pngSpring注解事务配置

对于多个数据源,固然,咱们须要定义多个事务管理器,同时也得开启事务注解。多个事务管理器,能够经过qualifier属性进行区分。

配置完毕后,直接在service层的类或者方法上,使用

@Transactional(value = "gcs", rollbackFor = Exception.class)

Spring与web整合的原理

从操做上来说,就是在web.xml中去配置一个监听器,而后指定Spring的配置文件便可。

每个WEB项目,都存在一个ServletContext对象,而咱们配置的监听器就是对它进行监听,监听器会加载Spring的配置文件,把建立的对象放到ServletContext域(也就是setAttribute方法),获取对象的时候直接getAttribute便可!

好了,到这里,Spring的梳理就结束了!


小编分类整理了许多java进阶学习材料和BAT面试题,须要资料的请加JAVA高阶学习Q群:8515318105;就能领取2019年java架构师进阶学习资料和BAT面试题。

相关文章
相关标签/搜索