文章目录
- 一. spring的bean管理(注解方式)
- 1. 注解介绍
- 2. Spring注解开发准备工作
- 1. 导入jar包
- 2. 创建类,创建方法
- 3. 创建spring配置文件,引入约束
- 4 配置开启注解扫描
- 3. 注解创建对象
- (1) 在创建对象的类上面使用注解实现
- (2) Spring创建对象有四个注解
- 1. @Component:组件(作用在类上)
- 2. @Controller :WEB 层
- 3. @Service :业务层
- 4. @Repository :持久层
- (3). 注解配置对象是单实例还是多实例(Bean 的作用范围的注解)
- (4). Bean 的生命周期的配置
- 4. 注解注入属性(使用注解注入的方式,可以不用提供 set 方法)
- (1). @Value :用于注入普通类型.
- (2). @Autowired :自动装配:
- (3). @Qualifier:强制使用名称注入.
- (4). @Resource
- 5. Spring 的 Bean 管理的方式的比较
- 二. AOP概述
- 1. 什么是 AOP
- 2. 为什么学习 AOP
- 3. Spring 的 AOP 的由来
- 4. AOP底层实现
- 三. spring的AOP操作(基于AspectJ 的 AOP开发)
- 1. AOP 的开发中的相关术语:
- 四. Spring 使用AspectJ进行AOP的开发:XML的方式(理解)
- 1. 什么是AspectJ
- (1). 在spring里面进行aop操作,使用aspectj实现
- (2). 使用aspectj实现aop有两种方式
- 1. 基于aspectj的xml配置
- 2. 基于aspectj的注解方式
- 2. Aop操作准备
- (1). 除了导入基本的jar包之外,还需要导入aop相关的jar包
- (2). 创建spring核心配置文件,导入aop的约束
- 3. 使用表达式配置切入点
- (1). 切入点
- (2). execution(表达式)
- 4. Aspectj的aop操作
- (1). 编写目标类
- (2). 目标类的配置
- (3). 进行测试
- 五. 基于AspectJ的注解AOP操作(会用)
- 1. 准备工作
- 2. 编写代码
- 3. 配置spring核心文件
- 4. 进行测试
- 六. log4j介绍
- 1 通过log4j可以看到程序运行过程中更详细的信息
- 2 使用log4j
- 3. 设置日志级别
- 七. spring整合web项目演示
- 1. 出现的问题
- 2. 解决方案:
- 3 在spring里面不需要我们自己写代码实现,帮我们封装
- (1)封装了一个监听器,只需要 配置监听器 就可以了
- (2)配置监听器之前做事情:导入spring整合web项目jar包
- (3)指定加载spring配置文件位置
一. spring的bean管理(注解方式)
1. 注解介绍
- 1 代码里面特殊标记,使用注解可以完成功能
- 2 注解写法 @注解名称(属性名称=属性值)
- 3 注解使用在类上面,方法上面 和 属性上面
2. Spring注解开发准备工作
1. 导入jar包
基本jar包
导入aop的jar包,在 Spring 的注解的 AOP 中需要引入 spring-aop 的 jar 包。
2. 创建类,创建方法
3. 创建spring配置文件,引入约束
- 第一天做ioc基本功能,引入约束beans
- 做spring的ioc注解开发,引入新的约束
4 配置开启注解扫描
3. 注解创建对象
(1) 在创建对象的类上面使用注解实现
编写测试类:进行测试输出
(2) Spring创建对象有四个注解
目前这四个注解功能是一样的,都创建对象
1. @Component:组件(作用在类上)
2. @Controller :WEB 层
3. @Service :业务层
4. @Repository :持久层
(3). 注解配置对象是单实例还是多实例(Bean 的作用范围的注解)
@Scope:
- singleton:单例
- prototype:多例
(4). Bean 的生命周期的配置
- @PostConstruct :相当于 init-method
- @PreDestroy :相当于 destroy-method
4. 注解注入属性(使用注解注入的方式,可以不用提供 set 方法)
(1). @Value :用于注入普通类型.
(2). @Autowired :自动装配:
- 默认按类型进行装配
- 按名称注入:
(3). @Qualifier:强制使用名称注入.
(4). @Resource
相当于: @Autowired 和@Qualifier 一起使用.
5. Spring 的 Bean 管理的方式的比较
XML 和注解比较:
- XML :结构清晰.
- 注解 :开发方便.(属性注入.)
xml和注解方式混合使用
- Bean 有 XML 配置.但是使用的属性使用注解注入.
- 创建对象使用配置文件,注入属性使用注解
1. 什么是 AOP
面向切面(方面)编程:扩展功能不修改源代码实现
- AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码
2. 为什么学习 AOP
对程序进行增强:不修改源码的情况下.
- AOP 可以进行权限校验,日志记录,性能监控,事务控制
3. Spring 的 AOP 的由来
- AOP 最早由 AOP 联盟的组织提出的,制定了一套规范.Spring 将 AOP 思想引入到框架中,必须遵守 AOP 联盟的规范
4. AOP底层实现
代理机制:Spring 的 AOP 的底层用到两种代理机制:
JDK 的动态代理 :针对实现了接口的类产生代理.
Cglib 的动态代理 :针对没有实现接口的类产生代理. 应用的是底层的字节码增强的技术生成当前类的子类对象
1. AOP 的开发中的相关术语:
- Joinpoint(连接点):所谓连接点是指那些被拦截到的点。在 spring 中,这些点指的是方法,因为 spring 只支持方法类型的连接点.
- Pointcut(切入点):所谓切入点是指我们要对哪些 Joinpoint 进行拦截的定义.
- Advice(通知/增强):所谓通知是指拦截到 Joinpoint 之后所要做的事情就是通知.通知分为前置通知,后置通知,异常通知,最终通知,环绕通知(切面要完成的功能)
- Introduction(引介):引介是一种特殊的通知在不修改类代码的前提下,Introduction 可以在运行期为类动态地添加一些方法或 Field.
- Target(目标对象):代理的目标对象
- Weaving(织入):是指把增强应用到目标对象来创建新的代理对象的过程.
- spring 采用动态代理织入,而 AspectJ 采用编译期织入和类装在期织入
- Proxy(代理):一个类被 AOP 织入增强后,就产生一个结果代理类
- Aspect(切面): 是切入点和通知(引介)的结合
1. 什么是AspectJ
(1). 在spring里面进行aop操作,使用aspectj实现
- aspectj不是spring一部分,和spring一起使用进行aop操作
- Spring2.0以后新增了对AspectJ支持
- AspectJ是一个面向切面的框架,它扩展了Java语言,AspectJ定义了AOP语法,所以它有一个专门的编译器用来生成遵循Java字节编码规范的Class文件
(2). 使用aspectj实现aop有两种方式
1. 基于aspectj的xml配置
2. 基于aspectj的注解方式
2. Aop操作准备
(1). 除了导入基本的jar包之外,还需要导入aop相关的jar包
(2). 创建spring核心配置文件,导入aop的约束
引入 AOP 约束:
3. 使用表达式配置切入点
(1). 切入点
实际增强的方法
(2). execution(表达式)
表达式 : [方法访问修饰符] 方法返回值 包名.类名.方法名(方法的参数)
- 第一个* 可以用public替换
- 写法一:execution(* com.pudding.spring.Book.add(…))对Book类里面的add方法进行增强
- 写法二:execution(* com.pudding.spring.Book.*(…))对Book类里面的所有方法进行增强
- 写法三:execution(* .(…))对所有类里面的所有方法进行增强
- 匹配所有save开头的方法 execution(* save*(…))
4. Aspectj的aop操作
(1). 编写目标类
(2). 目标类的配置
(3). 进行测试
1. 准备工作
导包
导入aop约束
2. 编写代码
3. 配置spring核心文件
4. 进行测试
六. log4j介绍1 通过log4j可以看到程序运行过程中更详细的信息
- 经常使用log4j查看日志
2 使用log4j
- 导入log4j的jar包
- 复制log4j的配置文件,复制到src下面
3. 设置日志级别
- info:看到基本信息
- debug:看到更详细信息
1. 出现的问题
(1)action调用service,service调用dao
访问action的时候,这个UserAction对象会通过struts.xml被创建,而在UserAction中每次都要通过上面标记的那部分代码得到userService对象。
每次访问action时候,都会加载spring配置文件,功能上没有问题,但是性能会很低
2. 解决方案:
(1)在服务器启动时候,创建对象加载配置文件
(2)底层使用监听器、ServletContext对象
3 在spring里面不需要我们自己写代码实现,帮我们封装
(1)封装了一个监听器,只需要 配置监听器 就可以了
(2)配置监听器之前做事情:导入spring整合web项目jar包
(3)指定加载spring配置文件位置
如果没有指定:就会报错:
出现异常时候,第一行 异常信息
下面 cased by :