浅谈 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 { ListselectUsers(); }
#### 步骤三:配置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 ListselectUsers() { 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应用程序中的配置和依赖关系。