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
Spring 新手教程(三) 注入和自己主动装配的更多相关文章
- Spring Security教程(三):自定义表结构
在上一篇博客中讲解了用Spring Security自带的默认数据库存储用户和权限的数据,但是Spring Security默认提供的表结构太过简单了,其实就算默认提供的表结构很复杂,也不一定能满足项 ...
- Spring Security教程(三)
在上一篇博客中讲解了用Spring Security自带的默认数据库存储用户和权限的数据,但是Spring Security默认提供的表结构太过简单了,其实就算默认提供的表结构很复杂,也不一定能满足项 ...
- Spring 新手教程(二) 生命周期和作用域
以下的知识点是针对使用配置文件讲的(annotation相应标签后面文章会具体阐述) Bean的生命周期: 为什么关心这个问题? 我们使用IOC的目的就是为了让Spring IOC帮我们管理对象.从而 ...
- GitHub 新手教程 三,Git Bash
1,通过 开始菜单 启动 Git Bash,或者 在 cmd 下执行以下命令: D:\SoftWare\Git\git-bash.exe --cd-to-home (D:\SoftWare\Git 是 ...
- Spring MVC新手教程(二)
第一篇文章宏观讲了Spring MVC概念,以及分享了一个高速入门的样例. 这篇文章主要来谈谈Spring MVC的配置文件. 首先来谈谈web.xml: web项目启动时自己主动载入到内存中的信息, ...
- ROS探索总结(三)——ROS新手教程【转】
转自:http://blog.csdn.net/hcx25909/article/details/8811313 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 一ROS的 ...
- GitHub 新手教程 四,Git GUI 新手教程(1),OpenSSH Public Key
1,从开始菜单 启动 Git GUI,或者运行: D:\soft\Git\cmd\git-gui.exe(D:\soft\Git 为您的 GitHub 安装文件夹) 2,获取 SSH 密钥: 3,点击 ...
- 【SSH系列】深入浅出spring IOC中三种依赖注入方式
spring的核心思想是IOC和AOP,IOC-控制反转,是一个重要的面向对象编程的法则来消减计算机程序的耦合问题,控制反转一般分为两种类型,依赖注入和依赖查找,依赖什么?为什么需要依赖?注入什么?控 ...
- spring IOC中三种依赖注入方式
Spring的核心思想是IOC和AOP,IOC-控制反转,是一个重要的面向对象编程的法则,用来消减计算机程序之间的耦合问题,控制反转一般分为两种类型,依赖注入和依赖查找,依赖什么?为什么需要依赖?注入 ...
随机推荐
- linux top 的用法
本篇博文主要讲解有关top命令,top命令的主要功能是查看进程活动状态以及一些系统状况. TOP是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终 ...
- linux 查看内存和cpu
Linux查看CPU和内存使用情况 在系统维护的过程中,随时可能有需要查看 CPU 使用率,并根据相应信息分析系统状况的需要.在 CentOS 中,可以通过 top 命令来查看 CPU 使用状况.运行 ...
- NS2学习笔记(五)
对无线网络,生成nam文件要使用namtrace-all-wireless, 而不是namtrace-all: set nf [open test_1.nam w] $ns_ namtrace-all ...
- Android内存管理(10)MAT: 基本教程
原文: http://help.eclipse.org/mars/index.jsp?topic=%2Forg.eclipse.mat.ui.help%2Fgettingstarted%2Fbasic ...
- 大数据插入Excel报错处理
发现问题: 最近运行程序时,发现了一个问题,就是在导出excel时,报了一下错误 分析问题: 原来是由于NPOI这个动态库导致的,然后看了下版本,发现是1.2.5.然后百度了下,发现这个版本的NPOI ...
- MVC系列学习(九)-DTO的使用
本次学习用的数据库,如下 1.什么是DTO:DataTransferObject 即数据传输对象,服务端的客户端的通信,自动定义个小的实体类,里面只包含我们需要传输的属性 2.不用DTO会有什么问题 ...
- hibernate annotation 生成uuid主键
JPA标准方式下,不可以生成uuid类型的主键,但是hibernate提供了一些方式生成uuid主键,具体如下: 1.主键生成器 @GeneratedValue(generator=" ...
- mongoDB 删除集合后,空间不释放的解决方法
mongoDB 删除集合后,空间不释放,添加新集合,没有重新利用之前删除集合所空出来的空间,也就是数据库大小只增不减. 方法有: 1.导出导入 dump & restore 2.修复数据库 r ...
- JS——input标签注册事件
注意:淘宝的lable是用定位制作的,事件是oninput事件 <!DOCTYPE html> <html> <head lang="en"> ...
- CaffeMFC:caffe.pb.h(2525): error C2059: syntax error : 'constant'
下边的语句会报 syntax error : 'constant'. static const DimCheckMode STRICT = V1LayerParameter_DimCheckMode_ ...