Spring-Ioc,Di,Bean

  • 博客主页:音符犹如代码
  • 系列专栏:JavaWeb
  • 关注博主,后期持续更新系列文章
  • 如果有错误感谢请大家批评指出,及时修改
  • 感谢大家点赞👍收藏⭐评论✍

目录

IOC

DI

Bean


上一期我们给大家讲解了三层架构和分层解耦,这次给大家注重的讲解一下控制反转和依赖注入,Bean对象等知识点

控制反转:Inversion of Control,简称 IoC,在控制反转中。对象之间的创建和管理都应由自身转到外部的框架或容器来负责

依赖注入:Dependency Injection,简称 DI,它是实现控制反转的一种常见方式,它指容器为应用程序运行时,讲一个对象所依赖的其他对象动态的注入到该对象中。

Bean:IOC容器中创建管理的对象

如果我们要是实现一个案例比如:Service层及 Dao层的实现类,交给I0C容器管理,
为Controller及Service注入运行时,依赖的对象。

首先把Service层以及Dao层的实现类,交给IOC容器管理

然后为Controller及Service注入运行时要依赖的对象

Service:

@Component //加入这个注解
public class UserServiceImpl implements UserService {

    private UserDao userDao;

    @Autowired
    public UserServiceImpl(UserDao userDao) {
        this.userDao = userDao;
    }

    @Override
    public void registerUser(User user) {
        // 业务逻辑处理
        userDao.saveUser(user);
    }
}

Dao:

@Component
public class UserDaoImpl implements UserDao {
    @Override
    public void saveUser(User user) {
        // 模拟保存用户的数据库操作
        System.out.println("Saving user: " + user.getName());
    }
}

Controller:

@RestController
public class UserController {

    private UserService userService;

    @Autowired
    public UserController(UserService userService) {
        this.userService = userService;
    }

    @PostMapping("/register")
    public void register(@RequestBody User user) {
        userService.registerUser(user);
    }
}

Bean的声明

要把某个对象交给ioc容器管理的时候,需要在对应的类上加上注解

注解介绍使用
@Component声明bean的基础注解通用注解,任何类
@Controller@Component的衍生注解标识控制器类
@Service@Component的衍生注解标识服务层的类
@Repository@Component的衍生注解标识数据访问层的类

注意:

声明bean的时候我们可以通过value指定bean的名字,如果没有指定名字,那默认的类名首字母是小写的

使用上边四个注解都可以声明bean,但是在springboot中声明控制器类的bean只能用@Controller这个注解

Bean的注入

在 Spring 框架中,Bean 的注入(Dependency Injection)是指将一个 Bean 所依赖的其他 Bean 自动地注入到当前 Bean 中,以满足其运行时的需求

在Bean的注入中我们最常用的就是@Autowired这个注解,但是如果我们存在多个相同的bean而都用的@Autowired就会报错,所以我们就会用其他的注解方式来解决这些问题

@Primary

@Primary
@Service
public calss EmpService{
}

@Autowired+@Qualifier(“bean的名称”)

@RestController
public class EmpController{
@Autowired
@Qualifier("empService")
private EmpService empService;
}

@Resource(name=“bean的名称”)

@RestController
public class EmpController{
@Resource(name = "empServiceA")
private EmpService empService;
}

@Resource和@Autowired他俩是有区别的

@Autowired它是由spring框架提供的注解,而@Resource他是java中jdk中提供的注解

@Resource是按照名称注入的,@Autowired它是按照类型注入

  • 18
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值