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 容器 并不是只有一个 ...
随机推荐
- Maven配置文件说明
<projectxmlns="http://maven.apache.org/POM/4.0.0 " xmlns:xsi="http://www.w3. ...
- 利用HTML5开发Android(6)---构建HTML5离线应用
需要提供一个cache manifest文件,理出所有需要在离线状态下使用的资源例如 Manifest代码 CACHE MANIFEST #这是注释 images/sound-icon.png ima ...
- C# 浅拷贝与深拷贝
浅拷贝:给对象拷贝一份新的对象引用地址:(只是给一个对象多起了个名字,所以,当改变拷贝的某个属性的时候,原对象的对应属性亦会改变).浅拷贝的定义—— 只对值类型(或string)类型分配新的内存地址: ...
- 不间断图片滚动JS
(从已经死了一次又一次终于挂掉的百度空间人工抢救出来的,发表日期 2014-05-07) MSClass是一款通用不间断滚动JS封装类,几乎支持目前所有流行风格的图片或文字滚动,横向/竖向/连续/间断 ...
- C++的优秀特性5:模版
(转载请注明原创于潘多拉盒子) C++是强类型语言,而且恐怕是强类型语言里面类型最严格的.这意味着:1. C++变量的类型在定义时就确定了:2. 该类型在后续的生命期中不会改变.比如: int n = ...
- Owin管道与asp.net管道模型
------2016.3.6 更新 文中提到没有Microsoft.Owin.Host.SystemWeb 这个dll 便不会加载Startup.Configuration,因为这个dll 其中有个O ...
- BZOJ 1497: [NOI2006]最大获利 最小割
1497: [NOI2006]最大获利 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=1497 Description 新的技术正冲击着手 ...
- C#中Thread类中Join方法的理解(转载)
指在一线程里面调用另一线程join方法时,表示将本线程阻塞直至另一线程终止时再执行 比如 using System; namespace TestThreadJoin { class Pro ...
- asmack
https://github.com/zhuqizhi/tlbs1409 https://github.com/maxting/IM_Project150126 https://github.com/ ...
- jQuery.validate的this.optional(element)作用
今天使用同事扩展jquery validate函数mobile验证时,require值传入false发现也会验证, 去掉mobile后就没这个问题,把mobile替换成自带的digits也没有这个问题 ...