1、后处理 bean 对一个bean生效
2、注解和xml混合使用
a、将所有的 bean 都配置在 xml 中,<bean id="" class=""
b、将所有的依赖都使用注解,@Autowired,默认不生效。为了生效,需要在xml中配置:<context:annotation-config,如图:
上图中,两个注解一般不一起使用,“注解1”扫描含有注解(@Component等)类,注入注解也会自动生效。“注解2”只在xml和注解(注入)混合使用时,使注入注解生效。
3、AOP
3.1、AOP介绍
AOP(Aspect Oriented Programming),面向切面编程。通过预编译方式和运动期动态代理实现程序功能的统一维护的一种技术。是OOP(面向对象编程)的延续,采取横向抽取机制,取代了传统纵向继承体系重复性代码。如图:
- 经典应用:事务管理、性能监视、安全检查、缓存、日志等。
- Spring AOP使用纯Java实现,不需要专门的编译过程和类加载器,在运行期通过代理方式向目标类织入增强代码。
AOP实现原理
- AOP底层将采用代理机制进行实现。
- 接口 + 实现类:spring采用 jdk的动态代理Proxy
- 实现类:spring采用 cglib字节码增强
AOP术语【掌握】
target:目标类,需要被代理的类。例如:UserService
Joinpoint(连接点):是指那些可能被拦截到的方法。例如:所有的方法
PointCut(切入点):已经被增强的连接点。例如 :addUser()
advice(通知/增强):增强代码。例如:after、before
Weaving(织入):是指把增强advice应用到目标对象target来创建新的代理对象的过程。
Proxy(代理类)
Aspect(切面):是切入点pointcut和通知advice的结合
3.2、手动方式
一、Jdk动态代理
Jdk动态代理,是对“装饰者”设计模式的简化。使用前提:必须有接口。
1、目标类:接口 + 实现类
2、切面类:用于存放通知,MyAspect
3、工厂类:编写工厂生成代理
4、测试
目标类
切面类
工厂
测试
运行结果
二、CGLIB字节码增强
- 没有接口,只有实现类
- 采用字节码增强框架 cglib,在运行时创建目标类的子类,从而对目标类进行增强
- 导入jar包:自己导包(了解)
工厂类
测试
3.3、AOP联盟通知类型
3.4、spring编写代理:半自动
- 让spring 创建代理对象,从spring 容器中手动的获取代理对象
- 导入jar包:
核心:4 + 1
AOP:AOP联盟(规范)、spring-aop(实现)
目标类
切面类
目标类和切面类写好后,需要把切面类和目标类融合在一起,这件事交给spring来完成。之前是从工厂中拿数据,现在要从配置文件中取数据。
spring配置
测试
3.5、spring aop编程:全自动【掌握】
- 从spring容器中获得目标类,如果配置aop,spring将自动生成代理。
- 要确定目标类,aspectj 切入点表达式,导入jar包
spring配置
测试
测试拿到的是目标类,而不再是代理类。
4、AspectJ
4.1、介绍
- AspectJ是一个基于Java语言的AOP框架
- Spring2.0以后新增了对AspectJ切点表达式支持
- @AspectJ是AspectJ1.5新增功能,通过 JDK5注解技术,允许直接在Bean类中定义切面。新版本Spring框架,建议使用AspectJ方式来开发AOP。
- 主要用途:自定义开发
4.2、切入点表达式【掌握】
4.3、AspectJ通知类型
- aop联盟定义的通知类型,具有特性接口,必须实现,从而确定方法名称
- AspectJ的通知类型,只定义类型名称以及方法格式
- 个数:6种。知道5种,掌握1种。
导入jar包:4个(aop联盟规范、spring aop实现、aspect规范、spring aspect实现)
4.4、基于xml
目标类:接口 + 实现
切面类:编写多个通知,采用aspectj 通知名称任意(方法名任意)
aop编程,将通知应用到目标类
测试
切面类
spring配置
4.5、基于注解
替换bean
扫描
替换aop
- 必须进行aspectj 自动代理
- 声明切面
- 替换前置通知
- 替换公共切入点
- 替换后置通知
- 替换环绕
- 替换抛出异常
切面类
spring配置
aop注解总结
5、JdbcTemplate
- spring 提供的用于操作JDBC工具类,类似:DBUtils
- 依赖 连接池 DataSource(数据源)
5.1、环境搭建
创建表
mysql中输入以下代码,就可以创建一个表。
导入jar包
javabean
导入set、get方法
5.2、使用API(了解)
5.3、配置DBCP
Spring配置
测试
5.4、配置C3P0
其他的和DBCP一样。如果把5.3中的update方法改成findAll方法,则代码如图:
测试类
目标类
5.5、使用JdbcDaoSupport
dao层
spring配置文件
源码分析
5.6、配置properties文件
properties文件
spring配置