Spring随笔记录

6 篇文章 0 订阅
1 篇文章 0 订阅

核心:

  • IOC
    • 控制反转
    • 将bean创建交由spring(BeanFactory)管理
    • 解耦、削减bean之间依赖关系
  • AOP
    • 面向切面编程
    • 使用动态代理

核心容器:

  • ApplicationContext
    • 读取配置文件之后立即加载对象
    • 单例对象适用
  • BeanFactory
    • 延迟加载对象
    • 多例对象适用

ApplicationContext的实现:

  • ClassPathXmlApplicationContext
    • 加载类路径下的配置文件(xml)
  • FileSystemApplicationContext
    • 加载磁盘下任意路径下的文件
  • AnnotationConfigApplicationContext
    • 加载被@Configuration注解过的类

主要方法:

  • getBean(…),获取bean对象
    在这里插入图片描述

Bean的生命周期:

  • 单例Bean
    • 容器创建时创建,容器销毁时销毁,贯穿整个容器生命周期
  • 多例Bean
    • 从对象创建到被GC回收

注入bean(xml配置):

  • 构造函数注入
    • <constructor-arg></……> 指定构造方法参数
      • type:全限定类名
      • index:参数索引(从0开始)
      • name:参数名称
      • value:参数值(简单类型)
      • ref:引用bean作为参数值(复杂类型)
  • set注入
    • <property></……>
      • name:set方法去掉set之后的名称
      • value:参数值值(简单类型)
      • ref:引用bean作为参数值(复杂类型)

注入bean(注解配置):

  • 注入到IOC容器中:
    • @Component(通用)
    • @Controller(controller层Bean使用)
    • @Service(service层Bean使用)
    • @Repository(dao层Bean使用)
    • @Bean(作用方法上,方法写在配置类中,将返回值注入到IOC容器)
    • @Scope(指定作用域)
    • @PreConstruct(作用方法上,指定bean创建时调用)
    • @PreDestory(作用方法上,指定bean销毁时调用)
  • 注入Bean到对象
    • @AutoWired(根据类型注入)
    • @Qualifier(配合@AutoWired使用,指定bean名称)
    • @Resource(根据名注入)

其他一些注解:

  • @Configuration(声明是个配置类,此类和xml功能一样)
  • @ComponentScan(指定spring创建容器时扫描的包,在此配置下的包中的注解才会被扫描)
  • @Import(在配置类中引入其他配置类)
  • @Value(将配置文件中的值赋值给被修饰的变量)
  • @PropertySource(指定使用的properties文件)
  • @RunWith(SpringJUnit4ClassRunner.class)(使用Spring与junit的整合)(注解不是spring的,里面的class是spring的)
  • @ContextConfiguration(指定使用的配置文件/配置类)
  • @Transaction(事务)
  • ……

AOP术语:

  • Joinpoint(连接点):可以被增强的方法
  • Pointcut(切入点):实际被增强的方法
  • Advice(通知/增强):对方法增强的内容
    • 前置通知:切入点方法执行之前执行
    • 后置通知:切入点方法正常直接结束后执行
    • 异常通知:切入点方法执行异常执行
    • 最终通知:方法结束后执行,无论方法执行正常、异常与否
    • 环绕通知:环绕切入点方法前后执行,通知代码中需手动调用切入点方法
  • Target(目标对象):被代理对象
  • Weaving(织入):将增强引用到目标对象创建代理对象的过程
  • Aspect(切面):切入点和通知的结合

AOP配置:

  • 基于xml
    • <aop:config>配置aop的父标签
    • <aop:aspect>配置aop
    • <aop:before>配置前置通知
    • <aop:after-returning>配置后置通知
    • <aop:after-throwing>配置异常通知
    • <aop:after>配置最终通知
    • ……

切入点表达式:
execution(访问修饰符 返回值类型 包名.类名.方法名(参数列表))
修饰符可以省略,其他的可以使用通配符

  • 基于注解
    • @Before(前置通知)
    • @AfterReturnning(后置通知)
    • @AfterThrowing(异常通知)
    • @After(最终通知)
    • @Around(环绕通知)
    • @Aspect(表示是个切面类)
    • @Pointcut(定义切入点表达式,作用在方法上,通知注解的值为被此注解修饰的方法名())
    • @EnableAspectJAutoProxy(是啥呢)

都是 org.aspectj.lang.annotation 包中

声明式事务:
使用@Transaction注解

  • value:transactionManager别名
  • transactionManager:可用于确定目标事务管理器
  • label: 标签可能仅用于描述目的或映射到预定义的事务管理器特定选项
  • propagation:事务的传播行为
    • Propagation.REQUIRED:如果有事务, 那么加入事务, 没有的话新建一个(默认)
    • Propagation.SUPPORTS:如果有事务,继续使用,如果没有,那就不用事务
    • Propagation.MANDATORY:支持当前事务,如果不存在则抛出异常
    • Propagation.REQUIRES_NEW:创建一个新事务,如果当前存在事务,则暂停当前事务
    • Propagation.NOT_SUPPORTED:以非事务方式执行,如果存在则暂停当前事务
    • Propagation.NEVER:以非事务方式执行,如果存在事务则抛出异常
    • Propagation.NESTED:如果当前事务存在,则在嵌套事务中执行,否则行为类似于REQUIRED
  • isolation:事务的隔离级别,默认使用底层数据存储的隔离级别
    • Isolation.READ_UNCOMMITTED
      • 读未提交
      • 脏读√、不可重复读√、幻读√
    • Isolation.READ_COMMITTED
      • 读已提交
      • 脏读×、不可重复读√、幻读√
    • Isolation.REPEATABLE_READ
      • 可重复读
      • 脏读×、不可重复读×、幻读√
    • Isolation.SERIALIZABLE
      • 串行化
      • 脏读×、不可重复读×、幻读×
    • timeout:事务超时时间、秒为单位、数字
    • timeoutString:事务超时时间、秒为单位、字符串
    • readOnly:设置当前为只读事务
    • rollbackFor:抛出某个/些异常时候回滚,值为异常类class
    • rollbackForClassName:抛出某个/些异常时候回滚,值为异常名
    • noRollbackFor:抛出某个/些异常时候不回滚,值为异常类class
    • noRollbackForClassName:抛出某个/些异常时候不回滚,值为异常名
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值