spring的bean管理(注解)
注解介绍:
1:代码里面特殊的标记,使用注解可以完成功能
2:注解写法@注解名称(属性名称=属性值)
(1)使用注解创建对象
(2)使用注解注入属性
(3)xml和注解方式混合使用
3:可以使用在类上面,方法上面,属性上面
spring注解开发准备
1.导入基本jar包
2.导入aop的jar包
3.创建类,创建方法
4.创建spring配置文件,引入约束
(1)第一天做ioc基本功能,引入约束beans
(2)做spring的ioc注解开发,引入新的约束
注解创建对象
1.实例代码:
@Component(value="user")//相当于在bean.xml中写public class User { public void add() { System.out.println("user...add"); }}
2.创建对象有四个注解
spring提供了@Component的三种衍生注解(功能目前是一致的) @Component(value="user")@Controller(value="user")//web层@Service(value="user") //业务层@Repository(value="user")//持久层//这四者都一样,只是为以后的扩展留后路,本省用途清晰,spring在后续版本会对其增强
四个注解功能都是一样的,都创建对象(spring给自己留的后路,为后续版本做扩展,了解一下即可)
3.创建对象是一个单实例还是多实例
注解注入属性
1.创建一个service类,创建dao类,在service里面得到dao对象
(1)创建dao和service对象
(2)在service定义一个dao类型属性
注入属性第二个注解@Resource
配置文件和注解混合使用
1.创建对象操作使用配置文件方式实现
2.注入属性的操作使用注解方式实现
resource里面name名称是xml中的id值
AOP
aop概述
1.aop:面向切面编程,扩展一个功能不通过修改源代码实现
2.aop采取横向抽取机制,取代了传统的纵向继承体系重复性代码(太官方了)
aop底层原理
1.画图分析纵向机制原理
2.画图分析横向机制原理
aop操作相关术语
Pointcut(切入点):类里面可以被增强的方法,这些方法被称为连接点
切入点:在类里面可以有很多的方法被增强,比如实际操作中,只是增强了类里面add方法
和update方法,实际增强的方法称为切入点
Advice(通知/增强):曾强的逻辑,比如扩展一个日志的功能,这个日志功能称为增强
前置通知:在方法之前执行
后置通知:在方法之后执行
异常通知:方法出现异常
最终通知:在后置之后执行
环绕通知:方法之前和之后执行
aspect(切面):把增强应用到具体的方法上面,过程称为切面
把曾强用到切入点的过程
spring的aop操作(基于aspectj的xml方式)
1.在我们的spring里面进行aop操作,使用aspectj实现
(1)aspectj不是spring一部分,和spring一起使用进行aop操作
(2)Spring2.0以后新增了对aspectj支持
2.使用aspectj实现aop有两种方式
(1)基于aspectj的xml配置
(2)基于aspectj的注解方式
Aop操作准备
1.出了导入基本的jar包之外,还要导入相关的jar包
2.创建一个spring核心配置文件,导入aop的一个约束
使用表达式来配置切入点
1.切入点:实际增强的方法
2.常用的表达式
execution(<访问修饰符>?<返回类型><方法名>(<参数>)<异常>)
(1)execution(*cn.ismy.aop.Book.add())//对此方法的add进行增强
(2)execution(*cn.ismy.aop.Book.*)//对类中所有方法进行增强
(3)execution(* *.*)//所有类所有方法进行增强
(4)匹配所有save开头的方法·execution(*save*(....))
Aspectj的aop操作
1.配置两个方法的路径:
2.给方法配置增强(此处不是很理解)
log4j介绍
1.通过log4j可以看到更详细信息
(1)经常使用log4j查看日志
log4j.properties文件路径:hibernate-release-5.0.12.Final\project\documentation\src\test\resources
2.使用
(1)导入log4j的jar包
(2)复制log4j配置文件,复制到src下面
(3)设置日志级别
info:是基本信息
debug:更详细信息
spring整合web项目演示
1.先演示问题
(1)action调用service,service调用dao
每次访问action时候,都会加载spring配置文件
(2)解决方案
1.在服务器启动的时候,创建对象加载配置文件
2.底层使用监听器,ServletContext对象,把压力交给服务器
(3)在spring里面不需要我们自己写代码实现,帮封装
1.封装了一个监听器,只需要配置监听器就可以了
2.配置监听器之前做事情,导入spring整合web项目jar包
spring-web.jar包
3.加载spring配置文件位置
运行之后有个问题,默认的位置是applicationContext.xml,因此我们要指定加载位置
最后配置后的结果