Spring学习总结三——SpringIOC容器三
一:spring容器自动装配注入
为了减少xml中配置内容,可以使用自动装配注入,代替setter注入,只需要在
bean对象配置中添加属性autoWire即可,那么在类中就会自动扫描setXXX(),实现自动装配注入。
autowire的装配方式分为以下几种:

示例如下:
1:创建UserService类
/**
*
*/
package com.hlcui.service; import com.hlcui.dao.impl.OracleUserDAO;
import com.hlcui.dto.User; /**
* @author Administrator
*
*/
public class UserService { private OracleUserDAO dao; public User login(String username, String pwd) {
try {
User user = dao.findByName(username);
if (pwd != null && pwd.equals(user.getPwd())) {
return user;
}
} catch (Exception e) {
e.printStackTrace();
}
return null; } public OracleUserDAO getDao() {
return dao;
} public void setDao(OracleUserDAO dao) {
this.dao = dao;
} }
2:在applicationContext.xml配置文件配置bean
第一种情况:
通过类型注入byType,那么在UserService类中查找setXXX(A a)方法,然后在spring容器中找A类型对象注入
<!-- 配置userService对象 -->
<bean id="userService" class="com.hlcui.service.UserService"
autowire="byType"></bean>
编写测试方法并运行:
@Test
/**测试spring自动装配注入*/
public void testAutoWire() {
ApplicationContext ac = getApplicationContext();
UserService us = ac.getBean("userService", UserService.class);
User user = us.login("Tom", "123");
System.out.println(user);
}

通过结果可以看出登录成功,说明OracleUserDAO对象成功的通过类型装配注入到了UserService对象中。
第二种情况:
默认情况下就是autowire="no",的情况,就是禁止自动装配,将autowire属性删除
<!-- 配置userService对象 -->
<bean id="userService" class="com.hlcui.service.UserService"></bean>
运行测试方法:

报空指针异常,而且是在login()方法中,dao调用findByName(),所以说明dao这个对象没有注入进来。
第三种情况:
通过byName名称注入,UserService类中setXXX(A a)方法,在spring容器配置文件找与匹配的bean名称,然后将对象注入。
修改配置文件:
<!-- 配置userService对象 -->
<bean id="userService" class="com.hlcui.service.UserService"
autowire="byName"></bean>
因为UserDao对象bean的id为userDao
<!-- 配置userDao对象 -->
<bean id="userDao" class="com.hlcui.dao.impl.OracleUserDAO">
<constructor-arg index="0" ref="jdbcDatasource" />
</bean>
所以UserSerivce类中的属性名字也应该修改为userDao
修改后如下:
/**
*
*/
package com.hlcui.service; import com.hlcui.dao.impl.OracleUserDAO;
import com.hlcui.dto.User; /**
* @author Administrator
*
*/
public class UserService { private OracleUserDAO userDao; public User login(String username, String pwd) {
try {
User user = userDao.findByName(username);
if (pwd != null && pwd.equals(user.getPwd())) {
return user;
}
} catch (Exception e) {
e.printStackTrace();
}
return null; } public OracleUserDAO getUserDao() {
return userDao;
} public void setUserDao(OracleUserDAO userDao) {
this.userDao = userDao;
} }
运行测试方法:

说明UserDao对象成功注入!
二:对spring容器以及三种注入方式做个小结
1:注入方式
setter注入方式:对应的类中必须有setXXX(A a)方法,然后在配置文件bean元素添加property的子元素。
构造器注入:对应的类中必须有有参数构造方法,然后在配置文件bean元素中添加constructor-arg元素,如果有多个
参数,可以写多个并列子元素。
自动装配注入:类中必须有setXXX(A a)方法,然后配置文件bean元素添加属性autowire,可以按照类型或者名称进行
注入。
Spring学习总结三——SpringIOC容器三的更多相关文章
- Spring学习总结四——SpringIOC容器四
一:spring容器给bean对象注入属性值 1:注入基本属性值 a. 创建MessageBean类: /** * */ package com.hlcui.dao; /** * @author Ad ...
- Spring学习总结二——SpringIOC容器二
一:指定bean的依赖关系 例如examplebean对象依赖examplebean1对象,那么在创建examplebean对象之前就 需要先创建examplebean1对象. 1:创建Example ...
- Spring学习总结一——SpringIOC容器一
什么是spring spring是一个开源的轻量级的应用开发框架,它提供了IOC和AOP应用,可以减少组件之间的耦合度,即 解耦,spring容器可以创建对象并且管理对象之间的关系. 一:实例化spr ...
- Spring学习总结五——SpringIOC容器五
一:spring组件扫描 可以使用注解的方式,代替在xml配置文件配置bean,可以减少配置文件的书写,只需要在spring容器配置 文件中配置<context:component-scan b ...
- 三、spring成长之路——springIOC容器详解(上)
目录 一.springIOC 一.springIOC 控制反转和依赖注入: 简单的说就是将对象的创建,属性的的设置交给spring容器进行管理,而不再由用户自己创建,当用户需要使用该接口或者类的时 ...
- Spring学习之实例化bean的三种方式
实例化bean的三种方式 构造器实例化bean Person.java public class Person { private String name; private Integer age; ...
- Spring学习--通过注解配置 Bean (三)
组件装配: <context:component-sacan> 元素还会自动注册 AutowiredAnnotationBeanPostProcesser 实例 , 该实例可以自动装配具有 ...
- 四、spring成长之路——springIOC容器(下)
目录 5.spring注解开发(Spring扩展知识) 5.1定义配置类:@Configuration 声明一个类为IOC容器 @Bean定义一个Bean 5.2.按照条件进行注入 5.3.@Impo ...
- Spring学习之旅(二)--容器
在 Spring 应用中,所有的对象都在 Spring 容器(container) 里,容器负责对象的创建.配置.装配并管理它们的整个生命周期. Spring 容器 Spring 容器 并不是只有一个 ...
随机推荐
- Xen入门系列一【使用Xen4CentOS 在 Centos 6 上安装 Xen】
最近在学习Hadoop,在Win7下用VMware搭了三台虚拟机好不容易装好了Hadoop结果跑个两个单词的wordcount就跑了十分钟,郁闷啊,于是开始寻找效能更好的虚拟化解决方案,然后选定了Xe ...
- 学习总结(annotation)
自定义MyAnnotationTest package com.zhanghaobo.annotation; import java.lang.annotation.ElementType; impo ...
- 多线程下载网络歌曲&播放歌曲&并用seekbar调节进度&显示歌曲两边的时间
这里先给一个处理时间格式的代码: /** * 时间的处理 * * @param time * @return */ public static String getTimeFromInt(int t ...
- sessionStorage 、localStorage 和 cookie 之间的区别
sessionStorage 和 localStorage 是HTML5 Web Storage API 提供的,可以方便的在web请求之间保存数据.有了本地数据,就可以避免数据在浏览器和服务器间不必 ...
- RocketMQ在Windows平台下环境搭建
一. 环境搭建 需要jdk1.6(以上) 64bit, maven, eclipse 二. RocketMQ项目下载 项目地址:https://github.com/alibaba/RocketM ...
- application与cache
每个项目都有一些全局,常用的信息,而这些信息如果在每次使用时都载入,那必将耗费很大的资源,特别是对访问压力大的系统.因此,这个情况中,把这些全局信息放到缓存中是很必要的,放在缓存中可以使得数据能够很快 ...
- VC++内存区域
转载声明:本文转载自http://blog.csdn.net/sjxbf/article/details/6441730 一.预备知识—程序的内存分配 一个由c/c++编译的程序占用的内存分为以下几个 ...
- silverlight调用MVC WebApi方法
1.创建ASP.NET MVC4 Web应用程序,选择WebAPI模板 2.添加silverlight项目 3.新建一个数据模型类,代码如下: using System; using System.C ...
- PostgreSQL关闭不了时怎么办
停止模式分为: smart, fast, immediate : 分别对应着: SIGTERM, SIGINT, SIGQUIT 信号 当我采用 fast模式无法关机的时候,可以使用如下办法: ...
- Codeforces Round #146 (Div. 1) A. LCM Challenge 水题
A. LCM Challenge 题目连接: http://www.codeforces.com/contest/235/problem/A Description Some days ago, I ...