XML配置注入
分为两种注入方式:构造注入、方法注入
1、构造注入
1)、定义Bean
模拟工作中的流程:
定义 Controller 控制层
public class TestController {
// 被注入对象
private TestService testService;
// 测试注入方法
public String testController() {
return testService.testService();
}
// --------------------------------------------------
// 构造注入
public TestController(TestService testService) {
this.testService = testService;
}
}
定义 Service 服务层接口
public interface TestService {
// 测试注入:调用方法
String testService();
}
定义 Service 服务层接口实现
// 接口实现类
public class TestServiceImpl implements TestService {
// 被注入对象
private TestRepository repository;
// 测试注入方法
public String testService() {
return repository.testRepository();
}
// --------------------------------------------------
// 构造注入
public TestServiceImpl(TestRepository repository) {
this.repository = repository;
}
}
定义 Repository 数据层接口
public interface TestRepository {
// 测试注入:调用方法
String testRepository();
}
定义 Repository 数据层接口实现
// 接口实现类
public class TestRepositoryImpl implements TestRepository {
// 测试注入方法
public String testRepository() {
return "------------------------- >>> 获取数据成功!!";
}
}
2)、注入Bean
XML配置文件注入:属性 constructor-arg
<?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
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="controller" class="test.define.controller.TestController">
<constructor-arg ref="serviceId"/>
</bean>
<bean id="serviceId" class="test.define.service.impl.TestServiceImpl">
<constructor-arg ref="repositoryImpl"/>
</bean>
<bean id="repositoryImpl" class="test.define.repository.impl.TestRepositoryImpl"/>
</beans>
3)、完整测试代码
依赖
<properties>
<spring.version>4.2.1.RELEASE</spring.version>
</properties>
<dependencies>
<!-- Spring 依赖注入 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- 仅测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
测试类
public class Test {
@org.junit.Test
public void test() {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring/spring.xml");
TestController controller = context.getBean(TestController.class);
String data = controller.testController();
System.out.println("结果:" + data);
context.close();
}
}
结果
结果:------------------------- >>> 获取数据成功!!
2、方法注入
1)、定义Bean
模拟工作中的流程:
定义 Controller 控制层
public class TestController {
// 被注入对象
private TestService testService;
// 测试注入方法
public String testController() {
return testService.testService();
}
// --------------------------------------------------
// 方法注入
public void setTestService(TestService testService) {
this.testService = testService;
}
}
定义 Service 服务层接口
public interface TestService {
// 测试注入:调用方法
String testService();
}
定义 Service 服务层接口实现
// 接口实现类
public class TestServiceImpl implements TestService {
// 被注入对象
private TestRepository repository;
// 测试注入方法
public String testService() {
return repository.testRepository();
}
// --------------------------------------------------
// 方法注入
public void setRepository(TestRepository repository) {
this.repository = repository;
}
}
定义 Repository 数据层接口
public interface TestRepository {
// 测试注入:调用方法
String testRepository();
}
定义 Repository 数据层接口实现
// 接口实现类
public class TestRepositoryImpl implements TestRepository {
// 测试注入方法
public String testRepository() {
return "------------------------- >>> 获取数据成功!!";
}
}
2)、注入Bean
XML配置文件注入:属性 property
<?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
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="controller" class="test.define.controller.TestController">
<property name="testService" ref="serviceId"/>
</bean>
<bean id="serviceId" class="test.define.service.impl.TestServiceImpl">
<property name="repository" ref="repositoryImpl"/>
</bean>
<bean id="repositoryImpl" class="test.define.repository.impl.TestRepositoryImpl"/>
</beans>
3)、完整测试代码
依赖(不变)
<properties>
<spring.version>4.2.1.RELEASE</spring.version>
</properties>
<dependencies>
<!-- Spring 依赖注入 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- 仅测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
测试类(不变)
public class Test {
@org.junit.Test
public void test() {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring/spring.xml");
TestController controller = context.getBean(TestController.class);
String data = controller.testController();
System.out.println("结果:" + data);
context.close();
}
}
结果(不变)
结果:------------------------- >>> 获取数据成功!!