© 版权声明:本文为博主原创文章,转载请注明出处

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学习三----------注入方式的更多相关文章

  1. Spring学习之注入方式

    我们知道,Spring对象属性的注入方式有两种:设值注入和构造注入. 假设有个类为People,该对象包含三个属性,name和school还有age,这些属性都有各自的setter和getter方法, ...

  2. spring的set注入方式流程图解

    spring的set注入方式流程图解 自己学习spring的一些笔记,详细画出了spring的set方式实现依赖注入的流程. 注意:<property name="UserDao&qu ...

  3. Spring学习(五)-----注入bean属性的三种方式( 1: 正常的方式 2: 快捷方式 3: “p” 模式)

    在Spring中,有三种方式注入值到 bean 属性. 正常的方式 快捷方式 “p” 模式 看到一个简单的Java类,它包含两个属性 - name 和 type.稍后将使用Spring注入值到这个 b ...

  4. 一起学Spring之三种注入方式及集合类型注入

    本文主要讲解Spring开发中三种不同的注入方式,以及集合数据类型的注入,仅供学习分享使用,如有不足之处,还请指正. 概述 Spring的注入方式一共有三种,如下所示: 通过set属性进行注入,即通过 ...

  5. Spring 3种注入方式

    spring的三种注入方式: 接口注入(不推荐) getter,setter方式注入(比较常用) 构造器注入(死的应用) 关于getter和setter方式的注入: autowire="de ...

  6. Spring学习三

    Spring注解来注入bean 在classpath中扫描组件 组件扫描,即componetscanning 利用注解来扫描的组件有  @Component  :基本注解,表示一个受Spring管理的 ...

  7. Spring中的注入方式 和使用的注解 详解

    注解:http://www.cnblogs.com/liangxiaofeng/p/6390868.html 注入方式:http://www.cnblogs.com/java-class/p/4727 ...

  8. Spring常用的注入方式有哪些?

    Spring通过DI(依赖注入)实现IOC(控制反转),常用的注入方式主要有三种:构造方法注入,setter注入,基于注解的注入. 参考链接:Spring常用的三种注入方式

  9. 一步一步深入spring(3)--spring的依赖注入方式

    对于spring配置一个bean时,如果需要给该bean提供一些初始化参数,则需要通过依赖注入方式,所谓的依赖注入就是通过spring将bean所需要的一些参数传递到bean实例对象的过程,sprin ...

随机推荐

  1. shell for 循环实践

    for循环语法结构如下 [root@backup tmp]# .sh #!/bin/bash ` do echo $i done [root@backup tmp]# .sh 3 批量修改文件名 [r ...

  2. mybatis 从数据库查询的信息不完整解决办法

    List<Product> products = productService.getProductListWithPage(productQuery); 今天碰到一个很奇怪的现象,上面的 ...

  3. [LeetCode] Find Peak Element 二分搜索

    A peak element is an element that is greater than its neighbors. Given an input array where num[i] ≠ ...

  4. android中与Adapter相关的控件----ExpandableListView

    ExpandableListView(可折叠的列表) 一.ExpandableListView(可折叠的列表)和ListView有很多地方差不多的,使用也差不多,只是他们使用适配器不一样的,Expan ...

  5. pip 安装时报错Double requirement given: numpy==1.12.1....

    使用pip install -r requirements.txt 命令批量安装模块时,报错: Double requirement given: numpy==1.12.1 from https:/ ...

  6. android 集成友盟分享之后,想自定义分享面板的看过来

    第一种情况 首先上传一张默认的友盟分享的效果图 看起来还不错,但是总是有这样那样的原因,需要我们对默认效果做出一些改变. 第二种情况 如果你想做出下面的效果: 或者这样的效果 : 总之上面的效果总是在 ...

  7. Shell 括号辨识(转http://blog.csdn.net/taiyang1987912/article/details/39551385)

    一.小括号,圆括号() 1.单小括号 ()    ①命令组.括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用.括号中多个命令之间用分号隔开,最后一个命令可以没有 ...

  8. java8 之CompletableFuture -- 如何构建异步应用

    什么是Future 接口 很多场景下,我们想去获取线程运行的结果,而通常使用execute方法去提交任务是无法获得结果的,这时候我们常常会改用submit方法去提交,以便获得线程运行的结果. 而sub ...

  9. 使用OPENROWSET爆破SQL Server密码

    使用OPENROWSET爆破SQL Server密码   OPENROWSET函数是SQL Server提供的一个连接函数.它可以用于使用OLE DB方式连接一个数据库,并进行数据查询等操作.使用该函 ...

  10. java文件下载导出

    前台代码: $("#btnExport").click(function(){ top.$.jBox.confirm("确认要导出房屋信息吗?","系 ...