Spring依赖注入的几种方式分享梳理总结
什么是依赖注入(Dependency Injection,DI)
简单来说,依赖注入就是将对象所依赖的其他对象注入到其内部。这样可以达到解耦的效果,提高代码的可维护性。
通常,依赖注入需要依赖容器完成,目前比较常用的容器有Spring、Guice等。
Spring依赖注入的几种方式
1.构造注入(Constructor Injection)
构造注入就是通过构造函数的参数来进行注入,这种方式通常应用在有固定数量依赖的类中。
在Spring中,可以使用<constructor-arg>
标签来进行配置注入参数。
示例代码:
public class UserServiceImpl implements UserService {
private UserDao userDao;
public UserServiceImpl(UserDao userDao) {
this.userDao = userDao;
}
//...
}
<bean id="userDao" class="com.example.dao.UserDaoImpl"/>
<bean id="userService" class="com.example.service.UserServiceImpl">
<constructor-arg ref="userDao"/>
</bean>
2.属性注入(Property Injection)
属性注入就是通过setter方法设置依赖属性的值,这种方式通常应用在有大量依赖的类中。
在Spring中,可以使用<property>
标签来进行配置注入属性。
示例代码:
public class UserServiceImpl implements UserService {
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
//...
}
<bean id="userDao" class="com.example.dao.UserDaoImpl"/>
<bean id="userService" class="com.example.service.UserServiceImpl">
<property name="userDao" ref="userDao"/>
</bean>
3.接口注入(Interface Injection)
接口注入就是通过实现依赖注入接口来进行注入,这种方式通常应用在需要回调函数的类中。
在Spring中,可以使用<lookup-method>
标签来进行配置注入回调函数。
示例代码:
public abstract class Command {
public User getUser() {
return UserServiceFactory.getUserService().getCurrentUser();
}
}
public interface UserService {
User getCurrentUser();
}
public class UserServiceImpl implements UserService {
public User getCurrentUser() {
//...
}
}
public class UserServiceFactory {
private static UserService userService;
public void setUserService(UserService userService) {
UserServiceFactory.userService = userService;
}
public static UserService getUserService() {
return userService;
}
}
<bean id="userService" class="com.example.service.UserServiceImpl"/>
<bean id="userServiceFactory" class="com.example.service.UserServiceFactory">
<lookup-method name="setUserService" bean="userService"/>
</bean>
<bean id="command" abstract="true" class="com.example.web.Command"/>
<bean id="loginCommand" parent="command">
<!-- ... -->
</bean>
结束语
以上就是Spring依赖注入的三种方式,每种方式都有其特点和适用场景。为了保证代码的可维护性和可扩展性,我们需要根据具体情况去选择不同的方式。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring依赖注入的几种方式分享梳理总结 - Python技术站