博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringBoot2.0
阅读量:3914 次
发布时间:2019-05-23

本文共 6142 字,大约阅读时间需要 20 分钟。

SpringBoot2.0

容器中的配置类

  • 调用容器中配置类的方法,先创创建一个配置类对象(代理对象),这个对象再调用配置类里面的方法时,相当于配置类调用方法,就会先从容器中看有没有这个方法组件,有就拿,没有就在容器中新创。
  • @Configuration(proxyBeanMethod=true) 时创建的对象为代理对象(即用方法组件就从容器拿,false就从类中新 new 一个)。
  • 光放入容器不拿,用false,这样运行更快。
  • 放入还要拿,用true,扫描容器里面有没有,比较慢。
  • 用处:比如,主人将宠物送到宠物店临时看管,下午回来拿的时候,如果用的是代理对象true(全配置(full)),那么就会从宠物店这个容器中拿取主人对应的宠物。但如果是 false(轻量级模式(lite)) ,就就会新 new 一个宠物,也就是不从宠物店拿,新给他一个,这肯定不行。因为这已经不是主人放进去的宠物了
  • 具体意义:比如主人到宠物店只是想拿一只狗,买它,然后如果你用 true 就会先看看主人有没有放宠物在店里(主人对宠物有没有依赖),没有,再给它一个新的。这样就会很慢。
    所以知道目的后用 false 就会快很多,知道他跟宠物没有依赖关系(因为没往容器放过),就直接给他一个新的。

一些要注意的

  • @Bean 标签要写在 @SpringBootApplication(引导类)的同一个包或者它的子包下。

标签合集

建议学会看源码。

  1. @SpringBootAplication:告诉springboot这是一个springboot应用(主程序类)。
    可以这么使用:@SpringBootApplication(scanBasePackages=“手动想要主程序扫描的包路径(默认是扫描主程序所在包及子包)”)
  2. @Configuration:用在类之前,告诉SpringBoot某个类是配置类,而该类则相当于配置文件。
  3. @Bean:用在方法前面,给容器添加组件,方法名相当于组件的id,方法的返回值类型相当于组件的类型,方法的返回值相当于组件在容器中的实例。@Bean(“Tom”),相当于把名字改为Tom。
  4. @Component:也是将组件加到容器中,但是跟@Bean不一样,@Bean需要在配置类下使用(@Configuration),而@Component要在类上使用,作用就相当于 XML配置,而且@Bean的自定义性特别强,因为你并不能改第三方库的类的源代码,在他类上加个@Component,但你可以创建一个配置类,在配置类上面用@EnableConfiguProperties(第三方类类 . class) 来将类注册到容器中。
  5. @Cotroller:处理 http 的请求(如果某个类不加,无法成为控制器类,就访问不到该类)。
  6. @RequestMapping:配置URL映射(比如:把一长串的网址映射为很短的一串,其实短的那个服务器是不存在的,但是这样更加方便输入,也方便搜索引擎检索)。
    eg:@RequestMapping("/quick")。
  7. @ResponseBody:将sout内的内容显示在浏览器上。
  8. @RestController:是 “ @Controller ” 与 “ @RequestMapping ” 的合体。
  9. @Value
  10. @ConfigurationProperties
  11. @Import:给容器中导入一个组件。
  12. @Conditional:条件装配(eg:类中没有哪个组件(类的方法),其他的组件就(不)注入了)。
  13. @ImportResource:使用:@ImportResource(classpath:冒号后面写配置的老配置文件(用来往容器中注入组件的配置文件(eg:bean.xml)))
  14. @Autowired:Spring上下文已有实例(已注入IOC),@Autowired只是取一下。
  15. @AutoConfigurationPackage:属于@EnableAutoConfiguration,@EnableAutoConfiguration属于@SpringBootApplication里面的,作用是将指定的一个包下的所有组件导入进主程序所在的包(main方法)下。
  16. @ComponentScan:指定要扫描哪些包。
  17. @EnableAutoConfiguration
  18. @AutoConfigurationPackage:利用Registrar给容器中导入一系列组件,将指定的一个包下的所有组件导入进来,MainApplication 所在包下。
  19. @MockMethod:单元测试用的(2020年12月新出来的)。

标签图解

  1. @SpringBootApplication
    在这里插入图片描述

spring-boot-starter:

  • 场景启动器,是所有场景最基本(最底层、核心)的依赖,比如spring-boot-starter-web。web场景的启动器。

类 . class :就是组件(目前看来应该是的)。

遇到的问题与解决

  1. 无效的绑定语句:There was an unexpected error (type=Internal Server Error, status=500).
    Invalid bound statement (not found): com.ahdeer.mapper.EmployeeMapper.queryEmployee
    org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.ahdeer.mapper.EmployeeMapper.queryEmployee
    这个已经无法解决了,在我不小心捣鼓的时候,弄出另一个问题,并且解决了,但是这个问题也不见了。可惜。
    补充
    找到了:我之所以那个问题跳过了,是因为我用了@Select()注解来查询,也就是说问题还是出在接口与接口的配置文件的连接上
    在这里插入图片描述
    解决:我写的很严谨,所以什么路径名不对,id、namespace不对是不存在的。这里是无效绑定语句,就是说接口没连上接口的配置文件,那么就是在中间环节出了问题,也就是UserMapper接口找配置文件的路上 “ 迷路 ” 了。那么找配置文件的地方一个是配置文件namespace,但是没写错,而且我用的别名,那么答案出来了,就在别名出了问题!让我们看看配置文件别名:classPath : mybatis / mapper / UserMapper.xml ,看出来了吗?应该是 classpath ,明白了吧。所以遇到这类问题,要在接口找对应配置文件的过程上找问题,这个还是一个有工作经验的帮我找出来的,我今天毕竟第一次,以后熟练了,不会出现了。
    拒绝访问本地数据库,密码正确
    在这里插入图片描述
    解决:能看出问题在哪里吗?我喜欢手敲代码,所以一般背下来的,这次输入的时候把username 弄成了 name ,自然无法访问数据库。但是上一个问题我不经意间就消失了。可惜。
  2. org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘userController’: Unsatisfied dependency expressed through field ‘userService’; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘userService’: Unsatisfied dependency expressed through field ‘userMapper’; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘userMapper’ defined in file [D:\BackDevelop\IDEA\IdeaProjects\springboot_mybatis_integration_template\target\classes\com\ahdeer\mapper\UserMapper.class]: Unsatisfied dependency expressed through bean property ‘sqlSessionFactory’; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘sqlSessionFactory’ defined in class path resource [org/mybatis/spring/boot/autoconfigure/MybatisAutoConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.ibatis.session.SqlSessionFactory]: Factory method ‘sqlSessionFactory’ threw exception; nested exception is org.springframework.core.NestedIOException: Failed to parse mapping resource: ‘file [D:\BackDevelop\IDEA\IdeaProjects\springboot_mybatis_integration_template\target\classes\mybatis\mapper\UserMapper.xml]’; nested exception is java.lang.IllegalArgumentException: Mapped Statements collection already contains value for com.ahdeer.mapper.UserMapper.queryUser. please check file [D:\BackDevelop\IDEA\IdeaProjects\springboot_mybatis_integration_template\target\classes\mybatis\mapper\UserMapper.xml] and com/ahdeer/mapper/UserMapper.java (best guess)
    :直接上图
    在这里插入图片描述
    解决这段话的意思:org.springframework.beans.factory.UnsatisfiedDependencyException:创建名称为’userController’的bean时出错:通过字段’userService’表示的不满足的依赖关系;
    嵌套的异常是org.springframework.beans.factory.UnsatisfiedDependencyException:创建名称为’userService’的bean时出错:通过字段’userMapper’表示的不满足的依赖关系;
    嵌套异常是org.springframework.beans.factory.UnsatisfiedDependencyException:在文件[D:\ BackDevelop \ IDEA \ IdeaProjects \ springboot_mybatis_integration_template \ target \ classes \ com \ ahdeer \ mapper \ UserMapper.class]中创建名称为’userMapper’的bean时出错
    :通过bean属性’sqlSessionFactory’表示的不满意的依赖关系;
    嵌套的异常是org.springframework.beans.factory.BeanCreationException:创建在类路径资源[org / mybatis / spring / boot / autoconfigure / MybatisAutoConfiguration.class]中定义的名称为’sqlSessionFactory’的bean时出错:通过工厂方法的Bean实例化失败;
    嵌套的异常是org.springframework.beans.BeanInstantiationException:无法实例化[org.apache.ibatis.session.SqlSessionFactory]:工厂方法’sqlSessionFactory’引发了异常;
    嵌套的异常是org.springframework.core.NestedIOException:无法解析映射资源:“文件[D:\ BackDevelop \ IDEA \ IdeaProjects \ springboot_mybatis_integration_template \ target \ classes \ mybatis \ mapper \ UserMapper.xml]”;
    嵌套异常是java.lang.IllegalArgumentException:映射语句集合已经包含com.ahdeer.mapper.UserMapper.queryUser的值。
    请检查文件[D:\ BackDevelop \ IDEA \ IdeaProjects \ springboot_mybatis_integration_template \ target \ classes \ mybatis \ mapper \ UserMapper.xml]和com / ahdeer / mapper / UserMapper.java(最佳猜测)。简单的说就是已经存在一个可以运行的sql语句了,那我不可能写两个相同注释或者两个配置文件,那就只可能我各写一个了,那不就相当于重复了吗?一看,我想注释的,结果注释错误,留下了两个查询sql语句

转载地址:http://xzprn.baihongyu.com/

你可能感兴趣的文章
从零开始实现 ASP.NET Core MVC 的插件式开发(九) - 如何启用预编译视图
查看>>
.NET应用如何优雅的实现功能定时开关
查看>>
netcore一键部署到linux服务器以服务方式后台运行
查看>>
从 3.1 到 5.0 —— OpenReservation 更新记
查看>>
还在犹豫是否迁移.NET5?这几个项目已经上线了!
查看>>
Kuma 1.0 GA发布,70多项新功能和改进
查看>>
被 C# 的 ThreadStatic 标记的静态变量,都存放在哪里了?
查看>>
ASP.NET Core使用HostingStartup增强启动操作
查看>>
结合控制台程序和K8S的CronJob完成定时任务
查看>>
2020了,最流行的密码依旧是123456
查看>>
网传不要升级.NET5的诸多原因,你赞同几个?
查看>>
利用模板化应对ERP业务模型的快速变化
查看>>
[项目更新] 集成RabbitMQ队列与EventBus总线
查看>>
尝鲜!.NET5实操之docker+k8s,这10个坑,你不得不知!
查看>>
【招聘(深圳)】TCL通讯科技控股有限公司
查看>>
学习笔记 | 传统企业互联网改革之道
查看>>
真正的高手,都有增长思维!(深度好文)
查看>>
推荐一款.NET Core开源爬虫神器:DotnetSpider
查看>>
Leansoft再发招贤令:面试官徐磊有话讲 | IDCF
查看>>
关于C# Span的一些实践
查看>>