资讯动态

Spring IoC和DI(2)

发布时间:2026/10/21 11:42:26 来源:尧图企业网站定制
前文见:Spring IoCDI1-CSDN博客1.方法注解bean在以下情况需要用到方法注解1.第三方的类需要交给IoC管理2.同一个类需要多个对象类注解默认这个类是单例模式Bean需要搭配类注解使用1.第三方的类如果注释掉Bean就会报错2.同一个类需要多个对象如果再创建一个实例再根据类的类型获取getBean就会报错解决方法1.Qualifier2.Primary3.按名字getBeanBean方法名就是bean的name4.给Bean重命名2.bean的name重命名1.类注解的重命名2.方法注解的重命名或者多个重命名Bean注解的源代码name属性可省略3.扫描路径有下列方法注解把启动类挪到controller包下1.问题实践可知把启动类 放在 除了Configuration的包下其余都会报同样的错误。为什么2.Spring的默认扫描路径扫描是干啥的Spring扫描就是Spring去指定的包里面找到了添加注解的类把他们变成Bean放到IoC容器里。扫描路径是啥扫描路径就是Spring去指定的包下往IoC里添加类 的路径为啥不扫描整个项目的全部文件1.浪费性能。项目里的很多文件普通实体类、工具类、测试类都不需要交给Spring管理如果全项目扫描Spring要遍历全部的文件、解析注解项目启动会非常慢。2.同一类型多个Bean冲突。有可能某个第三方类写了Component就会出现NoUniqueBeanDefinitionException异常默认扫描路径是啥启动类所在的包及其全部子包3.结论所以就可以解释上述代码为啥只有把启动类放在Configuration包下能正常运行了。因为启动类在Configuration包下Spring会扫描这个包及其子包所以这两个Bean会被添加进IoC里后续就可以取出来。4.修改启动类的扫描路径ComponentScan4.DI详解依赖注入是一个过程指在Io容器在创建Bean时去提供运行时所依赖的资源Spring提供了三种属性注入的方式1.属性注入Autowired2.构造方法注入1.只有一个有参构造方法1.问这个参数是咋传进来的Spring在创建UserController这个Bean时Spring看到UserController只有这一个构造方法——》它去看这个方法需要的参数——》Spring直接去IoC里找UserService类型的Bean——》找到之后自动把这个Bean传进构造方法赋值给参数userService——》执行this.userServiceuserService2.无参一个有参如果加上无参构造方法就会报错因为如果有 无参构造方法默认执行的就是 无参构造方法解决方法Autowired指定执行有参构造方法3.无无参构造方法有多个有参构造方法时直接报错可以通过Autowired指定构造方法3.Setter注入4.三种注入方式对比属性注入不能注入一个被final修饰的属性。必须写Autowired构造方法注入能注入一个被final修饰的属性。Spring4.3之后只有一个构造方法时可以不写Autowiredsetter注入不能注入一个被final修饰的属性。set方法上必须写Autowired5.Autowired存在的问题当属性添加Autowired注解后就会从容器中获取对象并把对象赋值给userRepository同一个类型存在多个bean时使用Autowired会存在问题1.使用Primary注解指定2.使用Qualifier注解指定3.使用Resource注解指定6.Spring Framework、Spring家族、Spring Boot、Spring Web MVCSpring家族包括Spring Boot、Spring Framework等Spring Framework包括spring-core,spring-beans,spring-aop。IoC、DI也属于Spring FrameworkSpringBoot是Spring Framework的一个脚手架

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑