一: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. hdoj 1729 Stone Games(SG函数)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1729 看了题目感觉像Nim,但是有范围限制,有点不知道SG函数该怎么写 看了题解,最后才明白该怎么去理 ...

  2. MVC 小常识

    什么是MVC (模型 视图 控制器)? MVC是一个架构模式,它分离了表现与交互.它被分为三个核心部件:模型.视图.控制器.下面是每一个部件的分工: 视图是用户看到并与之交互的界面. 模型表示业务数据 ...

  3. Odoo constraints 使用教程

    在日常开发Odoo的过程中,我们不免要用到Constraints,中文就是约束. 首先我们来介绍下Odoo里面的两种Constraints. SQL Constraints:就是添加一个数据库的约束. ...

  4. input value的值不可改变

    同样是东钿微信服务平台,使用积分的问题,原来的版本是,默认用户不使用积分,也就没有给input赋值,后面华总说默认让用户使用积分,于是我就信誓旦旦把从后台得到用户可使用的积分赋在input上,后来,用 ...

  5. (《数论及应用1.3》NEFU 116 两仪剑法(最小公倍数&&最大公约数))

    #include <iostream> using namespace std; long long gcd(long long a, long long b){ if(b == 0){ ...

  6. thinkphp 模板显示display和assign的用法

    this->assign('name',$value); //在 Action 类里面使用 assign 方法对模板变量赋值,无论何种变量类型都统一使用 assign 赋值 $this-> ...

  7. SCCM符合性设置

    符合性设置--可以针对注册表值.脚本.文件系统.补丁更新情况进行符合性检查,除了在报表中查看结果外,还可以在CCM客户端 的 配置 中查看符合性评估结果,适合排错1.配置项目---新建针对 注册表值. ...

  8. 从零开始学android开发-项目重命名

    --修改项目名称 选中项目-[refactor]-[rename] --修改package名称 选中需要重命名的包-[refactor]-[rename] --修改gen下面的名称 打开Android ...

  9. Codeforces Gym 100231F Solitaire 折半搜索

    Solitaire 题目连接: http://codeforces.com/gym/100231/ Description 给你一个8*8棋盘,里面有4个棋子,每个棋子可以做一下某个操作之一: 1.走 ...

  10. 我的CMS心路历程,DNN And Umbraco

    在比较了众多CMS系统后,还是把焦点定在DNN和Umbraco两个系统上,这两个系统都可以使用UserControl扩展自己需要的功能. DNN的架构比较复杂,Module.Skin.Containe ...