博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring 新手教程(三) 注入和自己主动装配
阅读量:6883 次
发布时间:2019-06-27

本文共 3992 字,大约阅读时间需要 13 分钟。

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

 

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

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

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

> <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的配置文件:

> <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.xmlpublic 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

你可能感兴趣的文章
Scribe安装及配置方法
查看>>
Linux与云计算——第二阶段 第九章:Mail电子邮件服务器架设—配置基于SSL的邮件服务器以及虚拟域的使用...
查看>>
oracle 创建索引
查看>>
【实习生求职】今日头条笔试
查看>>
Linux 重定向符:> ,>>, <
查看>>
金融行业注册电子邮箱账号时最需要注意什么?
查看>>
Xhprof安装
查看>>
所谓的linux集群-其实可以so easy
查看>>
关于OOM-killer
查看>>
Wireshark网络抓包(一)——数据包、着色规则和提示
查看>>
GOP/ 码流 /码率 / 比特率 / 帧速率 / 分辨率
查看>>
学习一门编程语言的各种矛盾
查看>>
sqlmap简单使用笔记
查看>>
Eclipse ME 安装详解(Windows XP)
查看>>
IE8及以下不支持trim()的处理方法
查看>>
centos反编译APK包
查看>>
python 位操作符 左移和右移 运算
查看>>
预备作业①
查看>>
跨域 - jsonp轻松搞定跨域请求
查看>>
css布局 - 工作中常见的两栏布局案例及分析
查看>>