(二、)Spring框架—注解IOC&AOP
Spring的IOC的注解开发
Spring的IOC的注解开发入门
1、 新建一个web项目,引入响应的jar包
在Spring4的版本中,除了引入基本的开发包以外,还需要引入AOP的包。
引入Spring的配置文件
在src下创建一个applicationContext.xml
- 引入约束:使用注解开发需要引入context约束。
约束:spring-framework-4.2.4.RELEASE\docs\spring-framework-reference\html/xsd-configuration.html
//约束
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
</beans>
2、创建接口和实现类
3、开启Spring的组建扫描
<!-- Spring的IOC的注解的入门 -->
<!-- 使用IOC的注解的开发,配置扫描组建(那些包下的类使用IOC注解) -->
<context:component-scan base-package="com.itheima.spring.demo1"/>
4、在类上添加注解
5、编写测试类
注解方式设置属性的值
注解方式:使用注解方式,可以没有set方法的
属性如果有set方法,需要将属性注入的注解添加到set方法上
属性如果没有set方法,需要将属性注入的注解添加到属性上
Spring的IOC的注解的详解:
1.@Component:组建
修饰一个类,将这个类交给Spring管理。
这个注解有三个衍生注解(功能类似),修饰类。
- @Controller :web层的类
- @Service :service层的类
- @Repository :dao层的类
2.属性注入的注解
普通属性:
@Value :设置普通属性的值。
对象类型属性:
@Autowired :设置对象类型的属性的值,但是按照类型完成属性注入。
我们习惯是按照名称完成属性注入:必须让@Autowired注解和@Qualifier一起使用完成按照名称属性注入。
@Resource :完成对象类型的属性的注入,按照名称完成属性注入。
Bean的其它注解:
举例:
IOC的XML和注解开发的比较
XML和注解的整合开发
XML管理Bean,注解完成属性的注入
Spring的AOP的XML开发
AOP的概述
AOP:面向切面编程,是OOP的扩展和延伸,解决OOP开发遇到的问题。
AOP的应用场景:
对程序进行增强:不修改源码的情况下,
AOP可以进行权限校验;日志记录,性能监控,事务控制
Spring底层的AOP实现原理
- 动态代理
JDK动态代理 :只能对实现了接口的类产生代理
Cglib动态代理 :对没有实现接口的类产生代理对象,生成子类对象
Spring的AOP的开发(AspectJ的xml方式)
Spring的AOP的简介
AOP思想最早是由AOP联盟组织提出的,Spring使用这种思想最好的框架
- Spring两套开发方式
Spring传统方式(Spring自己的AOP开发)
Spring基于AspectJ的AOP的开发
AOP的相关术语:
Spring的AOP的入门(AspectJ的XML的方式)
1.创建web项目,引入jar包
引入基本开发包
引入AOP开发相关jar包
2.引入Spring的配置文件(引入aop的约束)
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
3.编写目标类并完成配置
<!-- 配置目标对象,被蹭强的对象 -->
<bean id="ProductDao" class="com.itheima.spring.demo3.ProductDaoImpl"></bean>
4.编写测试类
Spring整合单元测试:
- 前题:引入spring-test-4.2.4.RELEASE.jar
5.编写一个切面类
/*
* 切面类
* ***/
public class MyAspectXML {
public void checkPro() {
System.out.println("权限校验-----");
}
}
将切面类交给Spring管理
<!-- 将切面类交给Spring管理 -->
<bean id="myAspect" class="com.itheima.spring.demo3.MyAspectXML"/>
6.通过AOP的配置实现
<!-- 通过AOP的配置完成对目标类的代理 -->
<aop:config>
<!-- 表达式的那些类的那些方法需要增强 -->
<aop:pointcut expression="execution(* com.itheima.spring.demo3.ProductDaoImpl.save(..) )" id="pointcut"/>
<!-- 配置切面 -->
<aop:aspect ref="myAspect">
<aop:before method="checkPro" pointcut-ref="pointcut"/>
</aop:aspect>
</aop:config>
Spring的AOP的开发:通知(增强)的类型:
- 前置通知:在目标方法执行之前进行操作
前置通知:获得切入点信息- 后置通知:在目标方法执行之后进行操作
后置通知:获得方法的返回值- 环绕通知:在目标方法执行之前和之后进行操作
环绕通知可以阻止目标方法的执行- 异常抛出通知
- 最终通知: