浅谈 Spring IOC 和 DI 以及 Spring 整合 Mybatis 的十四 个注解
发布人:shili8
发布时间:2025-02-23 14:14
阅读次数:0
**Spring IOC 和 DI**
###什么是IOC和DI?
在软件开发中,依赖性注入(Dependency Injection, DI)和控制反转(Inversion of Control, IOC)是两个相关但不同的概念。
* **控制反转(IOC)**: IOC是一种设计模式,它将对象之间的依赖关系进行抽象,使得程序员不再需要直接实例化对象,而是通过容器来管理对象的生命周期。这使得代码更易于维护和测试。
* **依赖性注入(DI)**: DI是IOC的一种实现方式,它将依赖关系从编程中抽象出来,通过配置文件或其他机制来提供依赖关系。
### Spring IOC 和 DI 的使用在Spring框架中,IOC和DI是核心概念。下面是一个简单的例子:
java//一个服务类public class UserService {
private UserDAO userDAO;
public void setUserDAO(UserDAO userDAO) {
this.userDAO = userDAO;
}
public void saveUser() {
// 使用userDAO进行操作 }
}
//一个DAO类public class UserDAO {
public void saveUser() {
// DAO的具体实现 }
}
在Spring中,我们可以使用XML配置文件来定义Bean之间的依赖关系:
xml<!-- XML配置文件 --> <bean id="userService" class="com.example.UserService"> <property name="userDAO" ref="userDAO"/> </bean> <bean id="userDAO" class="com.example.UserDAO"/>
在Java代码中,我们可以使用`@Autowired`注解来实现DI:
java//一个服务类@Servicepublic class UserService {
@Autowired private UserDAO userDAO;
public void saveUser() {
// 使用userDAO进行操作 }
}
### Spring 整合 MybatisSpring整合Mybatis是一个常见的使用场景。下面是一个简单的例子:
#### 步骤一:配置Mybatis首先,我们需要在pom.xml中添加Mybatis依赖:
xml<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.4</version> </dependency>
然后,我们需要配置Mybatis的XML文件:
xml<!-- mybatis-config.xml --> <configuration> <settings> <setting name="cacheEnabled" value="true"/> </settings> <typeAliases> <typeAlias type="com.example.User" alias="User"/> </typeAliases> </configuration>
#### 步骤二:创建Mapper接口然后,我们需要创建Mapper接口:
java// UserMapper.javapublic interface UserMapper {
List selectUsers();
}
#### 步骤三:配置Spring最后,我们需要在Spring中配置Mybatis:
java// SpringConfig.java@Configurationpublic class SpringConfig {
@Bean public DataSource dataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/test");
dataSource.setUsername("root");
dataSource.setPassword("123456");
return dataSource;
}
@Bean public SqlSessionFactory sqlSessionFactory() throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource());
bean.setConfigLocation(new ClassPathResource("mybatis-config.xml"));
return bean.getObject();
}
}
#### 步骤四:使用Mapper接口最后,我们可以在Spring中使用Mapper接口:
java// UserService.java@Servicepublic class UserService {
@Autowired private UserMapper userMapper;
public List selectUsers() {
return userMapper.selectUsers();
}
}
### Spring 整合 Mybatis 的十四 个注解下面是Spring整合Mybatis的十四个注解:
1. `@Service`: 表示这是一个服务类。
2. `@Autowired`: 表示这个属性需要通过依赖性注入来获取。
3. `@Repository`: 表示这是一个数据访问层类。
4. `@Mapper`: 表示这是一个Mapper接口。
5. `@Bean`: 表示这是一个Spring Bean。
6. `@Configuration`: 表示这是一个Spring配置类。
7. `@EnableAutoConfiguration`: 表示开启自动配置功能。
8. `@ImportResource`: 表示导入XML配置文件。
9. `@Value`: 表示这个属性需要通过值注入来获取。
10. `@PropertySource`: 表示这是一个属性源类。
11. `@BeanDefinitionRegistryPostProcessor`: 表示这是一个Bean定义注册后处理器。
12. `@Import`: 表示导入其他配置类。
13. `@ConditionalOnClass`: 表示这个类需要在指定的类存在的情况下才会被使用。
14. `@ConditionalOnProperty`: 表示这个类需要在指定的属性存在的情况下才会被使用。
这些注解可以帮助我们更好地组织和管理Spring应用程序中的配置和依赖关系。

