【JavaEE进阶】SpringIoC&DI

spring,springMVC,SpringBoot不是互斥的

boot是框架,引入了第三方和很多依赖,像12306,MVC是这其中一个功能

spring量大核心思想,ioc,aop

spring是包含了众多工具方法的IoC容器

IOC是控制反转,对象控制权,正常谁用谁控制也就是new一个,现在同一交给spring使用

lombok和web勾上

di,依赖注入

容器在运⾏期间, 动态的为应⽤程序提供运⾏时所依赖的资源,称之为依赖注⼊。

相对应的使用就是DI,通过依赖注入,从ioc的容器中去拿这个对象进行注入进来

用@Component,把这一对象放进spring容器中

之后就不用new了

用@Autowired,取出来,并赋值给那个

  1. 类注解:@Controller、@Service、@Repository、@Component、@Configuration.
  2. ⽅法注解:@Bean.,需要配合类注解使用,创建第三方的时候用,或者同一个类需要多个对象

service业务逻辑层,service包下面

Repository数据持久层,dao里面

添加有参的时候建议把无参的加上,data完事之后,

有参@AllArgsConstructor

无参@NoArgsConstructor

一个类型创建两个对象,用context.getBean拿,括号里面,可以(类型.class),但是同一个类型多个对象就不可以了,("名字",类型.class),("名字")去拿bean对象

bean name默认规则

  1. 五大注解: bean name为
    1)如果类名前两位为大写,则bean name为类名本身
    2)其他情况: bean name为类名的小驼峰写法
  2. @Bean:bean name为方法名

这个是默认的,可以修改,在controller后面括号引号

@Bean是括号里面name="......"

里面甚至可以是数组,数组是小括号里面加个大括号

spring启动的时候先看启动类在哪里,在这个对应路径下面找五大注解类,所以他放的位置不重要

DI

依赖注入实现,也就是创建过程

DI三种方式

  1. Autowired属性注入
  2. 构造方法注入,正常右键有参构造床阿金
    只有一个构造方法时,默认就执行这一个构造方法
    当有无参的构造方法时,默认执行无参的构造方法
    当有多个的构造方法时?
    没有无参构造方法,且有多个有参构造时,运行报错,想走无参,可通过autowired指定,否则走无参
  3. setter方法注入,还是generate,需要用到autowired才能使用

属性注入的时候,在最上面声明多个引用变量的时候,每一个都要加上autowired,不能final

set也不能final,构造方法可以final

开发中最常见的是属性注入

对于同一个类有多个对象时,使用autowired有问题,解决方案,

  1. @Primary,在对象里面选一个最主要的
  2. @Qualifier("bean名称"),一定要配合autowired使用
  3. @Resource(name="名字")

后两个使用的多,如果这三个都不用,会根据声明的变量名字来找,或者看是不是只有一个

面试题

autowired和resource区别

  1. @Autowired是spring框架提供的注解,而@Resource是JDK提供的注解
  2. @Autowired 默认是按照类型注入,而@Resource是按照名称注入,相比于@Autowired来说,@Resource支持更多的参数设置,例如name设置,根据名称获取 Bean.

面试题

相关推荐
敲代码的小小酥26 分钟前
谈SpringMVC与Spring WebFlux的区别与适用场景
java·后端·spring
风若飞13 小时前
Spring Ai 入门遇到问题1
java·后端·spring
Flynn Liang21 小时前
上线后怎么排查 AI 调用?Spring AI Observability:token/延迟/成本埋点与全链路追踪
java·人工智能·spring·监控·可观测性·observability·springai
VimorphTech1 天前
每批开 4 个线程,为什么限制不住 TTS 的总并发?
java·spring boot·spring
软件技术NINI1 天前
基于SpringBoot和Vue的项目评审系统
javascript·vue.js·spring boot·后端·spring·毕业设计·毕设
代码不停1 天前
Spring Aop
java·数据库·spring
Flynn Liang2 天前
AI 应用的安全红线:Spring AI 下的 Prompt 注入防护、PII 脱敏、输出审计与密钥管理
人工智能·安全·spring·数据泄露·springai·prompt注入
QCoding2 天前
企业级Agent Evaluation实战:Agent能跑就能上线?AI Agent到底怎么测?
后端·spring
Flynn Liang2 天前
Spring AI 上生产:限流熔断、密钥与成本治理、私有化/混合部署、降级与 Prompt 灰度架构全解
人工智能·spring·架构·高可用·springai·成本治理·生产架构