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-控制反转,是一个重要的面向对象编程的法则,用来消减计算机程序之间的耦合问题,控制反转一般分为两种类型,依赖注入和依赖查找,依赖什么?为什么需要依赖?注入 ...
随机推荐
- 【知识总结】后缀数组(Suffix_Array)
又是一个学了n遍还没学会的算法-- 后缀数组是一种常用的处理字符串问题的数据结构,主要由\(sa\)和\(rank\)两个数组组成.以下给出一些定义: \(str\)表示处理的字符串,长度为\(len ...
- 【洛谷2257/BZOJ2820】YY的GCD(数论/莫比乌斯函数)
题目: 洛谷2257 预备知识:莫比乌斯定理(懵逼乌斯定理) \(\mu*1=\epsilon\)(证bu明hui略zheng) 其中(我校学长把\(\epsilon(x)\)叫单位函数但是为什么我没 ...
- ACM_滚动AC
滚动AC Time Limit: 2000/1000ms (Java/Others) Problem Description: 小光最近拉了几个同学入ACM的坑,为鼓励A题,就增加奖励制度:每AC三道 ...
- android sqlite中判断某个表是否存在
<span style="font-size:18px;">sqlite 中判断某个表是否存在的方法,贴出来供大家参考 /** * 判断某张表是否存在 * @param ...
- 卸载Mysql connect 6.9.9
我们在卸载MySQL的时候,会发现有一个名为“Connector Net X.X.X”(如:Connector Net 6.9.9)软件总是卸载不成功,下面我们来看看解决方法:1. 在C盘的目录下,有 ...
- Android RecyclerView遇到notifyDataSetChanged无效时的解决方案
一.简述 不管AbsListView(ListView.GridView)或是新出的RecyclerView,在使用notifyDataSetChanged方法更新列表数据时,一定要保证数据为同个对象 ...
- Android基础TOP4_1:点击物理按钮弹出退出提示框
JAVA: public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedIns ...
- JS高级——缓存原理
缓存的原理 1.就是将常用的数据存储起来,提供便利,减少查询次数和所消耗的事件 2.利用作用的原理所产生的数据库:非关系型数据库(内存型数据库) MongoDB.Redis等 3.还有网站静态页面缓存 ...
- Android ExpandableListView的使用详解
ExpandableListView(可扩展的ListView) ExpandableListVivew是ListView的子类,它在普通ListView的基础上进行了扩展,它把应用中的列表项分为几组 ...
- logback日志配置文件
application.properties application.properties logback-spring.xml <?xml version="1.0" en ...