简单应用Spring框架中IOC和DI
本次应用主要简单测试Spring IOC(控制反转)和 DI(依赖注入)
IOC(控制反转):主要完成事情是管理对象的生命周期
DI(依赖注入):容器实例化对象时主动注入依赖的对象
** 项目机构**
这里只做了一个数据访问层(DAO),没有服务层(Service)和控制层(Controller),目的是简化,只将测试描述清楚
pom.xml
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.18</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
spring.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"
xmlns:context="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">
<!--扫描类路径下com.dyy包下 标记注解(@Repository @Service @Controller @Component)的类加入容器-->
<context:component-scan base-package="com.dyy" />
</beans>
实体类
package com.dyy.entity;
import lombok.Data;
/**
* @description:实体
* @author:
* @date: 2020/4/13 21:41
* @Version: 1.0
*/
@Data
public class Account {
private Integer accountId;
private Integer uId;
private Double amount;
}
数据访问层
package com.dyy.dao;
import com.dyy.entity.Account;
import java.util.List;
/**
* @description:接口
* @author:
* @date: 2020/4/13 21:40
* @Version: 1.0
*/
public interface IAccountDao {
/**
* 查询
* @return
*/
List<Account> find();
}
数据访问层实现类
这里只是模拟数据访问,不做实际访问
@Repository 属于IOC最先引入的一批实例对象
package com.dyy.dao.impl;
import com.dyy.dao.IAccountDao;
import com.dyy.entity.Account;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @description:
* @author:
* @date: 2020/4/13 21:45
* @Version: 1.0
*/
@Repository
public class AccountDaoImpl implements IAccountDao {
private Log logger = LogFactory.getLog(AccountDaoImpl.class);
/**
* 查询
* @return
*/
public List<Account> find() {
if(logger.isInfoEnabled()) {
//后面测试会出
logger.info("查询");
}
return null;
}
}
测试Demo
@Autowired DI 注入依赖对象
package com.dyy;
import com.dyy.dao.IAccountDao;
import com.dyy.entity.Account;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.util.List;
/**
* @description:
* @author:
* @date: 2020/4/13 21:54
* @Version: 1.0
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:spring.xml")
public class SpringApp {
@Autowired
private IAccountDao dao;
@Test
public void find(){
dao.find();
}
}
测试结果