首页 > 其他分享 >67. @Transactional的类注入失败

67. @Transactional的类注入失败

时间:2023-07-06 22:32:19浏览次数:42  
标签:Spring Transactional Boot 升级 test 67 MyBatis 注解 注入


【从零开始学习SpirngBoot—常见异常汇总】

       Spring的代理模式有两种:java自带的动态代理模式和cglib代理模式,cglib代码模式适用于没有接口的类,而java自带适用于接口类,默认情况下spring boot或者spring 采用接口类的代理模式,如果我们是基于接口编程的,是不会发生问题的,但是如果我们定义了一个class类继承Base类的时候就会出问题了。如下代码就会出现问题:

基本接口类com.kfit.demo.test.IBaseTestService:

package com.kfit.demo.test;
 
/**
 *定义基本接口类;
 *@author Angel(QQ:412887952;QQ交流群:193341332)
 *@version v.0.1
 *@date 2016年7月25日下午10:20:45
 */
publicinterface IBaseTestService{
    publicvoid sayHello();
}
 
基本接口实现com.kfit.demo.test.BaseTestService:
package com.kfit.demo.test;
 
importjavax.transaction.Transactional;
 
/**
 *基本接口实现
 *@author Angel(QQ:412887952;QQ交流群:193341332)
 *@version v.0.1
 *@date 2016年7月25日下午10:21:41
 */
publicclass BaseTestServiceimplementsIBaseTestService{
 
 @Transactional
    publicvoid sayHello() {
       System.out.println("BaseTestService.sayHello()");
    }
}
 
测试服务类com.kfit.demo.test.TestService:
package com.kfit.demo.test;
 
importorg.springframework.stereotype.Service;
 
/**
 *测试类;
 *@author Angel(QQ:412887952;QQ交流群:193341332)
 *@version v.0.1
 *@date 2016年7月25日下午10:23:11
 */
@Service
publicclass TestServiceextends BaseTestService{
    
}
 
测试类引用:
@Autowired
privateTestServicetestService;
 
调用:testService.sayHello();
 
执行以上我们编写的代码,是会抛出异常的,无法找到TestService实体类。
       那么这个就是由于Spring Boot默认使用了Java自带的动态代理模式(接口代理)。
我们要怎么修改呢?有两种方案遵循接口模式编程:
第一种方案:将上面的TestService修改为接口,然后添加一个TestService的实现类。代码如下:
com.kfit.demo.test.TestService 修改为接口,代码如下:
package com.kfit.demo.test;
 
/**
 *测试类;
 *@author Angel(QQ:412887952;QQ交流群:193341332)
 *@version v.0.1
 *@date 2016年7月25日下午10:23:11
 */
publicinterface TestServiceextendsIBaseTestService{
    
}
 
TestService接口的实现类com.kfit.demo.test.TestServiceImpl:
package com.kfit.demo.test;
 
importorg.springframework.stereotype.Service;
 
/**
 *测试类;
 *@author Angel(QQ:412887952;QQ交流群:193341332)
 *@version v.0.1
 *@date 2016年7月25日下午10:23:11
 */
@Service
publicclassTestServiceImpl extends BaseTestServiceimplements TestService{
    
}
 
在运行测试代码,完美运行。
 
第二种方法就是修改SpringBoot的默认动态代理模式,我们刚才说了默认的是Java的动态代理模式,我们只需要修改为CGLIB动态代码模式即可,只需要在application.properties加入如下配置:
#开启CGLIB动态代理模式
spring.aop.proxy-target-class=true
重新运行测试代码,也可完美运行。





 

网易云课堂视频最新更新

第十一章 Spring Boot 日志

1、spring boot日志—理论

2、Spring Boot日志-logback

3、Spring Boot日志-log4j2

第十二章 Spring Boot 知识点2

1、spring boot 服务配置和部署

2、Spring Boot 定制URL匹配规则

 

 

历史章节:

 

第一章 快速开始

1、Spring Boot之Hello World

2、Spring Boot之Hello World访问404

 

第二章 Spring Boot之JSON

1、spring boot返回json数据

2、Spring Boot完美使用FastJson解析JSON数据

 

第三章 Spring Boot热部署

1、Spring Boot热部署(springloader)

2、springboot + devtools(热部署)

 

第四章 Spring Boot数据库

1、Spring Boot JPA/Hibernate/Spring Data概念

2、Spring Boot JPA-Hibernate

3、Spring Boot Spring Data JPA介绍

4、Spring Boot JdbcTemplate

5、Spring Boot集成MyBatis

 

第五章 web开发

1、全局异常捕捉

2、配置server信息

3、spring boot使用thymeleaf

4、Spring Boot 使用freemarker

5、Spring Boot添加JSP支持

 

第六章 定时任务

1、Spring Boot定时任务

2、Spring Boot 定时任务升级篇(动态修改cron参数)

3、Spring Boot 定时任务升级篇(动态添加修改删除定时任务)

4、Spring Boot 定时任务升级篇(集群/分布式下的定时任务说明)

5、Spring Boot Quartz介绍

6、Spring Boot Quartz在Java Project中使用

7、Spring Boot 集成Quartz普通使用

8、Spring Boot 集成Quartz升级版

9、Spring Boot 集成Quartz二次升级版

10、Spring Boot 集成Quartz-Job如何自动注入Spring容器托管的对象

 

第七章 Spring Boot MyBatis升级篇

1、Spring Boot MyBatis升级篇-注解

2、Spring Boot MyBatis升级篇-注解-自增ID

3、Spring Boot MyBatis升级篇-注解-增删改查

4、Spring Boot MyBatis升级篇-注解-分页查询

5、Spring Boot MyBatis升级篇-注解-分页PageHelper不生效

6、Spring Boot MyBatis升级篇-注解- mybatic insert异常:BindingException: Parameter 'name' not found

7、Spring Boot MyBatis升级篇-注解- #和$符号特别篇

8、Spring Boot MyBatis升级篇-注解-@Result

9、Spring Boot MyBatis升级篇-注解-动态SQL(if test)-方案一:<script>

10、Spring Boot MyBatis升级篇-注解-动态SQL(if test)-方案二:@Provider

11、Spring Boot MyBatis升级篇-注解-动态SQL-参数问题

12、Spring Boot MyBatis升级篇-注解-特别篇:@MapperScan和@Mapper

13、Spring Boot MyBatis升级篇-XML

14、Spring Boot MyBatis升级篇-XML-自增ID

15、Spring Boot MyBatis升级篇-XML-增删改查

16、Spring Boot MyBatis升级篇-XML-分页查询

17、Spring Boot MyBatis升级篇-XML-分页PageHelper不生效

18、Spring Boot MyBatis升级篇-XML-动态SQL(if test)

19、Spring Boot MyBatis升级篇-XML-注解-初尝试

20、Spring Boot MyBatis升级篇- pagehelper替换为pagehelper-spring-boot-starter

 

第八章 Spring Boot 知识点1

1、Spring Boot 拦截器HandlerInterceptor

2、Spring Boot启动加载数据CommandLineRunner

3、Spring Boot环境变量读取和属性对象的绑定

4、Spring Boot使用自定义的properties

5、Spring Boot使用自定义的properties

6、Spring Boot使用@SpringBootApplication

7、Spring Boot 监控和管理生产环境

 

第十章 Spring Boot 打包部署

1、Spring Boot打包部署((提供Linux的sh文件))

 

第十一章 Spring Boot 日志

1、spring boot日志—理论

2、Spring Boot日志-logback

 

3、Spring Boot日志-log4j2



标签:Spring,Transactional,Boot,升级,test,67,MyBatis,注解,注入
From: https://blog.51cto.com/u_11142439/6646221

相关文章

  • 记@ConditionalOnMissingBean注解导致bean注入失败的问题
    1.背景springboot项目,引入nacos做配置中心,pom.yaml导入依赖<dependency><groupId>com.alibaba.boot</groupId><artifactId>nacos-config-spring-boot-starter</artifactId><version>0.2.12</ver......
  • 错误:rpmdb: BDB0113 Thread/process 8709/139671674841152 failed
    rpm库报错错误:rpmdb:BDB0113Thread/process8709/139671674841152failed:BDB1507ThreaddiedinBerkeleyDBlibrary错误:db5错误(-30973)来自dbenv->failchk:BDB0087DB_RUNRECOVERY:Fatalerror,rundatabaserecovery错误:无法使用db5- (-30973)打开Packages......
  • 使用Autofac替换Asp.net core内置的依赖注入容器
    Autofac是一个依赖注入容器。Autofac和其他容器的不同之处是它和C#语言的结合非常紧密,在使用过程中对你的应用的侵入性几乎为零,更容易与第三方的组件集成。通常情况下,Asp.netcore内置的依赖注入实现已经足够用了,但Autofac确实提供了更多强大的功能,比如基于属性的注入,动态代......
  • 【线段树】 POJ 3667 Hotel
    这道题和那道HDOJ3308LCIS比较像。。那道题目我就写了超久,当时是不确定保存什么信息。。这道题也写了很久,主要是各种低级错误,找错找了很久,超级火。。。。#include<iostream>#include<sstream>#include<algorithm>#include<vector>#include<queue>#include<stack>#inc......
  • Spring Boot中Service层依赖注入问题随笔
    问题描述: Controller 层方法为 static 静态,引入 Service 层时使用 @Autowired 注解自动装配,Controller层方法里无法调用Service层,于是加static修饰Service层的注入产生错误:调用Service层进行数据库操作时,注入的Service层报空指针异常( NullPointerException )......
  • 模拟嵌入式边缘计算卡设计方案:367-XC7Z100 板卡 基于zynq XC7Z100 FMC接口通用计算平
    基于zynqXC7Z100FMC接口通用计算平台 一、板卡概述北京太速科技板卡由SoCXC7Z100-2FFG900I芯片来完成卡主控及数字信号处理,XC7Z100内部集成了两个ARMCortex-A9核和一个kintex7的FPGA,通过PL端FPGA扩展FMC、光纤、IO等接口,PS端ARM扩展网络、USB、RS232等接口......
  • .net Core Api 注入 Microsoft.Extensions.Logging
    ILoggerAdapter.csusingSystem;usingSystem.Collections.Generic;usingSystem.Text;publicinterfaceILoggerAdapter<T>{////Summary://Formatsandwritesaninformationallogmessage.////P......
  • Google Guice 入门教程01 - 依赖注入
    1.依赖注入1.1类依赖注入所谓的绑定就是将一个接口绑定到具体的类中,这样客户端不用关心具体的实现,而只需要获取相应的接口完成其服务即可。HelloWorld.java 1publicinterfaceHelloWorld{23StringsayHello();4}5然后是具体的实现,HelloWorldImpl.j......
  • 哪里需要写哪里,FromServices注入 — ASP.NET CORE
    宗旨:用最少的字,学会最有用的知识!愿景目标:阅读本文您将学会如何运用FromServices的方式进行依赖注入。例子背景:以电脑主机为例子进行讲解,我的电脑主机可以接入外置设备,如:键盘、鼠标。那么键盘又分:PS/2接口类型、USB接口类型、无线类型。鼠标也一样。你在用到ASP.NETCORE依赖注......
  • 完全兼容DynamoDB协议!GaussDB(for Cassandra)为NoSQL注入新活力
    摘要:DynamoDB是一款托管式的NoSQL数据库服务,支持多种数据模型,广泛应用于电商、社交媒体、游戏、IoT等场景。本文分享自华为云社区《完全兼容DynamoDB协议!GaussDB(forCassandra)为NoSQL注入新活力》,作者:GaussDB数据库。DynamoDB是一款托管式的NoSQL数据库服务,支持多种数据模型......