
在Spring框架中经常使用到IOC注入方式,下面就给大家详解常见的4种IOC注入方式@mikechen
1.构造函数注入
通过构造函数注入,你可以将依赖项作为构造函数的参数传递给需要依赖的类。
如下所示:
public class UserRepository {
    // ...
}
public class UserService {
    private final UserRepository userRepository;
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
    // ...
}
在上面的示例中,UserService 的构造函数接受一个 UserRepository 参数,表示它依赖于 UserRepository。
在Spring配置文件中,我们配置 UserService 的bean,并通过构造函数注入 UserRepository:
<bean id="userRepository" class="com.example.UserRepository" />
<bean id="userService" class="com.example.UserService">
    <constructor-arg ref="userRepository" />
</bean>
在这里,<constructor-arg> 元素指定了构造函数的参数。ref 属性的值是需要注入的 UserRepository bean 的ID。
2.属性注入
Spring属性注入主要是通过setter方法为类的属性设置依赖项。
如下所示:
public class UserRepository {
    // ...
}
public class UserService {
    private UserRepository userRepository;
    public void setUserRepository(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
    // ...
}
在上面的示例中,UserService 类有一个名为 userRepository 的属性,通过 setUserRepository 方法进行注入。
3.注解注入
使用注解来标记要注入的属性、字段、构造函数等,常用的注解包括@Autowired、@Qualifier、@Resource等。
如下所示:
@Component
public class UserService {
    @Autowired
    private UserRepository userRepository;
    // ...
}
在这个示例中,UserRepository 实例会被自动注入到 userRepository 属性中。
4.自动装配
这是一种基于类型的依赖注入方式,通过在bean的定义中设置自动装配模式,常用的自动装配模式包括byType、byName、constructor等。
如下所示:
假设有一个 Student 类,它的构造函数需要一个 School 实例作为依赖项。
public class Student {
    private School school;
    public Student(School school) {
        this.school = school;
    }
    // ...
}
在Spring配置文件中,启用自动装配并设置装配模式为 constructor:
<bean id="student" class="com.example.Student" autowire="constructor" /> <bean id="school" class="com.example.School" />
这将自动将一个 School 实例通过构造函数注入到 Student 类中。
关于mikechen
mikechen睿哥,10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。