Spring 新手教程(三) 注入和自己主动装配

     Spring注入是指在启动Spring容器载入bean配置的时候。对类变量的赋值。

两种经常使用注入方式:设值注入和构造注入

以下就这部分知识看代码以及代码中的注解:

1、首先看Spring 配置文件(怎样载入,怎么測试,《入门系列(一)》有说明。这里不再赘述)

<?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" >

<!-- 以下是设值注入 。注意 <property name="injectionDAO" ref="injectionDAO"></property>这行代码,
                无论是这里的设值还是以下的构造一定要在须要引用对象的类中加上对应的方法供Spring容器使用,实际开发中两种仅仅须要选择一种就可以 ->   

<!--    <bean id="injectionService" class="com.xidian.ioc.injection.service.InjectionServiceImpl"> -->
<!--       <property name="injectionDAO" ref="injectionDAO"></property> -->
<!--    </bean> -->

		<!--这里是构造注入 -->
		<bean id="injectionService" class="com.xidian.ioc.injection.service.InjectionServiceImpl">
        	<constructor-arg name="injectionDAO" ref="injectionDAO"></constructor-arg>
        </bean>

        <bean id="injectionDAO" class="com.xidian.ioc.injection.dao.InjectionDAOImpl"></bean>

 </beans>

2、看待注入的类:

package com.xidian.ioc.injection.dao;

public interface InjectionDAO {

	public void save(String arg);

}
package com.xidian.ioc.injection.dao;

import com.xidian.ioc.injection.dao.InjectionDAO;

public class InjectionDAOImpl implements InjectionDAO {

	public void save(String arg) {
		//模拟数据库保存操作
		System.out.println("保存数据:" + arg);
	}

}

3、Service类

package com.xidian.ioc.injection.service;

public interface InjectionService {

	public void save(String arg);

}
import com.xidian.ioc.injection.dao.InjectionDAO;

public class InjectionServiceImpl implements InjectionService {

	private InjectionDAO injectionDAO;

	//【重要】构造器注入 ,这种方法一定要有,假设在前面的spring上下文中是用构造注入的方法
	public InjectionServiceImpl(InjectionDAO injectionDAO1) {
		this.injectionDAO = injectionDAO1;
	}

	//【重要】设值注入,这种方法一定要有。并且名字一定要是setXxx。不然spring容器载入不出来
	public void setInjectionDAO(InjectionDAO injectionDAO) {
		this.injectionDAO = injectionDAO;
	}

	public void save(String arg) {
		//模拟业务操作
		System.out.println("Service接收參数:" + arg);
		arg = arg + ":" + this.hashCode();
		//Spring对象会自己主动调取生成对应的对象
		injectionDAO.save(arg);
	}

}

自己主动装配(Autowiring):

byname:依据属性名自己主动装配。

byType:假设容器中存在一个与该属性名同样的bean,那么久自己主动装配。可是。假设存在多个。则会抛出异常;假设没找到则不报异常。但什么也不做。

Constructor:与byType方式类似,不同之处在于它应用于构造器參数,假设容器中没有找到与构造器类型一致的bean。那么则抛出异常。

自己主动注入,把装配的相关操作放到了详细类中,要在对应的方法中传入(该方法不能少),详细细节看代码凝视:

1、Spring的配置文件:

<?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"
        default-autowire="constructor">
        <!--自己主动注入配置。还能够有byName,byType。byName实际上是看bean的id;
                            而用byType则是看类型的。假设有多个同样的type则报异常;实际上用自己主动注入时,省掉的是在以下的bean注入配置。
                          自己主动注入,把装配的相关操作放到了详细类中,要在对应的方法中传入。-->

        <bean id="autoWiringService" class="com.xidian.autowiring.AutoWiringService" ></bean>

        <!--  假设不是用自己主动注入的方法,这这边必须人为的进行设置,比方这边的方法:
             <bean id="autoWiringService" class="com.xidian.autowiring.AutoWiringService" >
	        	<property name="autoWiringDAO" ref="autoWiring"></property>
       		 </bean>
        -->

        <!-- 待注入的对象 -->
        <bean class="com.xidian.autowiring.AutoWiringDAO" ></bean>

 </beans>

2、待自己主动注入类:

package com.xidian.autowiring;

//该类被配置到了对应的配置文件spring-autowiring.xml中。也就是待注入的对象类
public class AutoWiringDAO {

	public void say(String word) {
		System.out.println("AutoWiringDAO : " + word);
	}

}

3、注入类:

package com.xidian.autowiring;

//该类被配置到了对应的配置文件其中spring-autowiring.xml
public class AutoWiringService {

	private AutoWiringDAO autoWiringDAO;

	//假设使用构造方法自己主动注入的方法,则这边必须写上这种方法。前面尽管免去的在Spring配置文件bean的设置,可是这边省不了。
	public AutoWiringService(AutoWiringDAO autoWiringDAO) {
		System.out.println("AutoWiringService");
		this.autoWiringDAO = autoWiringDAO;
	}

	//同上。必须有的方法 , 传入AutoWiringDAO对象。

前面尽管免去的在spring配置文件bean的设置。可是这边省不了。
	public void setAutoWiringDAO(AutoWiringDAO autoWiringDAO) {
		System.out.println("setAutoWiringDAO");
		this.autoWiringDAO = autoWiringDAO;
	}

	public void say(String word) {
		this.autoWiringDAO.say(word);
	}

}

你看会了嘛?欢迎讨论 http://blog.csdn.net/code_7

时间: 2024-08-24 20:31:11

Spring 新手教程(三) 注入和自己主动装配的相关文章

Spring Security教程(三):自定义表结构

在上一篇博客中讲解了用Spring Security自带的默认数据库存储用户和权限的数据,但是Spring Security默认提供的表结构太过简单了,其实就算默认提供的表结构很复杂,也不一定能满足项目对用户信息和权限信息管理的要求.那么接下来就讲解如何自定义数据库实现对用户信息和权限信息的管理. 一.自定义表结构 这里还是用的mysql数据库,所以pom.xml文件都不用修改.这里只要新建三张表即可,user表.role表.user_role表.其中user用户表,role角色表为保存用户权限

ROS探索总结(三)——ROS新手教程【转】

转自:http://blog.csdn.net/hcx25909/article/details/8811313 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 一ROS的安装 二ROS的新手教程 三ROS中的常用功能 1rviz 2tf 3gazebo 四ROS常用机器人 1PR2 2TurtleBot 3HuskyErratic 前面我们介绍了ROS的特点和结构,接下来就要开始准备动手感受一下ROS的强大了.ROS官网的wiki上针对新手的教程很详细,最好把所有的新手

【SSH系列】深入浅出spring IOC中三种依赖注入方式

spring的核心思想是IOC和AOP,IOC-控制反转,是一个重要的面向对象编程的法则来消减计算机程序的耦合问题,控制反转一般分为两种类型,依赖注入和依赖查找,依赖什么?为什么需要依赖?注入什么?控制什么?依赖注入和控制反转是一样的概念吗?接触新的知识,小编的脑袋中全是大大的问号,不过没有关系,今天这篇博文,小编主要来简单的介绍一下在spring IOC中依赖注入的方法. 依赖注入和控制反转,目的是为了使类与类之间解耦合,提高系统的可扩展性和可维护性.我们可以从以下几个方面理解: a.参与者都

2017.3.31 spring mvc教程(三)请求映射(静态文件访问、拦截器)

学习的博客:http://elf8848.iteye.com/blog/875830/ 我项目中所用的版本:4.2.0.博客的时间比较早,11年的,学习的是Spring3 MVC.不知道版本上有没有变化比较大的功能. spring mvc教程(三)拦截器 1.Spring中的拦截器 (1)拦截器接口 Spring提供了拦截器接口.实现这个接口或继承这个类,就能实现自己的拦截器. 1 org.springframework.web.servlet.HandlerInterceptor接口 2 or

ROS探索总结(三)——ROS新手教程

来源:转自古月居的博客 前面我们介绍了ROS的特点和结构,接下来就要开始准备动手感受一下ROS的强大了.ROS官网的wiki上针对新手的教程很详细,最好把所有的新手教程都搞清楚,这是后面开发最基础的东西.尽管如此,ROS对于新手来说还是很难上手,这里,我就来总结一下我当时学习的历程,也为其他新手作为一个参考. 一.ROS的安装 ROS的安装当然是我们开始动手的第一步了,这里我们使用的操作系统是ubuntu,因为ROS在ubuntu上的支持是最好的.如果是新手,我建议使用"apt-get"

Eclipse使用新手教程

说起java的IDE,朗朗上口的无非是Eclipse了,假若能熟练Eclipse,对于我们编写java程序会起到事半功倍的效果,大大提高我们工作效率.因此本篇博文,笔者仅仅是针对刚刚入门java的新手,以便他们能尽快掌握Eclipse的使用. 1. 经常使用快捷键 这是使用工具的第一步,熟练使用快捷键对于我们编敲代码会起到相当大帮助,所以这里笔者列出的快捷键建议大家必须都掌握. Ctrl + 鼠标左键(类.方法.属性的变量名词):定位跟踪某变量声明或定义的位置 Ctrl + S:保存当前文件 C

Apple Swift编程语言新手教程

Apple Swift编程语言新手教程 作者: 日期: gashero 2014-06-03 FROM:http://gashero.iteye.com/blog/2075324 文件夹 1   简单介绍 2   Swift入门 3   简单值 4   控制流 5   函数与闭包 6   对象与类 7   枚举与结构 1   简单介绍 今天凌晨Apple刚刚公布了Swift编程语言,本文从其公布的书籍<The Swift Programming Language>中摘录和提取而成.希望对各位的

MATLAB新手教程

MATLAB新手教程   1.MATLAB的基本知识 1-1.基本运算与函数    在MATLAB下进行基本数学运算,仅仅需将运算式直接打入提示号(>>)之後,并按入Enter键就可以.比如: >> (5*2+1.3-0.8)*10/25 ans =4.2000 MATLAB会将运算结果直接存入一变数ans,代表MATLAB运算後的答案(Answer)并显示其数值於萤幕上. 小提示: ">>"是MATLAB的提示符号(Prompt),但在PC中文视窗

ionic新手教程第七课-简要说明几种界面之间的參数传递及优缺点

截至2016年4月13日19点32分,我公布的ionic新手教程,已经公布6课了, 总訪问量将近6000,平均每节课能有1000的訪问量.当中訪客最多的是第三课有2700的訪客. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" > 事实上我開始的时候计划的挺好的,就依照我这阶段的安排,慢慢的带大家做一个