spring的作用:
- spring的主要作用就是解耦,即降低代码间接耦合度;
- spring将应用程序中的代码根据功能分为了两部分:主业务逻辑与系统服务;
- spring本身提供有访问数据库的JDBC模板,还可接入ORM框架。
spring的特点:
-
Ioc :
将原本有代码操纵的对象操控权,交由第三方容器,即反转给了第三方容器。这种对象的依赖关系的管理方式称为IoC;
Ioc是一种思想, 是一个概念,其实现方式有许多种;比较著名的有两种:DL(依赖查找),DL(依赖注入)。
Ioc的实现有两种:基于xml的实现和基于注解的实现
-
Aop :
Aop:Aspect Oriented Programming ,面向切面的编程。解决的是“系统级服务”和“主业务逻辑”间的耦合的问题。
Aop是一种思想,一种解决方案,一套规范,其实现方式有很多,其中最著名的有 Spring、AspectJ。
AoP的实现有两种:基于xml的实现和基于注解的实现。
名词解释:
-
切面:就是交叉业务逻辑,也就是对主业务逻辑进行增强的部分:
通知、顾问
。(顾问可以理解为是复杂的通知) -
织入:将切面切入到主业务逻辑的过程。
-
连接点:可以被增强的目标方法;
-
切入点:真正被增强的连接方法,指定织入的位置。
连接点不一定是切入点,切入点一定是连接点。
切入点表达式:execution(访问权限 返回类型 全限定方法名(参数列表) 抛出的异常)
其中返回类型与方法名是不能省略的。插入通知的xml实现:
<aop:config> //进行AoP配置 <aop:aspect ref="myconfig"> //配置切面 //声明通知类型 插入的切面的方法 以及切入点 <aop:after method="ha" pointcut="execution(void org.example.service.Tests.hhh())"/> </aop:aspect> </aop:config>
插入事务通知(顾问)的xml实现:
<!--注册事务管理器--> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"></property> </bean> <!--注册事务通知--> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> //name属性,表示与事务属性相关联的方法名(业务方法名),对切入点进行细化 <tx:method name="insert" isolation="DEFAULT" propagation="REQUIRED" rollback-for="Exception"/> </tx:attributes> </tx:advice> <!-- AoP配置--> <aop:config> <aop:advisor advice-ref="txAdvice" pointcut="execution(* *..*.*(**))"></aop:advisor> </aop:config> ```
-
spring的实现:
- BeanFactory和ApplicationContext是Spring的两大核心接口,而其中ApplicationContext是BeanFactory的子接口。它们都可以当做Spring的容器,Spring容器是生成Bean实例的工厂,并管理容器中的Bean。在基于Spring的Java EE应用中,
所有的组件都被当成Bean处理
,包括数据源,Hibernate的SessionFactory、事务管理器等。 - 生活中我们一般会把生产产品的地方称为工厂,而在这里bean对象的地方官方取名为BeanFactory,直译Bean工厂(com.springframework.beans.factory.BeanFactory),我们一般称BeanFactory为IoC容器,而称ApplicationContext为应用上下文。
- Spring的核心是容器,而容器并不唯一,框架本身就提供了很多个容器的实现,大概分为两种类型:
一种是不常用的BeanFactory,这是最简单的容器,只能提供基本的DI功能;
一种就是继承了BeanFactory后派生而来的ApplicationContext(应用上下文),它能提供更多企业级的服务,例如解析配置文本信息等等,这也是ApplicationContext实例对象最常见的应用场景。
下面是Application Context的实体类的几种构造方法:
ApplicationContext常用实现类 | 作用 |
---|---|
AnnotationConfigApplicationContext | 从一个或多个基于java的配置类中加载上下文定义,适用于java注解的方式。 |
FileSystemXmlApplicationContext | -从文件系统下的一个或多个xml配置文件中加载上下文定义,也就是说系统盘符中加载xml配置文件。- |
ClassPathXmlApplicationContext | 从类路径下的一个或多个xml配置文件中加载上下文定义,适用于xml配置的方式。 |
XmlWebApplicationContext – | -从web应用下的一个或多个xml配置文件加载上下文定义,适用于xml配置方式。- |