在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年+大厂架构经验,资深技术专家,就职于阿里、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》