Spring_day02
上节内容回顾
1 spring的概念 (1)核心:ioc和aop
2 spring的bean管理(xml) (1)bean实例化 (2)注入属性 - set方法 - 有参构造 (3)注入对象属性
3 ioc和di (1)ioc:控制反转,把对象创建交给spring管理 (2)di:依赖注入,创建对象过程中,向属性设置值
4 在服务器启动时候加载配置文件,创建对象 (1)ServletContext对象 (2)监听器 |
今天内容介绍
1 spring的bean管理(注解) (1)使用注解创建对象 (2)使用注解注入属性
2 AOP (1)aop概述 (2)aop底层原理 (3)aop操作相关术语 - 切入点 - 增强 - 切面
3 spring的aop操作(基于aspectj的xml方式) (1)使用表达式形式 |
Spring的bean管理(注解)
1 注解:代码中特殊标记,使用注解可以使用类、方法、属性上面,使用注解实现功能 2 写法: @注解名称(属性=属性值) |
使用注解创建对象
第一步导入jar包 (1)导入spring基本的jar包 (2)使用注解方式导入aop的jar包
第二步创建类,创建方法
第三步创建spring配置文件 (1)在xml配置文件中引入约束
(2)在spring配置文件中,开启注解扫描
第四步在创建对象所在的类上面使用注解实现
测试代码 |
创建对象的注解的总结
1 创建对象的注解有四个: (1)@Component (2)@Repository 用于对DAO实现类进行标注 (3)@Service 用于对Service实现类进行标注 (4)@Controller 用于对Controller实现类进行标注
上面四个注解都可以创建对象,目前这四个注解功能是一样的 Spring为了后续扩展
2 有注解,设置创建对象是单例或者多实例 |
使用注解注入属性(对象)
1 创建service类,创建dao类 (1)在service里面调用dao的方法 (2)在service里面得到dao对象
2 使用注解完成注入操作 第一步在service里面定义dao类型属性
第二步进行注解方式实现注入 (1)创建dao对象和service对象
(2)在service里面注入dao对象 - 在service里面dao属性上面使用注解实现 ** 使用注解@Autowired
** 使用注解@Resource |
AOP概述
1 aop:面向切面编程, (1)扩展功能不是通过修改源代码实现
2 aop采用横向抽取机制实现 (1)之前web阶段,写过baseservlet,采用不是横向机制,而是纵向机制:servlet继承baseservlet实现 (2)使用动态代理增强类里面的方法
3 aop底层使用动态代理实现 (1)有接口情况:创建接口实现类代理对象 (2)没有接口情况:创建增强方法所在类的子类代理对象 |
AOP术语
Joinpoint(连接点):所谓连接点是指那些被拦截到的点。在spring中,这些点指的是方法,因为spring只支持方法类型的连接点.
Pointcut(切入点): 实际增强的方法
Advice(通知/增强):所谓通知是指拦截到Joinpoint之后所要做的事情就是通知. 通知分为前置通知,后置通知,异常通知,最终通知,环绕通知(切面要完成的功能)
Aspect(切面): 是切入点和通知的结合 (1)把具体的逻辑用到具体的方法上面
Target(目标对象):代理的目标对象(要增强的类)
Weaving(织入):是把增强应用到目标的过程. 把advice 应用到 target的过程
Proxy(代理):一个类被AOP织入增强后,就产生一个结果代理类
Introduction(引介):引介是一种特殊的通知在不修改类代码的前提下, Introduction可以在运行期为类动态地添加一些方法或Field. |
Spring的aop操作
1 在spring中使用aspectj实现aop操作 (1)aspectj不是spring一部分,单独面向切面框架,经常和spring一起使用进行aop (2)spring2.0开始使用aspectj实现aop (3)使用aspectj导入相关的jar包
2 使用aspectj实现aop操作两种方式 (1)基于aspectj的xml配置文件 (2)基于aspectj的注解 |
基于aspectj的xml方式
Aspej表达式
1 使用aspectj的操作,基于表达式形式进行切入点配置 execution(<访问修饰符>?<返回类型><方法名>(<参数>)<异常>)
(1)对User类里面的add方法 - 第一个参数: * 表示类里面方法public、private都增强 - 添加空格,第二个参数:增强的方法所在类全路径 --- 类的全路径后面增强的方法名称 execution(* cn.itcast.User.add(..))
(2)对User类里面的所有方法 execution(* cn.itcast.User.*(..))
(3)对所有类里面的所有的方法 execution(* *.*(..)) |
具体操作(xml)
第一步导入jar包 (1) 导入基本的jar包 (2) 导入aop和aspectj的jar包
第二步创建类,创建方法 (1)创建增强的类,增强的方法 在 Book类里面add方法之前执行MyBook类里面before1的方法
第三步在spring配置文件中进行配置 (1)在spring配置文件中引入aop约束 (2)配置两个类对象 (3)配置aop操作 - 配置切入点 - 配置切面 |
演示其他通知类型
(1)环绕通知 |
Log4j操作
1 使用log4j,可以查看到当前运行程序中对象创建过程,可以看到更详细的信息 (1)使用在调试程序中
2 使用 (1)导入log4j的jar包 (2)复制log4j配置文件,复制到src下面
3 设置日志的输出级别 (1)info、debug、error |
Ioc配置文件和注解混合使用
1 使用配置文件方式创建对象 2 使用注解方式注入属性
3 具体例子 (1)创建对象,使用配置文件实现 (2)在service里面注入dao对象,使用注解方式 |
|
演示spring整合web项目
1 action调用service,service调用到 (1)action多实例对象,每次访问action都创建对象 功能可以实现,但是性能很低
2 解决方案: (1)使用ServletContext对象 (2)监听器 在服务器启动时候创建ServletContext对象,使用监听器可以知道ServletContext对象在什么时候创建,加载配置文件,创建配置的对象,把创建对象放到servletcontext里面
3 在spring里面不需要我们写这些操作,进行封装 (1)在spring封装了一个监听器,只需要配置监听器就可以了
4 使用spring里面的监听器时候,需要导入jar包,这个jar包用于整合web项目 5 启动服务器,出现异常 (1)服务器启动时候,默认到WEB-INF下面找名称是applicationContext配置文件
6 手动配置找哪个spring配置文件 |