Spring-IOC&DI入门案例

167 阅读1分钟

1.新建一个maven项目并导入依赖(pom.xml)

<?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>org.example</groupId>
    <artifactId>spring-ioc</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.0.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

    </dependencies>
</project>

2.新建userDao接口和实现类

package com.abchina.dao;

public interface UserDao {
    public void save();
}

2.1提供属性的set方法是为了能够进行依赖注入,在spring的配置文件中可以注入属性

package com.abchina.dao.impl;

import com.abchina.dao.UserDao;

public class UserDaoImpl implements UserDao {
    private String company;
    private int age;

    public void setCompany(String company) {
        this.company = company;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void save() {
        System.out.println(company + "====" + age);
        System.out.println("UserDao save method running...");
    }
}

3.在resources目录下新建spring的配置文件applicationContext.xml

3.1 导入beans标签约束

3.2 bean标签的作用是将对象注册到spring容器中,需要使用的时候从applicationContext上下文容器中获取bean对象即可

3.3 property标签的作用是对bean对象进行属性注入,其中value用于基本类型中注入,ref用于引用类型注入

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:con="http://www.springframework.org/schema/context"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
">

    <bean id="userDao" class="com.abchina.dao.impl.UserDaoImpl">
        <property name="age" value="12"/>
        <property name="company" value="abchina"/>
    </bean>
    <bean id="userService" class="com.abchina.service.impl.UserServiceImpl">
        <property name="userDao" ref="userDao"/>
    </bean>
</beans>

4.在UserService对象中注入UserDao对象和方法

4.1新建UserService接口和实现类

package com.abchina.service;

public interface UserService {
    public void save();
}
package com.abchina.service.impl;

import com.abchina.dao.UserDao;
import com.abchina.service.UserService;


public class UserServiceImpl implements UserService {
    private UserDao userDao;
    //通过set方法进行依赖注入
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    public void save() {
    //这种方法是两个对象都在spring容器中,不通过引用对象注入而是直接从容器中分别获取两个对象
//        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
//        UserDao userDao = (UserDao) applicationContext.getBean("userDao");
    
        userDao.save();
    }
}

5.新建测试类进行测试

package com.abchina.test;

import com.abchina.dao.UserDao;
import com.abchina.service.UserService;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestSpring {
    @Test
    public void test1() {
        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserDao userDao = (UserDao)applicationContext.getBean("userDao");
        userDao.save();
    }
    @Test
    public void test2() {
        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserService userService = (UserService) applicationContext.getBean("userService");
        userService.save();
    }
}

6.遇到的一些问题

junit模块无法导入,重新设置maven仓库配置,2020版本idea新建的maven会默认使用自带配置,如果导包出现问题需要检查一下

7.源码链接

github.com/yinjinsong/…