一: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容器三的更多相关文章

  1. Spring学习总结四——SpringIOC容器四

    一:spring容器给bean对象注入属性值 1:注入基本属性值 a. 创建MessageBean类: /** * */ package com.hlcui.dao; /** * @author Ad ...

  2. Spring学习总结二——SpringIOC容器二

    一:指定bean的依赖关系 例如examplebean对象依赖examplebean1对象,那么在创建examplebean对象之前就 需要先创建examplebean1对象. 1:创建Example ...

  3. Spring学习总结一——SpringIOC容器一

    什么是spring spring是一个开源的轻量级的应用开发框架,它提供了IOC和AOP应用,可以减少组件之间的耦合度,即 解耦,spring容器可以创建对象并且管理对象之间的关系. 一:实例化spr ...

  4. Spring学习总结五——SpringIOC容器五

    一:spring组件扫描 可以使用注解的方式,代替在xml配置文件配置bean,可以减少配置文件的书写,只需要在spring容器配置 文件中配置<context:component-scan b ...

  5. 三、spring成长之路——springIOC容器详解(上)

    目录 一.springIOC 一.springIOC 控制反转和依赖注入: ​ 简单的说就是将对象的创建,属性的的设置交给spring容器进行管理,而不再由用户自己创建,当用户需要使用该接口或者类的时 ...

  6. Spring学习之实例化bean的三种方式

    实例化bean的三种方式 构造器实例化bean Person.java public class Person { private String name; private Integer age; ...

  7. Spring学习--通过注解配置 Bean (三)

    组件装配: <context:component-sacan> 元素还会自动注册 AutowiredAnnotationBeanPostProcesser 实例 , 该实例可以自动装配具有 ...

  8. 四、spring成长之路——springIOC容器(下)

    目录 5.spring注解开发(Spring扩展知识) 5.1定义配置类:@Configuration 声明一个类为IOC容器 @Bean定义一个Bean 5.2.按照条件进行注入 5.3.@Impo ...

  9. Spring学习之旅(二)--容器

    在 Spring 应用中,所有的对象都在 Spring 容器(container) 里,容器负责对象的创建.配置.装配并管理它们的整个生命周期. Spring 容器 Spring 容器 并不是只有一个 ...

随机推荐

  1. Xen入门系列一【使用Xen4CentOS 在 Centos 6 上安装 Xen】

    最近在学习Hadoop,在Win7下用VMware搭了三台虚拟机好不容易装好了Hadoop结果跑个两个单词的wordcount就跑了十分钟,郁闷啊,于是开始寻找效能更好的虚拟化解决方案,然后选定了Xe ...

  2. 学习总结(annotation)

    自定义MyAnnotationTest package com.zhanghaobo.annotation; import java.lang.annotation.ElementType; impo ...

  3. 多线程下载网络歌曲&播放歌曲&并用seekbar调节进度&显示歌曲两边的时间

    这里先给一个处理时间格式的代码: /** * 时间的处理 *  * @param time * @return */ public static String getTimeFromInt(int t ...

  4. sessionStorage 、localStorage 和 cookie 之间的区别

    sessionStorage 和 localStorage 是HTML5 Web Storage API 提供的,可以方便的在web请求之间保存数据.有了本地数据,就可以避免数据在浏览器和服务器间不必 ...

  5. RocketMQ在Windows平台下环境搭建

    一.  环境搭建 需要jdk1.6(以上) 64bit, maven, eclipse 二.  RocketMQ项目下载 项目地址:https://github.com/alibaba/RocketM ...

  6. application与cache

    每个项目都有一些全局,常用的信息,而这些信息如果在每次使用时都载入,那必将耗费很大的资源,特别是对访问压力大的系统.因此,这个情况中,把这些全局信息放到缓存中是很必要的,放在缓存中可以使得数据能够很快 ...

  7. VC++内存区域

    转载声明:本文转载自http://blog.csdn.net/sjxbf/article/details/6441730 一.预备知识—程序的内存分配 一个由c/c++编译的程序占用的内存分为以下几个 ...

  8. silverlight调用MVC WebApi方法

    1.创建ASP.NET MVC4 Web应用程序,选择WebAPI模板 2.添加silverlight项目 3.新建一个数据模型类,代码如下: using System; using System.C ...

  9. PostgreSQL关闭不了时怎么办

    停止模式分为: smart, fast, immediate : 分别对应着:    SIGTERM, SIGINT, SIGQUIT 信号 当我采用 fast模式无法关机的时候,可以使用如下办法: ...

  10. Codeforces Round #146 (Div. 1) A. LCM Challenge 水题

    A. LCM Challenge 题目连接: http://www.codeforces.com/contest/235/problem/A Description Some days ago, I ...