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会默认使用自带配置,如果导包出现问题需要检查一下