# 7IoC在实际项目中的用途

回到spring导航页

如何通过IOC将对象之间解耦,进而让我们软件团队协作之间出现解耦,
如下代码模拟了:张三、李四开发,张三负责dao层(也就是对数据库的增删改查),李四负责service层(也就是业务逻辑层),前期项目使用的mysql数据库,后期又修改成了oracle数据库的场景,代码如下:

示例代码

# 创建maven工程

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.torey.spring.ioc</groupId>
    <artifactId>book-shop</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.3.5</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.18</version>
        </dependency>
    </dependencies>
    
</project>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

# 创建java代码

package com.torey.spring.ioc.dao;

/**
 * @Author http://torey611.gitee.io/li-tao-feng/
 * @Email torey6061@qq.com
 * @Date 2021/4/28 22:17
 * @描述:
 */
public interface BookDao {
    public void insert();
}
1
2
3
4
5
6
7
8
9
10
11
package com.torey.spring.ioc.dao;

/**
 * @Author http://torey611.gitee.io/li-tao-feng/
 * @Email torey6061@qq.com
 * @Date 2021/4/28 22:17
 * @描述:
 */
public class BookDaoMySqlImpl implements BookDao {

    public void insert() {
        System.out.println("添加了一条数据");
    }
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package com.torey.spring.ioc.dao;

/**
 * @Author http://torey611.gitee.io/li-tao-feng/
 * @Email torey6061@qq.com
 * @Date 2021/4/28 22:17
 * @描述:
 */
public class BookDaoOracleImpl implements BookDao {

    public void insert() {
        System.out.println("模拟oracle数据库:添加了一条数据");
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
package com.torey.spring.ioc.server;

import com.torey.spring.ioc.dao.BookDao;
import lombok.Data;

/**
 * @Author http://torey611.gitee.io/li-tao-feng/
 * @Email torey6061@qq.com
 * @Date 2021/4/29 16:39
 * @描述:
 */
@Data
public class BookServer {
    private BookDao bookDao;
    public void purchase(){
        System.out.println("正在执行图书采购计划");
        bookDao.insert();
    }
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

# 创建两个config.xml文件

写两个配置文件,是为了项目管理的考量,因为在一个团队中有一些技术好,有一些技术差一些,作为dao,它实现数据库的增删改查,没有多少技术含量,可以交给初级的程序员,但是对于service,这是在系统中最核心的代码,肯定是要让技术好,能力强的人进行开发,不同的人使用不同的xml文件,防止写的时候遇到工作上的交叉。

# applicationContext-dao.xml

用于保存所有的数据访问类,用于对数据的增删改查操作

<?xml version="1.0" encoding="UTF-8"?>
<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
        https://www.springframework.org/schema/beans/spring-beans.xsd">
<!--<bean id="bookDao" class="com.torey.spring.ioc.dao.BookDaoMySqlImpllImpl"></bean>-->
    <!--如果后续底层修改使用了oracle数据库,只需要再次新建一个类,继承BookDao接口,然后改这里就可以了,server层是无感知的-->
    <bean id="bookDao" class="com.torey.spring.ioc.dao.BookDaoOracleImpl"></bean>
</beans>
1
2
3
4
5
6
7
8
9

# applicationContext-service.xml

用于保存所有的服务类,也就是service

<?xml version="1.0" encoding="UTF-8"?>
<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
        https://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="bookServer" class="com.torey.spring.ioc.server.BookServer">
        <property name="bookDao" ref="bookDao"/>
    </bean>
</beans>
1
2
3
4
5
6
7
8
9

# 测试运行使用

package com.torey.spring.ioc;

import com.torey.spring.ioc.server.BookServer;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * @Author http://torey611.gitee.io/li-tao-feng/
 * @Email torey6061@qq.com
 * @Date 2021/4/29 16:48
 * @描述:
 */
public class BookShopApplication {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext applicationContext =
                new ClassPathXmlApplicationContext("classpath:applicationContext-*.xml");
        BookServer bookServer = applicationContext.getBean("bookServer", BookServer.class);
        bookServer.purchase();
    }
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

# 导航,上一页,下一页

6SpringIoc路径表达式用法
8利用构造方法实现对象依赖注入

# 支持我-微信扫一扫-加入微信公众号

Aseven公众号

# 赞赏作者

赞赏作者