Spring第二天学习笔记
1、上次课内容回顾
1.1 Spring概述
- 什么是Spring:Spring是SE,EE开发的一站式框架。
- web层:SpringMVC
- Service层:Spring的Bean管理,声明式事务
- DAO层:ORM模块,JDBC模板
- Spring优点:
- 方便解耦合 :IOC
- IOP的开发 :对程序进行扩展
- 轻量级框架
- 方便与其他框架整合
- Spring 的IOC入门
- 下载Spring的开发包
- 引入jar包
- 创建接口个实现类
- 将接口和实现类交给Spring管理
- 编写测试类
- IOC和DI
- IOC:控制反转,对象的创建权,反转给Spring
- DI :依赖注入,Spring创建对象的过程中,将这个对象所依赖的属性设置进来。
- Spring的工厂类(了解)
- BeanFactory :老版本
- ApplicationContext :新版本
- ClassPathXmlApplicationContext
- FileSystemXmlApplicationContext
- Spring的配置
- id和name的配置
- 生命周期的配置
- Bean的作用范围的配置
- Singleton :默认值
- prototype :多例的
- Spring的Bean管理(XML方式)
- Spring的Bean的实例化方式(了解)
- 默认无参构造方法的方式
- 静态工厂实例化方式
- 实例工厂实例化方式
- Spring的属性注入
- 构造方法属性注入
- set方法属性注入
- p命名空间属性注入
- spELl属性注入
- 复杂类型的属性注入
- 数组
- List
- Set
- Map
- properties
- Spring的Bean的实例化方式(了解)
2、Spring的IOC注解开发 (***)
2.1 创建web项目,引入jar包
Spring4中除了引入基本的开发包以外,还需引入aop的包
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kVN6HZqs-1572753936487)(images/20191020115913833_19663.png)]
2.2引入Spring的配置文件
- 在src目录下创建applicationContext.xml
- 引入约束:使用注解开发引入context约束
- Spring\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"> <!-- bean definitions here -->
</beans>
2.3创建接口和实现类
- 创建UserDao接口
- 创建UserDaoImpl实现类
2.4开启Spring的组件扫描
<!-- Spring的IOC的注解入门=========================== -->
<!-- 使用IOC的注解开发,配置组件扫描(哪些包下面的类使用IOC的注解) -->
<context:component-scan base-package="com.muspair.Spring.demo1"></context:component-scan>
2.5 在类上添加注解
@Component("userDAO") //相当于<bean id="userDAO" class="com.muspair.Spring.demo1.UserDaoImpl"></bean>
public class UserDaoImpl implements UserDAO{
@Override
public void save() {
System.out.println("UserDaoImpl执行了");
}
}
编写测试类
public void demo2() {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
UserDAO userDAO = (UserDAO) context.getBean("userDAO");
userDAO.save();
}
3.6注解方式设置属性的值
- 注解方式:使用注解方式,可以没有set方法
- 属性如果有set方法,需要将属性注入的注解添加到set方法上。
- 属性如果没有set方法,需要将属性注入的注解添加到属性上。
4、Spring的IOC的注解的详情
- @Component:组件
- 修饰一个类,将这个类交给Spring管理。
- 这个注解有三个衍生注解(功能类似)
- @Controller :修饰Web层的类
- @Service :修饰Service层的类
- @Repository :修饰DAO层的类
4.1属性注入的注解
- 普通属性:
- @value :设置普通属性的值
- 对象类型属性
- @Autowired:设置对象类型属性的值
- 我们习惯是按照名称完成属性注入:必须让@Autowired注解和@Qualifier一起使用完成按照名称属性注入。
- @Resource :完成对象类型的属性的注入,按照名称完成属性注入。
- @Autowired:设置对象类型属性的值
4.2Bean的其他的注解
- 生命周期相关的注解:
- @PostConstructor :初始化方法
- @PreDestroy :销毁方法
- Bean的作用范围的注解
- @scope :作用范围
- singleton :默认单例
- prototype :多例
- request
- session
- globalsession
- @scope :作用范围
3、Spring的AOP的XML开发(***)
3.1 什么是AOP
在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
AOP:面向切面编程。AOP是OOP(面向对象)的扩展和延伸,解决OOP开发遇到的问题。
3.2Spring底层的AOP实现原理
- 动态代理
- JDK动态代理 :只能对实现了接口的类产生代理
- Cglib动态代理(类似于javassist第三方代理技术):对没有实现接口的类产生代理对象。生成子类对象。
4、Spring的AOP的开发(AspectJ的XML的方式)
4.1Spring的AOP的简介
- AOP思想最早是由AOP联盟组织提出的,Spring使用这种思想最好的框架。
- Spring的AOP有自己实现的方式(非常繁琐)。AspectJ是一个AOP的框架,Spring引入AspectJ作为自身AOP的开发。
- Spring两套AOP开发方式
- Spring传统方式(弃用)
- Spring基于AspectJ的AOP的开发(使用)
4.2 AOP开发中相关术语
class UserDao{
public void save(){};
public void find(){};
public void update(){};
public void delete(){};
}
- joinpoint:连接点,可以被拦截到的点
- 增删改查的方法都可以被增强,这些方法都可以称之为是连接点。
- pointcut:切入点,真正被拦截到的点
- 在实际开发中,只对save进行方法的增强,save成为是切入点。
- advice:通知,增强。方法层面的增强
- 现在对save方法进行权限校验,权限校验的方法称为是通知。
- introduction:引介。类层面的增强
- target:被增强的对象
- 对UserDao增强,UserDao称为是目标。
- weaving:织入。将通知应用到目标应用过程
- 将权限校验的方法的代码应用到UserDao的save方法上的过程
- proxy:代理对象
- aspect:切面,多个通知和多个切入点组合。
4.3Spring的AOP入门(AspectJ的XML方式)
4.3.1 创建web项目,引入jar包
- 引入基本的开发包
- 引入aop开发的相关包
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yofh3i9q-1572753936489)(images/20191025184656068_160.png)]
4.3.2 引入Spring的配置文件
- 引入aop的约束
<?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: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">
</beans>
- 编写目标类
<!-- 配置目标对象:被增强的对象 -->
<bean id="ProductDao" class="com.musapir.spring.aop.ProductDaoImpl"></bean>
- 编写测试类
5、Spring中的通知
- 前置通知:在目标方法执行之前进行操作
- 后置通知:在目标方法执行之后进行操作
- 环绕通知:在目标方法执行之前和之后进行操作
- 异常抛出通知 :在程序出现异常的时候,进行的操作
- 最终通知 :
- 引介通知