注入和对象实例

注入和对象实例

1. 注入

  • 在编程领域,注入(Injection)是一种设计模式,它属于控制反转(Inversion of Control, IoC)的一种形式。注入的目的是减少程序中各个组件之间的耦合度,使得组件更加独立、灵活和可重用。
  • 注入的核心思想是:组件不自己创建它依赖的对象,而是从外部获取这些对象。

1.1. 依赖注入

  • 我们一般说的注入就是指依赖注入;
  • 依赖(Dependency):一个类使用另一个类的实例来完成某些任务,称为依赖。例如,类A依赖于类B来完成某些功能,类B就是类A的依赖;
  • 注入(Injection):将依赖传递给使用它的对象的过程。在注入之后,接收方才能够调用该依赖;
1.1.1. 常见的注入形式
  • 组件:是指系统中的一个可替换的、独立的、模块化的单元;一个组件可能由一个或多个类(实体类)组成,这些类共同实现组件的功能;个人理解,可以直接解释为一个.class文件;
  1. 依赖注入(Dependency Injection, DI);依赖注入是指组件的依赖关系由外部传入,而不是组件自己创建。依赖注入可以进一步细分为:
    • 构造器注入:通过构造器传递依赖对象。
    • 设置器注入:通过设置器方法(如setter方法)传递依赖对象。
    • 接口注入:通过接口传递依赖对象。
    • 字段注入:直接在字段上注入依赖对象。
1.1.1.1. 构造器注入
  • 通过构造器将依赖传递给bean。
@Component
public class UserService {
    private final UserRepository userRepository;

    @Autowired
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
}
1.1.1.2. 设置器注入
  • 通过设置器方法(setter)将依赖注入bean。
@Component
public class UserService {
    private UserRepository userRepository;

    @Autowired
    public void setUserRepository(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
}
1.1.1.3. 字段注入
  • 直接在bean的字段上注入依赖。
@Component
public class UserService {
    @Autowired
    private UserRepository userRepository;
}

2. 声明和创建对象

  • 声明指向“由类所创建的对象”的变量。
  • 用new创建新的对象,并指派给先前所创建的变量
Person p1;// 先声明Person类对象p1
p1 = new Person();// 再用new关键字实例化Person的对象p1

3. 多线程构造,如何传递注入方式声明的对象实例

  1. 使用多线程的时候,需要通过构造方法将对象实例传递到线程内部;

3.1. 原因

  1. 确保线程安全:多线程环境下,共享对象可能会导致线程安全问题。通过构造方法传递对象实例,可以确保每个线程都有自己的对象副本,从而避免多个线程同时修改同一个对象导致的竞态条件;
  2. 避免Spring注入问题:在Spring框架中,非由Spring容器直接管理的线程(例如,通过new Thread()或Thread.start()手动创建的线程)无法直接使用Spring的依赖注入功能。通过构造方法传递对象实例,可以确保线程能够访问到Spring管理的bean;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值