Spring学习三----------注入方式
© 版权声明:本文为博主原创文章,转载请注明出处
Spring注入方式
本篇博客只讲最常用的两种注入方式:设值注入和构造器注入。代码为完整代码,复制即可使用。
1.目录结构

2.pom.xml
<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.spring</groupId>
<artifactId>Spring</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging> <name>Spring</name>
<url>http://maven.apache.org</url> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring.version>4.3.7.RELEASE</spring.version>
</properties> <dependencies>
<!-- junit依赖 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- spring依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
</project>
2.spring-ioc.xml(两种注入方式,任选一种)
2.1 设值注入
<?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="injectService" class="org.spring.ioc.injection.service.impl.InjectionServiceImpl">
<!-- 设值注入 -->
<property name="injectDao" ref="injectDao"/>
</bean> <bean id="injectDao" class="org.spring.ioc.injection.dao.impl.InjectionDaoImpl"></bean> </beans>
2.2 构造器注入
<?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="injectService" class="org.spring.ioc.injection.service.impl.InjectionServiceImpl">
<!-- 构造器注入 -->
<constructor-arg name="injectDao" ref="injectDao"/>
</bean> <bean id="injectDao" class="org.spring.ioc.injection.dao.impl.InjectionDaoImpl"></bean> </beans>
3.InjectionDao
package org.spring.ioc.injection.dao;
public interface InjectionDao {
String save(String word);
}
4.InjectionDaoImpl
package org.spring.ioc.injection.dao.impl;
import org.spring.ioc.injection.dao.InjectionDao;
public class InjectionDaoImpl implements InjectionDao {
public String save(String word) {
return "数据保存成功!保存的数据是:" + word.hashCode();
}
}
5.InjectionService
package org.spring.ioc.injection.service;
public interface InjectionService {
String save(String word);
}
6.InjectionServiceImpl(两种注入方式,任选一种)
6.1 设值注入
package org.spring.ioc.injection.service.impl; import org.spring.ioc.injection.dao.InjectionDao;
import org.spring.ioc.injection.service.InjectionService; public class InjectionServiceImpl implements InjectionService { private InjectionDao injectDao; //设值注入
public void setInjectDao(InjectionDao injectDao) {
this.injectDao = injectDao;
} public String save(String word) { System.out.println("传递过来的参数是:" + word);
return injectDao.save(word); } }
6.2 构造器注入
package org.spring.ioc.injection.service.impl; import org.spring.ioc.injection.dao.InjectionDao;
import org.spring.ioc.injection.service.InjectionService; public class InjectionServiceImpl implements InjectionService { private InjectionDao injectDao; //构造器注入
public InjectionServiceImpl(InjectionDao injectDao) {
this.injectDao = injectDao;
} public String save(String word) { System.out.println("传递过来的参数是:" + word);
return injectDao.save(word); } }
7.UnitTestBase.java
package org.spring.ioc.test; import org.junit.After;
import org.junit.Before;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.util.StringUtils; /**
* 单元测试初始化类
*
*/
public class UnitTestBase { private ClassPathXmlApplicationContext context;
private String springXmlPath; /**
* 无参构造器
*/
public UnitTestBase() { } /**
* 含参构造器
*
* @param springXmlPath
* spring配置文件路径
*/
public UnitTestBase(String springXmlPath) { this.springXmlPath = springXmlPath; } /**
* 初始化spring配置文件
*/
@Before//在@Test注解的方法执行前执行
public void before() { if(StringUtils.isEmpty(springXmlPath)) {//默认spring配置文件路径
springXmlPath = "classpath*:spring-*.xml";
}
//加载配置文件
context = new ClassPathXmlApplicationContext(springXmlPath.split("[,\\s]+"));
//启动组件
context.start(); } /**
* 销毁spring组件
*/
@After//在@Test注解的方法执行后执行
public void after() { context.destroy();//销毁组件 } /**
* 获取spring中定义的bean实例
*
* @param beanId
*
* @return
*/
@SuppressWarnings("unchecked")
protected <T extends Object> T getBean(String beanId) { return (T) context.getBean(beanId); } /**
* 获取spring中定义的bean实例
*
* @param clazz
*
* @return
*/
protected <T extends Object> T getBean(Class<T> clazz) { return (T) context.getBean(clazz); } }
8.TestInject.java
package org.spring.ioc.test; import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.BlockJUnit4ClassRunner;
import org.spring.ioc.injection.service.InjectionService; @RunWith(BlockJUnit4ClassRunner.class)//指定JUnit默认执行类
public class TestInject extends UnitTestBase { public TestInject() {//通过构造方法传入spring配置文件路径 super("classpath*:spring-ioc.xml"); } @Test
public void testInj() { InjectionService injectService = super.getBean("injectService");//从spring容器中获取依赖对象
System.out.println(injectService.save("Word.")); } }
9.效果预览

参考:http://www.imooc.com/video/3668
Spring学习三----------注入方式的更多相关文章
- Spring学习之注入方式
我们知道,Spring对象属性的注入方式有两种:设值注入和构造注入. 假设有个类为People,该对象包含三个属性,name和school还有age,这些属性都有各自的setter和getter方法, ...
- spring的set注入方式流程图解
spring的set注入方式流程图解 自己学习spring的一些笔记,详细画出了spring的set方式实现依赖注入的流程. 注意:<property name="UserDao&qu ...
- Spring学习(五)-----注入bean属性的三种方式( 1: 正常的方式 2: 快捷方式 3: “p” 模式)
在Spring中,有三种方式注入值到 bean 属性. 正常的方式 快捷方式 “p” 模式 看到一个简单的Java类,它包含两个属性 - name 和 type.稍后将使用Spring注入值到这个 b ...
- 一起学Spring之三种注入方式及集合类型注入
本文主要讲解Spring开发中三种不同的注入方式,以及集合数据类型的注入,仅供学习分享使用,如有不足之处,还请指正. 概述 Spring的注入方式一共有三种,如下所示: 通过set属性进行注入,即通过 ...
- Spring 3种注入方式
spring的三种注入方式: 接口注入(不推荐) getter,setter方式注入(比较常用) 构造器注入(死的应用) 关于getter和setter方式的注入: autowire="de ...
- Spring学习三
Spring注解来注入bean 在classpath中扫描组件 组件扫描,即componetscanning 利用注解来扫描的组件有 @Component :基本注解,表示一个受Spring管理的 ...
- Spring中的注入方式 和使用的注解 详解
注解:http://www.cnblogs.com/liangxiaofeng/p/6390868.html 注入方式:http://www.cnblogs.com/java-class/p/4727 ...
- Spring常用的注入方式有哪些?
Spring通过DI(依赖注入)实现IOC(控制反转),常用的注入方式主要有三种:构造方法注入,setter注入,基于注解的注入. 参考链接:Spring常用的三种注入方式
- 一步一步深入spring(3)--spring的依赖注入方式
对于spring配置一个bean时,如果需要给该bean提供一些初始化参数,则需要通过依赖注入方式,所谓的依赖注入就是通过spring将bean所需要的一些参数传递到bean实例对象的过程,sprin ...
随机推荐
- vue使用stylus
在package.json中添加 stylus-loader "css-loader": "^0.28.0", "stylus-loader&quo ...
- C语言位运算符:与、或、异或、取反、左移与右移详细介绍
位运算是指按二进制进行的运算.在系统软件中,常常需要处理二进制位的问题.C语言提供了6个位操作运算符.这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型 ...
- kubernetes 之dns 服务发现
1.在每个节点上面导入如下镜像 [root@node1 DNS]# lltotal 59816-rw-r--r--. 1 root root 8603136 Nov 25 18:13 execheal ...
- react 当中重新渲染dom的方法
有个upload 重复上传同名文件的需求,在网上找了很多解决方案都不好使,在react当中解决该问题其实很简单,其实无法上传同名文件 的原因是因为无法触发onChange事件,只需要刷新改dom就可以 ...
- 【02】webpack 之 入门
http://www.jianshu.com/p/42e11515c10f 写在前面的话 阅读本文之前,先看下面这个webpack的配置文件,如果每一项你都懂,那本文能带给你的收获也许就比较有限,你可 ...
- Python连接MySQL数据库操作
一.创建数据库及表 CREATE DATABASE testdb; USE testdb; CREATE TABLE `tb_user` ( `id` INT (11) NOT NULL AUTO_I ...
- [LeetCode] String to Integer (atoi) 字符串
Implement atoi to convert a string to an integer. Hint: Carefully consider all possible input cases. ...
- layui 的单选框
<div class="layui-form-item"> <label class="layui-form-label">是否通过&l ...
- Logger用法
logger的输出有两种方式:①log.log(Level.INFO,"message")②log.info("mesage")其他级别的输出与此类似. 获得c ...
- android实现多条件筛选列表菜单筛选菜单
封装组合控件实现一个简单的多条件筛选菜单,可根据自己需求定制筛选条件,动态添加筛选项,灵活使用. 控件封装,点击切换,使用popupWindow实现下拉列表,项目中封装了多种数组数据排序处理方法的工具 ...