spring中ioc 和di代码示例
时间: 2024-12-13 10:01:00 浏览: 10
Spring框架中的IoC(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入)是两个核心的概念,它们主要用于管理应用程序的对象依赖关系。
**代码示例**:
首先,假设我们有一个简单的`UserService`接口和两个实现了这个接口的`UserServiceImpl1`和`UserServiceImpl2`类:
```java
// UserService接口
public interface UserService {
void createUser();
}
// UserServiceImpl1实现
@Service("userService1")
public class UserServiceImpl1 implements UserService {
// 实现方法
@Override
public void createUser() {
System.out.println("Creating user with UserServiceImpl1");
}
}
// UserServiceImpl2实现
@Service("userService2")
public class UserServiceImpl2 implements UserService {
// 实现方法
@Override
public void createUser() {
System.out.println("Creating user with UserServiceImpl2");
}
}
```
然后,在Spring配置文件`applicationContext.xml`或`application.properties`中,使用XML或注解式的方式来进行DI和IoC:
**XML配置方式**:
```xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="userService" class="com.example.UserService">
<!-- 使用IoC自动装配 -->
<property name="implClass" ref="userServiceImplBean"/>
</bean>
<!-- 创建bean实例并指定名字 -->
<bean id="userServiceImplBean" class="com.example.UserServiceImpl1" />
</beans>
```
**注解方式**:
```java
@Configuration
public class AppConfig {
@Autowired
private UserService userService;
// 使用@Component注解自动扫描并装配
@Bean
public UserService userServiceImpl() {
return new UserServiceImpl1(); // 这里可以换成UserServiceImpl2
}
}
```
在这段代码中,通过Spring的IoC容器,我们可以将`UserService`的实际实现注入到需要的地方,而无需硬编码。这样做的好处是可以提高代码的灵活性,并便于测试和维护。
阅读全文