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 容器 并不是只有一个 ...
随机推荐
- EASYUI DATAGRID 多列复选框CheckBox
主要实现: 用的 easyui 1.3.2 实现多个复选框列,各列互不影响.能够实现全选.主要部门用红色标记了的. easyui datagrid 初始化: <script> functi ...
- PaaS平台资源
http://www.vagrantup.com/ http://www.docker.com/
- 2014年QS世界大学排名
新浪教育[微博]讯 近日2014QS世界大学排行榜发布,榜单前十强均为英美名校.其中麻省理工大学以绝对优势位居榜首:英国剑桥大学及帝国理工学院并列排名第二:哈佛大学较去年而言名次略微下降,跌至第四. ...
- C++中C/C++格式化输出
对于不同的机器,一此格式化输出的函数经常会得不到正确的输出,比方小端上的程序在大端上执行等,另外,在日常程序开发时,也会经常被这种小问题而困扰非常久.终于发现是她的问题.不免有点叹息,以下对print ...
- C++ 方法隐藏
1.过载:一个类中,方法名相同,形参表不同的方法. 2.重写:子类与父类的virtual方法,方法名,形参表相同. 3.考虑下面的情况,子类与父类方法名相同. 父类是virtual方法 ...
- C#编写的多生产者多消费者同步问题
// 多个生产者和多个消费者,能生产n个产品的情况 using System; using System.Threading; public class HoldIntegerSynchronized ...
- Fox Roddick interviw Federer before 2013 US Open
talk about Mike Jordan , talk about Tiger Woods, their competitor when people discuss you I love wi ...
- cocos2d-x 3.1.1 学习笔记[3]Action 动作
这些动画貌似都非常多的样子,就所有都创建一次. 代码例如以下: /* 动画*/ auto sp = Sprite::create("card_bg_big_26.jpg"); Si ...
- $(document).ready()使用讨论
<script language="JavaScript" type="text/javascript"> $(document).ready(fu ...
- [Express] Level 3: Massaging User Data
Flexible Routes Our current route only works when the city name argument matches exactly the propert ...