1、导入spring的dist中的jar包和commons-logging包
2、在src目录下创建相应的beans.xml
3、为beans.xml添加相应的schema
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
</beans>
4、新建一个类
5、在beans.xml中创建对象
<!-- 
创建如下bean等于完成了:HelloWorld helloWorld = new HelloWorld
-->
<bean id="helloWorld" class="org.zttc.itat.spring.model.HelloWorld"/>
6、在测试类中使用这个对象
6.1、创建Spring的工厂
private BeanFactory factory = new ClassPathXmlApplicationContext("beans.xml");
6.2、通过Spring工厂获取相应的对象
//此处getBean中的helloWorld就是beans.xml配置文件中的id
HelloWorld hello = factory.getBean("helloWorld",HelloWorld.class);
//此时的hello对象就是被Spring说管理的对象
System.out.println(hello.hello());

代码如下:
 
model:
package org.zttc.itat.spring.model;
public class User {
private int id;
private String username;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public User() {
}
public User(int id, String username) {
super();
this.id = id;
this.username = username;
}
@Override
public String toString() {
return "User [id=" + id + ", username=" + username + "]";
}
}
dao:
//抽象类
package org.zttc.itat.spring.dao;
import org.zttc.itat.spring.model.User;
public interface IUserDao {
public void add(User user);
public void delete(int id);
public User load(int id);
}

//实现类
package org.zttc.itat.spring.dao;
import org.zttc.itat.spring.model.User;
public class UserDao implements IUserDao {
@Override
public void add(User user) {
System.out.println("添加了"+user);
}
@Override
public void delete(int id) {
System.out.println("delete :"+id);
}
@Override
public User load(int id) {
System.out.println("load:"+id);
return null;
}
}
service:
//抽象类
package org.zttc.itat.spring.service;
import org.zttc.itat.spring.model.User;
public interface IUserService {
public void add(User user);
public void delete(int id);
public User load(int id);
}

//实现类
package org.zttc.itat.spring.service;
import org.zttc.itat.spring.dao.IUserDao;
import org.zttc.itat.spring.model.User;
public class UserService implements IUserService {
  //此处类是要依靠spring来注入的。
private IUserDao userDao;
//相应的get set 方法,这个必须有
public IUserDao getUserDao() {
return userDao;
}
 
public void setUserDao(IUserDao userDao) {
this.userDao = userDao;
}
@Override
public void add(User user) {
userDao.add(user);
}
@Override
public void delete(int id) {
userDao.delete(id);
}
@Override
public User load(int id) {
return userDao.load(id);
}
}

action:
package org.zttc.itat.spring.action;
import java.util.List;
import org.zttc.itat.spring.model.User;
import org.zttc.itat.spring.service.IUserService;
public class UserAction {
  //此处四个也是要依赖spring的注入
private User user;
private IUserService userService;
private int id;
private List<String> names;
public List<String> getNames() {
return names;
}
public void setNames(List<String> names) {
this.names = names;
}
public IUserService getUserService() {
return userService;
}
public void setUserService(IUserService userService) {
this.userService = userService;
}
public UserAction() {
}
public UserAction(IUserService userService) {
super();
this.userService = userService;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
//public IUserService getUserService() {
//return userService;
//}
//
//public void setUserService(IUserService userService) {
//this.userService = userService;
//}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public void add() {
System.out.println(id);
System.out.println(names);
userService.add(user);
}
public void delete() {
userService.delete(id);
}
public void load() {
userService.load(id);
}
}

testSpring:
package org.zttc.itat.spring.test;
import org.junit.Test;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.zttc.itat.spring.action.UserAction;
import org.zttc.itat.spring.model.HelloWorld;
import org.zttc.itat.spring.model.User;
public class TestSpring {
//创建Spring的工厂
private BeanFactory factory = new ClassPathXmlApplicationContext("beans.xml");
@Test
public void testHello() {
//通过工厂获取Spring的对象
//此处getBean中的helloWorld就是beans.xml配置文件中的id
//HelloWorld hello = (HelloWorld)factory.getBean("helloWorld");
HelloWorld hello = factory.getBean("helloWorld",HelloWorld.class);
//此时的hello对象就是被Spring说管理的对象
System.out.println(hello.hello());
HelloWorld hello2 = factory.getBean("helloWorld",HelloWorld.class);
//如果在bean中没有作scope的配置,默认是singleton(单例),当把bean中的scope设置为prototype的时候就是多例
System.out.println(hello==hello2);
}
@Test
public void testUser01() {
UserAction ua1 = factory.getBean("userAction", UserAction.class);
User u = new User(1,"悟空");
ua1.setUser(u);
ua1.add();
UserAction ua2 = factory.getBean("userAction", UserAction.class);
ua2.add();
}
}

beam.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!-- 创建了一个User对象user,id为1,username为 八戒 ,如果要注入值不使用ref而是使用value -->
<bean id="user" class="org.zttc.itat.spring.model.User">
<property name="id" value="2"/>
<property name="username" value="八戒"/>
</bean>
<!-- 创建了一个userDao>
<bean id="userDao" class="org.zttc.itat.spring.dao.UserDao"></bean>
<!-- autowire=byName表示会根据name来完成注入,
byType表示根据类型注入 ,使用byType注入如果一个类中有两个同类型的对象就会抛出异常
所以在开发中一般都是使用byName
虽然自动注入可以减少配置,但是通过bean文件无法很好了解整个类的结果,所以不建议使用autowire-->
 
        <!--创建一个userService-->
<bean id="userService" class="org.zttc.itat.spring.service.UserService">
<!-- name中的值会在userService对象中调用setXX方法来注入,诸如:name="userDao"
在具体注入时会调用setUserDao(IUserDao userDao)来完成注入
ref="userDao"表示是配置文件中的bean中所创建的DAO的id -->
 
<property name="userDao" ref="userDao"></property>
</bean>
<!-- 对于UserAction而言,里面的属性的值的状态会根据不同的线程得到不同的值,所以应该使用多例 -->
<bean id="userAction" class="org.zttc.itat.spring.action.UserAction" scope="prototype">
<property name="userService" ref="userService"/>
<property name="user" ref="user"/>
<property name="id" value="12"/>
<!-- 同样可以注入列表,但是也不常用 -->
<property name="names">
<list>
<value>aaa</value>
<value>bbb</value>
<value>ccc</value>
</list>
</property>
</bean>
<!-- 以下是使用构造函数来注入,不常用,基本都是使用set方法注入 -->
<!-- <bean id="userAction" class="org.zttc.itat.spring.action.UserAction" scope="prototype">
<constructor-arg ref="userService"/>
</bean> -->
</beans>

 

转载于:https://www.cnblogs.com/yujianjingjing/archive/2013/03/10/2953067.html

spring-ioc-xml相关推荐

  1. idea中生成spring的 xml配置文件_【132期】面试再被问到Spring容器IOC初始化过程,就拿这篇文章砸他~...

    点击上方"Java面试题精选",关注公众号 面试刷图,查缺补漏 >>号外:往期面试题,10篇为一个单位归置到本公众号菜单栏->面试题,有需要的欢迎翻阅 阶段汇总集 ...

  2. spring IOC基本配置(xml配置和注解配置)

    目录 Spring IOC IOC是什么 IOC可以做什么 依赖注入 IOC和DI IOC容器 Bean 配置IOC容器 spring ioc 依赖 XML配置 实例化容器 使用容器 xml配置详解 ...

  3. Spring IOC容器-Bean管理——基于XML方式

    Spring IOC容器-Bean管理--基于XML(续集) 1.IOC 操作 Bean 管理(FactoryBean) ​ 1).Spring 有两种类型 bean,一种普通 bean,另外一种工厂 ...

  4. 一步一步手绘Spring IOC运行时序图二(基于XML的IOC容器初始化)

    相关内容: 架构师系列内容:架构师学习笔记(持续更新) 一步一步手绘Spring IOC运行时序图一(Spring 核心容器 IOC初始化过程) 一步一步手绘Spring IOC运行时序图二(基于XM ...

  5. Spring IoC和DI XML方式 注解方式 依赖注入 AOP面向切面

    初识Spring框架 时代变迁 原始时代我们用一个jsp搞定一切,但如此开发大型项目时我们遇到了问题,前端美化的代码和后端的代码交织,代码中又有html.js.css样式,又有业务逻辑和数据库访问代码 ...

  6. Spring Ioc 源码分析(一)- XML 解析

    2019独角兽企业重金招聘Python工程师标准>>> 注 :源码对应版本为 4.2.8.RELEASE 引入Spring依赖的时候,是否发现spring依赖有spring-bean ...

  7. spring IOC创建对象方式

    spring IOC创建对象方式 通过无参构造来创建 验证方法: 创建实体类: public class User {private String name;public User() {System ...

  8. spring ioc原理分析

    spring ioc原理分析 spring ioc 的概念 简单工厂方法 spirng ioc实现原理 spring ioc的概念 ioc: 控制反转 将对象的创建由spring管理.比如,我们以前用 ...

  9. Spring IoC是如何进行依赖注入的

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 依赖注入(DI) DI(Dependency Injection) ...

  10. 面试被问烂的 Spring IOC(求求你别再问了)

    点击上方"方志朋",选择"置顶或者星标" 你的关注意义重大! 作者:莫那·鲁道 链接:http://thinkinjava.cn 广义的 IOC IoC(Inv ...

最新文章

  1. 28 模态框拖动案例
  2. python时间序列峰值检测_python – 二维数组中的峰值检测
  3. 程序设计语言python语言概述
  4. 倾向得分匹配的stata命令_计量方法的适用条件汇总(二):倾向得分匹配
  5. hihoCoder 1175 拓扑排序
  6. 黑马程序员——JAVA学习笔记四(继承、接口、内部类)
  7. Kitti数据测试_视觉/IMU/LiDAR融合
  8. LiveGBS国标GB/T28181流媒体平台华为IPC设备GB35114配置接入说明
  9. 基于mvc架构的劳务管理系统
  10. 单模光纤和多模光纤的对比
  11. html和flash播放器区别,flash播放器和一般播放器有什么区别
  12. opencv 数据库裁剪图片
  13. 计算机的隐藏功能应用,关于Mac电脑的8个神奇隐藏功能,你知道几个?
  14. 计算机专业大学生每天睡多久,大学睡眠时间最少的10大专业,没想到第一名竟是......
  15. 常见的dataframe选取行列方式
  16. 为你推荐10款开发常用的代码编辑器
  17. c#根据年月获取所有日期集合、根据年份计算总周数,根据年份和周数获取一周的开始及结束时间
  18. 复旦大学2018--2019学年第二学期(18级)高等代数II期末考试第六大题解答
  19. seata: endpoint format should like ip:port
  20. 快速了解 Java 9 - 16 新特性,助你脱离内卷

热门文章

  1. Strategy模式与Delegate委托
  2. 防止对 Visual Basic .NET 或 C# 代码进行反相工程
  3. 获取窗口句柄模拟鼠标点击
  4. [PY3]——内置数据结构(3)——字符串及其常用操作
  5. Java设计模式-回调函数和观察者模式
  6. 【编程之美】2.12快速寻找满足条件的两个数
  7. Python sys.path详解
  8. Effective C++条款39: 避免 向下转换 继承层次
  9. c# 调用SQL Server存储过程返回值(转)
  10. web developer tips (51):使用vs2005和IE8进行调试