spring中bean的生命周期
1.调用Bean的无参构造器构造对象
2.调用Bean的setter方法注入赋值
3.调用Bean的init-method方法初始化
4.调用Bean方法执行要完成的业务逻辑
5.销毁Bean,实际上是把Bean放回到IOC容器中
IOC容器管理Bean的机制
IOC容器默认不是延迟加载,不使用任何一个Bean,对象依然会被创建
使用lazy-init标签可以实现延迟初始化(对于一些不常用的Bean)
开发中数据库相关
实际开发中,是没有删除业务的,sql语句不应出现delete的物理删除
删除通过update语句实现逻辑删除,所有的数据库表格都需要有这样的一些字段
update_time:更新时间,用到desc(降序)保证最新的数据放在前面
version:版本号,用来实现乐观锁,在高并发的修改操作中保证数据一致性
status:状态,0表示删除,1表示存在(select * from user where id =1 and status = 1)
AOP(面向切面编程)
在开发中主要来解决日志,事务,权限等功能
在不改变原有的业务代码基础上,通过一些额外功能代理所需的需求(登录时业务逻辑不改变,判断是否是会员)
AOP是对OOP(面向对象编程)的补充完善
传统方法是每次有新的业务,都要写在每个类上
AOP方案是程序自动加载统一的代码,是通过对Bean对象代理完成
通知(Advice):增强处理*
需要实现的功能,定义了在某个切入点执行的操作,根据切入点的不同分为四个类型
连接点(Join Point)
程序执行的特定一个点,spring允许通知的地方
切入点(PointCut)*
在连接点的基础上来定义切入点,定义了在何处使用通知(织入),需要通过指定的表达式来选择方法或者类的切入点
切面(Aspect)
通知与切入点的结合(干什么,何时干)
引入
动态地为目标对象添加新的方法或接口
目标(target)
通知的对象
织入(Weaing)
把切面应用到目标对象,代理对象的过程
AOP需要引入的依赖
<!-- AOP --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.9.6</version> </dependency>
AOP的通知类型
1.前置通知:在目标方法执行之前
2.后置通知:在目标方法执行之后,无论目标方法是否抛出异常都会执行,类似finally
3.异常通知:在目标方法抛出异常下时,类似catch
4.返回通知:在目标方法正常返回值后,正常执行,如果方法抛出异常,执行异常通知,类似try
5.环绕通知:综上四种通知,try catch finally的结合,与上三种互斥使用
补充:
异常通知:参数为Throwbable类型,可以取到对应的异常信息
返回通知:参数为Object类型,可以取到对应的返回值对象
使用注解配置AOP
@Aspect 标记当前类是一个切面
@Component 把当前类放到IOC容器
需要在application.xml中开启AOP的自动代理<aop:aspectj-autoproxy />
SSM整合
springMVC:Controller,接受前台的请求,给出响应
spring:连接数据库,IOC容器管理bean,AOP管理事务,润滑剂
Mybatis:持久层(Dao层),操作数据库
spring框架配置Bean的方式
1.如果不使用注解版,所有bean的配置都将在application.xml文件下配置
2.如果使用注解,首先必须在xml下配置注解扫描,并且仔细看好路径和类型是否匹配上