分层解耦

控制层:Controller,接收前端发送的请求,对请求进行处理,并响应数据

服务层:Service ,处理具体的业务逻辑

数据访问层(持久层):Dao ,负责数据访问操作,例如增删改查

分层解耦:

内聚:软件中各个功能模块内部的功能联系

耦合:衡量软件中各个层/模块之间的依赖,关联的层度

软件设计原则:高内聚低耦合

控制反转提供的容器称之为IOC容器或者Spring容器,控制反转就是将对象的控制权交给IOC容器

@Autowired:依赖注入,生成Bean对象

@Component:想将实现类交给IOC容器管理,就必须在实现类也就是Bean对象的类前年加@Component注解,这个类可以是任何实现类,也就是在控制层想用某个类时,不用new对象,实现解耦,通过IOC依赖注入的方式来获得这个类的bean对象,被交给IOC容器管理的类前面必须加注解@Component

在控制层前面加注解:@RestController

DI细节讲解:

如果一个依赖注入@Autowired有两个bean对象该怎么处理?

1:首先会报错,因为并不知道你要装配哪个bean对象,如图:

ServiceB:

ServiceA:

控制层会报错,因为注入了两个bean对象,并不知道要取哪个

报错信息如下:

处理多个bean对象的解决办法:

解决方案一:

@Primary注解:

多个bean中,要想让某个bean生效,就在哪个bean上方再加一个注解@Primary

如图:

解决方案二:

使用@Qualifier注解:

在控制层注解@Autowired加注解@Qualifier,如图:

需要在注解@Qualifier加参数,即bean的名字,bean的名称默认是类的名称首字母小写

第三种方法:使用@Resource注解

小结:

面试题:

@Autowired是按类型进行注入:
@Autowired 是Spring框架中的一个注解,用于自动注入依赖。当您在类的成员变量、构造函数或方法上使用 @Autowired 注解时,Spring容器会自动查找匹配的Bean,并将其注入到该成员变量、构造函数或方法中。

按类型注入

当您说 @Autowired 是按类型进行注入时,这意味着Spring容器会根据成员变量或方法参数的类型来查找匹配的Bean。具体来说,Spring会查找与该类型匹配的Bean,并将其注入到相应的字段或参数中。如果存在多个相同类型的Bean,Spring会抛出异常,除非您使用 @Qualifier 注解来指定具体的Bean名称。

例子

假设您有一个接口 MyService 和两个实现类 MyServiceImpl1 和 MyServiceImpl2

public interface MyService {
    // ...
}

@Service
public class MyServiceImpl1 implements MyService {
    // ...
}

@Service
public class MyServiceImpl2 implements MyService {
    // ...
}
}

如果您在某个类中使用 @Autowired 注解来注入 MyService 类型的Bean

public class MyController {
    @Autowired
    private MyService myService;
    
    // ...
}

Spring容器会查找类型为 MyService 的Bean,并将其注入到 myService 字段中。如果容器中只有一个 MyService 类型的Bean,Spring会自动注入它。如果有多个,Spring会抛出异常,因为无法确定应该注入哪一个。

解决多Bean问题

如果存在多个相同类型的Bean,您可以通过 @Qualifier 注解来指定要注入的Bean名称:

public class MyController {
    @Autowired
    @Qualifier("myServiceImpl1")
    private MyService myService;
    
    // ...
}

在这个例子中,即使容器中有多个 MyService 类型的Bean,@Qualifier("myServiceImpl1") 会告诉Spring注入 myServiceImpl1 这个Bean。

总结

@Autowired 注解允许Spring框架自动注入依赖,它默认按类型查找匹配的Bean。如果存在多个相同类型的Bean,需要使用 @Qualifier 注解来指定具体的Bean名称,以避免注入错误。这种方式简化了依赖注入的过程,使得开发者不需要手动编写代码来查找和注入依赖。

博客内容均系原创,未经允许严禁转载!
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇