Spring框架学习笔记

一、Spring框架概述

1、 Spring框架提供了一个开发平台,用于整合其他技术,例如Struts,Hibernate,Mybatis等。举个例子Spring就像是一台电脑的主板,为各种硬件设施提供了接口,CPU,内存,硬盘都有各自的接口。这样做的好处也是显而易见的,比如在改善系统的结构方面,更利于系统的扩展和升级。
2、作用:a,提供了整合其他技术的API
b,提供了创建对象的功能,这样Spring就编程了一个大的工厂,所以spring是一个具有工厂功能的框架
c,spring提供了两种非常重要的机制IOC和AOP,这样的好处是降低了组件对象之间的耦合度。

二、Spring框架基本应用

1、对象创建功能,有两种方式
a,使用配置文件:
i.添加spring-ioc开发jar包到build-path
ii.在src下添加applicationContext.xml配置文件
iii.将bean组件在配置文件中定义(bean组件也就是需要使用spring创建的对象),
iiii.实例化spring容器对象,调用getBean(“标示符”)获取Bean对象。
b,使用注解:
(何为注解,就是在类定义、方法定义或成员变量前追加@标记)
spring可以利用对组件追加注解,实现自动扫描功能,这样可以代替xml文件中冗杂的元素定义。自动扫描技术可以扫描指定package下的组件,当发现组件定义前有Spring指定的标记时,就会将该组件扫描到Spring容器,等价于定义了一个元素。
Spring扫描标记有:
@Component:其他组件使用
@Reposity:DAO使用
@Service:业务层组件使用
@Controller:控制层组件使用
扫描组件后,id标示符默认为类名首字母小写,可以通过@Service(“id标示符”)来指定。
@Scope:等价于scope属性
@PostConstruct:等价于init-method属性
@PreDestroy:等价于destroy-method属性
使用方法:
i.在spring配置文件中开启组件扫描<
ii.在组件类定义中使用上述相应的标记

tip:在属性变量或set方法前,使用@Resource标记,Spring会采用类型匹配规则注入。对于多个类型相同的可以采用@Resource(name="要注入Bean的id值")格式。
    -----------------------------
     Spring提供了一个@Autowired标记,作用与@Resource相同,都是按类型匹配注入。如果需要注入指定名称的Bean对象,格式如下:
    @Autowired
    @Qualifier("id值")

2、IOC机制
a,概念:字面意思是控制反转,可以理解为组件之间的调用,将组件对象的创建和关系的建立由第三方框架或容器负责。
b,IOC实现原理——依赖注入
当两个组件存在使用关系时,也就是存在依赖关系。依赖关系建立可以通过以下几种注入途径:
—-setter方式注入,通过set方法将DAO传入
在Action中定义属性变量和set方法
定义配置时,指定注入
—-构造方式注入
通过构造器将DAO传入
在Action中定义属性变量和带参数的构造方法
定义配置时,指定注入

3、AOP机制
1),AOP又被称为面向方面编程,其实就是在面向对象的基础上又进行了一次封装,由与面向对象是将共同的属性和方法封装起来,而面向方面编程则是面向共同的方面逻辑,就像事务和异常,所有的对象都会产生这样一个共性的方面。
2),AOP编程概念
a.方面(Aspect)
封装共通处理部分的组件。方面
组件可以被切入到其他目标组件
方法上的。
b.切入点(Pointcut)
负责指定哪些组件方法调用
方面(共通)处理.通过一个表达式
指定。
c.连接点(JoinPoint)
切入点是连接点的集合。连接点
包含了方面和目标方法关联的信息。
例如当前作用的目标组件类型和作用
的方法名等信息。
d.通知(Advice)
负责指定方面处理和目标组件
方法之间的作用关系。例如先执行
方面处理再执行目标处理;先执行
目标处理再执行方面处理等
e.目标(Target)
启用方面处理的组件,即切入点
指定的组件
c,AOP的实现
AOP是通过使用动态代理技术实现的,实现过程,当采用AOP切入之后,Spring容器返回的目标对象是采用动态代理技术生成的一个类型。该类型会重写原目标的方法,内部会调用原目标的方法和方面处理。
3), AOP编程实现
a,引入aop开发包
b,编写方面组件,引入AOP组件
c,添加spring的AOP配置

1
2
3
4
5
6
7
8
9
 <aop config>
<!-- 指定切入点 -->
<aop:pointcut id="切入点name" expression="witnin(org.tarena.action..*)"/>//action包内所有的类的方法指定为切入点
<!-- 指定方面 -->
<aop:aspect id="" ref="">
<!-- 通知 around这里可以指定多种类型-->
<aop:around pointcut-ref="切入点name" method="方面方法名字" />
</aop:aspect>
</aop:config>

d,使用注解的方式
首先在spring的xml配置文件中开启AOP注解配置,方面组件中使用下面标记
@Component扫描到容器
@Aspect指定成方面组件
@Around环绕通知
@Before前置通知
@AfterReturning后置通知
@After最终通知
@AfterThrowing异常通知