
在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睿哥
10年+一线大厂架构实战经验,就职于阿里、淘宝等一线大厂,操盘多个亿级大厂核心项目。