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-10-13 07:53:59

Spring 入门教程(三) 注入和自动装配的相关文章

Spring Cloud 入门教程(三): 配置自动刷新

之前讲的配置管理, 只有在应用启动时会读取到GIT的内容, 之后只要应用不重启,GIT中文件的修改,应用无法感知, 即使重启Config Server也不行. 比如上一单元(Spring Cloud 入门教程(二): 配置管理)中的Hello World 应用,手动更新GIT中配置文件config-client-dev.properties的内容(别忘了用GIT push到服务器) hello=Hello World from GIT version 1 刷新 http://locahost/8

spring框架学习(四)自动装配

spring框架学习(四)自动装配 set注入和构造注入有时在做配置时比较麻烦.所以框架为了提高开发效率,提供自动装配功能,简化配置.Spring框架式默认不支持自动装配的,要想使用自动装配需要修改spring配置文件中<bean>标签的autowire属性 自动装配属性有6个值可选,分别代表不同的含义. 1,byName 从Spring环境中获取目标对象时,目标对象中的属性会根据名称在整个Spring环境中查找<bean>标签的id属性值.如果有相同的,那么获取这个对象,实现关联

Spring的IOC容器—Bean的自动装配

我们对XML配置文件装配Bean的方式都很熟悉了,但是随着业务的复杂性,我们可能编写越来越复杂的XM配置. Spring提供了4种类型的自动装配的方式,帮助我们减少XML的配置数量.如下: byName:根据与bean的属性具有相同名字(或者ID)的其他bean进行注入 byType:   根据与bean的属性具有相同类型的其他bean进行注入 constructor:根据与bean的构造函数参数有相同类型的bean进行注入 autodetect :  首先尝试使用constructor进行注入

spring入门教程、基础教程

spring入门教程.基本教程 说明: 环境:jdk:1.7.maven:3.3.9.tomcat:7.eclipse 此项目使用maven创建项目 1.入门教程 1.1创建项目 第一步new 第二步(有maven project的忽略这步) 第三步选上 第四步,稍微复杂一点(没学过maven的同学) 结果: 项目此时报错,解决错误: 选择项目右键: (1) (2) (3) 替换jdk (1) 项目创建完毕! 2.加入依赖 打开pom.xml文件     原文地址:https://www.cnb

RabbitMQ入门教程(三):Hello World

原文:RabbitMQ入门教程(三):Hello World 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/vbirdbest/article/details/78583480 分享一个朋友的人工智能教程(请以"右键"->"在新标签页中打开连接"的方式访问).比较通俗易懂,风趣幽默,感兴趣的朋友可以去看看. Hello World示例功能简介 功能描述

Elasticsearch入门教程(三):Elasticsearch索引&amp;映射

原文:Elasticsearch入门教程(三):Elasticsearch索引&映射 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/vbirdbest/article/details/79213163 索引概念简介 通常说的索引有两种词性,名称和动词. 动词索引indexing,索引一个文档,表示把一个文档存储到索引Index里,可以用来查询和检索,es采用倒排索引 名词索引index,

Spring框架中利用注解进行自动装配的环境配置步骤和常见问题

第1步:配置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.spring

jQuery 入门教程(三): Selectors

jQuery Selector 是jQuery库中非常重要的一个组成部分. jQuery Selector 用来选择某个HTML元素,其基本语句和CSS的选择器(Selector)是一样的,所有jQuery selector 都是以$()开始. 选择HTML标记 选择某个HTML元素的方法是直接使用该元素的标记名称,比如选择所有<p>元素 $("p") 下面的例子当用户点击一个按钮时,隐藏所有的<p>元素 $(document).ready(function()

BootStrap入门教程 (三)

上讲回顾:Bootstrap的基础CSS(Base CSS)提供了优雅,一致的多种基础Html页面要素,包括排版,表格,表单,按钮等,能够满足前端工程师的基本要素需求. Bootstrap作为完整的前端工具集,内建了大量的强大优雅可重用的组件,包括按钮(Button),导航(Navigation),标签(Labels),徽章(Badges),排版(Typography),缩略图( thumbnails),提醒(Alert),进度条(progress bar),杂项(Miscellaneous).

无废话ExtJs 入门教程三[窗体:Window组件]

无废话ExtJs 入门教程三[窗体:Window组件] extjs技术交流,欢迎加群(201926085) 1.代码如下: 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3.org/19