考核小结之都不会

又一次考核,又一次觉得自己啥都不会。这次学长问我了一些学了但是没记住的问题。
一、@Autowired 与@Resource的区别:

@Autowired是属于spring的注解,需要导入包org.springframework.beans.factory.annotation.Autowired。而@Resource是属于J2EE的,需要导入包javax.annotation.Resource。

@Autowired 是根据 类型 (byType)注入的 , 然后当找到type类型的bean时,如果发现有不唯一,会再去根据name去找bean注入(可以通过起名字后用@Qualifire(“name”)的方式绑定)

@Resource 默认是 根据 名字(byName)注入的 ,先根据名字查找byName,要是bean容器里没有该名字的@Service,那么就默认把名字首字母小写作为名字,然后就根据byType类型去找。我们可以绑定Service名字直接@Resource(“name”)

因为@Autowired是属于第三方spring的,@Resource是属于java的,使用@Resource可以减少与spring的耦合。

二、springboot中bean的方式

1.使用@Component,@Service,@Controler,@Repository,@Service等注解
2.使用@Bean注解配合@Configuration注解
@Bean作用在方法上面,通常可以将该方法的返回值作为Bean注入到spring的容器中,每个bean都有一个name值,在Configuration里面,@Bean的name就是方法名
3.使用注解@Import,也会创建对象并注入容器中
4.使用ImportSelector或者ImportBeanDefinitionRegistrar接口,配合@Import实现。
5.手动注入Bean容器,有些场景下需要代码动态注入,以上方式都不适用。这时就需要创建 对象手动注入。通过DefaultListableBeanFactory注入。

三、springboot的事务注解
首先要开启事务管理,在启动类上加上注解@EnableTransactionManagement。SpringBoot项目会自动配置一个 DataSourceTransactionManager,所以我们只需在方法(或者类)加上 @Transactional 注解,就自动纳入 Spring 的事务管理了
注解的详细用法:

1.指定回滚

@Transactional(rollbackFor=Exception.class) //出现该异常会回滚

2.指定不回滚

@Transactional(noRollbackFor=Exception.class)//出现该异常不回滚

3.如果有事务,那么加入事务,没有的话新建一个(不写的情况下)

@Transactional(propagation=Propagation.REQUIRED) 

4.容器不为这个方法开启事务

@Transactional(propagation=Propagation.NOT_SUPPORTED)

5.不管是否存在事务,都创建一个新的事务,原来的挂起,新的执行完毕,继续执行老的事务

@Transactional(propagation=Propagation.REQUIRES_NEW) 

6.必须在一个已有的事务中执行,否则抛出异常

@Transactional(propagation=Propagation.MANDATORY)

7.必须在一个没有的事务中执行,否则抛出异常(与Propagation.MANDATORY相反)

 @Transactional(propagation=Propagation.NEVER) 

8.如果其他bean调用这个方法,在其他bean中声明事务,那就用事务.如果其他bean没有声明事务,那就不用事务.(外部调用无法使用被调用方法的事务)

9.readOnly=true只读,不能更新,删除

@Transactional (propagation = Propagation.REQUIRED,readOnly=true)

10.设置超时时间

@Transactional (propagation = Propagation.REQUIRED,timeout=30)

11.设置数据库隔离级别

@Transactional (propagation = Propagation.REQUIRED,isolation=Isolation.DEFAULT)

关于事务管理器,不管是JPA还是JDBC等都实现自接口 PlatformTransactionManager 如果你添加的是 spring-boot-starter-jdbc 依赖,框架会默认注入 DataSourceTransactionManager 实例。如果你添加的是 spring-boot-starter-data-jpa 依赖,框架会默认注入 JpaTransactionManager 实例。

springboot使用@Transactional注解失效的场景:springboot使用@Transactional注解失效的场景

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值