1,新建一个Java Project 导入如下jar包和apache-commons-logging包

2, 在src目录下创建一个beans.xml的配置文件,先加入schema

spring-beans-3.2.4.RELEASE.jar/org.springframework.beans.factory.xml/spring-beans-version.xsd文件,可以放到本地的dtd目录中,然后引入.

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans
  5. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
  6.  
  7. <!-- 相当于 HelloWorld hello =new HelloWorld()-->
  8. <bean id="hello" class="com.yangw.spring.model.HelloWorld"></bean>
  9.  
  10. </beans>

3,创建一个对象HelloWorld

  1. package com.yangw.spring.model;
  2.  
  3. public class HelloWorld {
  4.  
  5. public String hello(){
  6. return "hello world";
  7. }
  8. }

4,在beans.xml中创建对象

  1. <!-- 相当于 HelloWorld hello =new HelloWorld()-->
  2. <bean id="hello" class="com.yangw.spring.model.HelloWorld"></bean>

5,创建测试类,完成测试

  1. package com.yangw.spring.test;
  2.  
  3. import org.junit.Test;
  4. import org.springframework.beans.factory.BeanFactory;
  5. import org.springframework.context.support.ClassPathXmlApplicationContext;
  6.  
  7. import com.yangw.spring.model.HelloWorld;
  8.  
  9. public class TestSpring {
  10. @Test
  11. public void test01(){
  12.  
  13. //创建Spring工厂
  14. BeanFactory factory= new ClassPathXmlApplicationContext("beans.xml");
  15. //通过工厂获取Spring的对象
  16. HelloWorld hello = factory.getBean("hello", HelloWorld.class);// 这个字符串参数是bean.xml中的id
  17. System.out.println(hello.hello());
  18. }
  19. }

6, scope属性的用处

  1. <!-- bean标签中有一个属性 scope用来表示范围的 (singleton单例[默认],prototype多例)-->
  2. <bean id="hello" class="com.yangw.spring.model.HelloWorld" ></bean>

7,下面是一个User的action-service-dao的完整过程演示

1)beans.xml文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans
  5. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
  6.  
  7. <!-- bean标签中有一个属性 scope用来表示范围的 (singleton单例[默认],prototype多例)-->
  8.  
  9. <!-- 将所有的类交给Spring管理,并且对需要注入的完成依赖注入 -->
  10. <bean id="userDao" class="com.yangw.spring.dao.UserDao" />
  11. <bean id="userService" class="com.yangw.spring.service.UserService">
  12. <!-- name中的值会在userService对象中调用setXXX()方法完成注入 -->
  13. <property name="userDao" ref="userDao" />
  14. </bean>
  15. <!-- 对于userAction而言,里面的属性值状态会根据不同的线程得到不同的值,因此应该使用多例 -->
  16. <bean id="userAction" class="com.yangw.spring.action.UserAction" scope="prototype">
  17. <property name="userService" ref="userService" />
  18. </bean>
  19.  
  20. </beans>

2)User对象

  1. package com.yangw.spring.model;
  2.  
  3. public class User {
  4.  
  5. private int id;
  6. private String username;
  7.  
  8. public User(int id, String username) {
  9.  
  10. this.id = id;
  11. this.username = username;
  12. }
  13. public User() {
  14.  
  15. }
  16.  
  17. public int getId() {
  18. return id;
  19. }
  20. public void setId(int id) {
  21. this.id = id;
  22. }
  23. public String getUsername() {
  24. return username;
  25. }
  26. public void setUsername(String username) {
  27. this.username = username;
  28. }
  29.  
  30. @Override
  31. public String toString() {
  32. return "User [id=" + id + ", username=" + username + "]";
  33. }
  34.  
  35. }

3)UserDao ,接口略去不再这里写了

  1. package com.yangw.spring.dao;
  2.  
  3. import com.yangw.spring.model.User;
  4.  
  5. public class UserDao implements IUserDao {
  6.  
  7. @Override
  8. public void add(User user) {
  9.  
  10. System.out.println("add :"+user);
  11. }
  12.  
  13. @Override
  14. public void delete(int id) {
  15.  
  16. System.out.println("delete :"+id);
  17. }
  18.  
  19. @Override
  20. public User load(int id) {
  21. System.out.println("load :"+id);
  22. return null;
  23. }
  24.  
  25. }

4)UserService

  1. package com.yangw.spring.service;
  2.  
  3. import com.yangw.spring.dao.IUserDao;
  4. import com.yangw.spring.model.User;
  5.  
  6. public class UserService implements IUserService {
  7.  
  8. private IUserDao userDao ;
  9. @Override
  10. public void add(User user) {
  11.  
  12. userDao.add(user);
  13. }
  14.  
  15. @Override
  16. public void delete(int id) {
  17.  
  18. userDao.delete(id);
  19. }
  20.  
  21. @Override
  22. public User load(int id) {
  23.  
  24. return userDao.load(id);
  25.  
  26. }
  27.  
  28. public IUserDao getUserDao() {
  29. return userDao;
  30. }
  31.  
  32. public void setUserDao(IUserDao userDao) {
  33. this.userDao = userDao;
  34. }
  35.  
  36. }

5)UserAction

  1. package com.yangw.spring.action;
  2.  
  3. import com.yangw.spring.model.User;
  4. import com.yangw.spring.service.IUserService;
  5.  
  6. public class UserAction {
  7.  
  8. private int id;
  9. private User user;
  10. private IUserService userService;
  11.  
  12. public void add(){
  13. userService.add(user);
  14. }
  15.  
  16. public void delete(){
  17. userService.delete(id);
  18. }
  19.  
  20. public void load(){
  21. User u=userService.load(id);
  22. System.out.println(u);
  23. }
  24.  
  25. public int getId() {
  26. return id;
  27. }
  28.  
  29. public void setId(int id) {
  30. this.id = id;
  31. }
  32.  
  33. public User getUser() {
  34. return user;
  35. }
  36.  
  37. public void setUser(User user) {
  38. this.user = user;
  39. }
  40.  
  41. public IUserService getUserService() {
  42. return userService;
  43. }
  44.  
  45. public void setUserService(IUserService userService) {
  46. this.userService = userService;
  47. }
  48.  
  49. }

6)测试

  1. package com.yangw.spring.test;
  2.  
  3. import org.junit.Test;
  4. import org.springframework.beans.factory.BeanFactory;
  5. import org.springframework.context.support.ClassPathXmlApplicationContext;
  6.  
  7. import com.yangw.spring.action.UserAction;
  8. import com.yangw.spring.model.HelloWorld;
  9. import com.yangw.spring.model.User;
  10.  
  11. public class TestSpring {
  12.  
  13. //1,创建Spring工厂
  14. BeanFactory factory= new ClassPathXmlApplicationContext("beans.xml");
  15.  
  16. @Test
  17. public void testUser(){
  18.  
  19. //2,通过工厂获取Spring的对象
  20. UserAction userAction = factory.getBean("userAction", UserAction.class);
  21.  
  22. User u1=new User(1,"yangw");
  23. userAction.setUser(u1);
  24. userAction.add();
  25. }
  26. }

8, 一些简单属性的注入使用 value属性而不是ref属性

  1. <bean id="user" class="com.yangw.spring.model.User">
  2. <!-- 为user设置一些属性值,会调用对象的setXXX()注入值,使用value属性 -->
  3. <property name="id" value="1" />
  4. <property name="username" value="tiantian" />
  5. <!-- 还可以注入list这种列表 -->
  6. <property name="names">
  7. <list>
  8. <value>11111</value>
  9. <value>22222</value>
  10. <value>33333</value>
  11. </list>
  12. </property>
  13. </bean>
  14. <!-- 对于userAction而言,里面的属性值状态会根据不同的线程得到不同的值,因此应该使用多例 -->
  15. <bean id="userAction" class="com.yangw.spring.action.UserAction" scope="prototype">
  16. <property name="userService" ref="userService" />
  17. <property name="user" ref="user"></property>
  18. </bean>

9, 基于annotation的注入

  1. <beans xmlns="http://www.springframework.org/schema/beans"
  2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xmlns:context="http://www.springframework.org/schema/context"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans
  5. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
  6. http://www.springframework.org/schema/context
  7. http://www.springframework.org/schema/context/spring-context-3.0.xsd">
  8.  
  9. <!--1, 打开Spring的annotation -->
  10. <context:annotation-config/>
  11. <!-- 2, 设定Spring去那些包中找annotation -->
  12. <context:component-scan base-package="com.yangw.spring" />
  13. </beans>
  1. //相当于 <bean id="userDao" class="com.yangw.spring.dao.UserDao"/>
  2. //Component是通用的,一般dao层我们使用
  3. //@Component("userDao")
  4. @Repository("userDao")
  5. public class UserDao implements IUserDao {
  6.  
  7. }
  1. @Service("userService")
  2. public class UserService implements IUserService {
  3.  
  4. @Resource
  5. //@Autowired 建议使用Resource,Resource默认通过名称注入
  6. private IUserDao userDao ;
  7. //其实也可以在set方法上面进行注入
  8.  
  9. }
  1. @Controller("userAction")
  2. @Scope("prototype")
  3. public class UserAction {
  4.  
  5. private int id;
  6. private User user;
  7. @Resource
  8. private IUserService userService;
  9.  
  10. }
  1. public class TestSpring2 {
  2.  
  3. //1,创建Spring工厂
  4. BeanFactory factory= new ClassPathXmlApplicationContext("beans2.xml");
  5.  
  6. @Test
  7. public void testUser(){
  8.  
  9. //2,通过工厂获取Spring的对象
  10. UserAction userAction = factory.getBean("userAction", UserAction.class);
  11.  
  12. User u1=new User(1,"yangw");
  13. userAction.setUser(u1);
  14. userAction.add();
  15. }
  16. }

Spring01-IOC的更多相关文章

  1. Spring-01 注解实现IOC

    Spring框架四大原则 使用pojo进行轻量级和最小侵入式开发. 通过依赖注入和基于接口编程实现松耦合. 使用AOP和默认习惯进行声明式编程. 使用AOP和模板(template)减少模式化代码. ...

  2. Spring01——你应该了解的,有关 IOC 容器的一切

    从本文开始,将开始介绍关于 Spring 的一些常见知识点.关注我的公众号「Java面典」,每天 10:24 和你一起了解更多 Java 相关知识点. 在如今的 Java Web 开发中,Spring ...

  3. Spring----01. 入门知识,IoC/DI

    1.spring两个最基本概念:依赖注入DI.面向切面AOP 2.spring通过上下文Application Context装配bean,实现方式的区别是如何加载它们的配置信息, ClassPath ...

  4. Spring学习总结(一)——Spring实现IoC的多种方式

    控制反转IoC(Inversion of Control),是一种设计思想,DI(依赖注入)是实现IoC的一种方法,也有人认为DI只是IoC的另一种说法.没有IoC的程序中我们使用面向对象编程对象的创 ...

  5. Spring实现Ioc的多种方式--控制反转、依赖注入、xml配置的方式实现IoC、对象作用域

    Spring实现Ioc的多种方式 一.IoC基础 1.1.概念: 1.IoC 控制反转(Inversion of Control) IoC是一种设计思想. 2.DI 依赖注入 依赖注入是实现IoC的一 ...

  6. 学习AOP之透过Spring的Ioc理解Advisor

    花了几天时间来学习Spring,突然明白一个问题,就是看书不能让人理解Spring,一方面要结合使用场景,另一方面要阅读源代码,这种方式理解起来事半功倍.那看书有什么用呢?主要还是扩展视野,毕竟书是别 ...

  7. 【调侃】IOC前世今生

    前些天,参与了公司内部小组的一次技术交流,主要是针对<IOC与AOP>,本着学而时习之的态度及积极分享的精神,我就结合一个小故事来初浅地剖析一下我眼中的“IOC前世今生”,以方便初学者能更 ...

  8. 深入理解DIP、IoC、DI以及IoC容器

    摘要 面向对象设计(OOD)有助于我们开发出高性能.易扩展以及易复用的程序.其中,OOD有一个重要的思想那就是依赖倒置原则(DIP),并由此引申出IoC.DI以及Ioc容器等概念.通过本文我们将一起学 ...

  9. 自己实现简单Spring Ioc

    IoC则是一种 软件设计模式,简单来说Spring通过工厂+反射来实现IoC. 原理简单说明: 其实就是通过解析xml文件,通过反射创建出我们所需要的bean,再将这些bean挨个放到集合中,然后对外 ...

  10. 使用Microsoft的IoC框架:Unity来对.NET应用进行解耦

    1.IoC/DI简介 IoC 即 Inversion of Control,DI 即 Dependency Injection,前一个中文含义为控制反转,后一个译为依赖注入,可以理解成一种编程模式,详 ...

随机推荐

  1. jQuery选择器使用习惯

    http://www.cnblogs.com/fredlau/archive/2009/03/19/1416327.html

  2. How to make sure your machine is always online without sleep

    1. Create a "NeverOff" power plan: Control Panle->System and Security->Power Options ...

  3. SLF4J源码解析-LoggerFactory(二)

    承接前文SLF4J源码解析-LoggerFactory(一),本文则主要针对获取ILoggerFactory对象作下简单的分析 LoggerFactory#getILoggerFactory() 源码 ...

  4. Spring(三)--AOP【面向切面编程】、通知类型及使用、切入点表达式

    1.概念:Aspect Oriented Programming 面向切面编程 在方法的前后添加方法   2.作用:本质上来说是一种简化代码的方式      继承机制      封装方法      动 ...

  5. Spring MVC控制层传递对象后在JSP页面中的取值方法

    List<Order> orders = new ArrayList<Order>(); for (int i = 0; i < 3; i++) { Order t = ...

  6. javascript基础进阶——执行环境及作用域链

    概念 执行环境 执行环境定义了变量或函数有权访问的其他函数,决定了他们各自的行为.每个执行环境都有一个与之关联的变量对象. 变量对象 环境中定义的所有变量和函数都保存在这个对象中. 全局执行环境 全局 ...

  7. JDK+Apache+Tomcat+MySQL配置 一起来学习吧

    配置JDK1.8+Apache2.4+Tomcat8.0+mySQL5.1,网上的资料非常繁杂,花费几天时间配置成功,汇总记录. 操作系统:CentOS6.5 预先下载最新版软件: apache-to ...

  8. 使用CefSharp 在C#用户控件中嵌入Chrome浏览器使用方法

    CEF(Chromium Embedded Framework, 嵌入式Chromium框架)是C/C++开发的库 目前 Google Chrome(Google浏览器),Chromium浏览器,Op ...

  9. Java jdk 快速配置

    JAVA_HOME C:\Program Files\Java\jdk1.8.0_92   Path %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;   CLASSPATH ...

  10. Angular+ionic2 web端 启动程序出现短暂 白屏或黑屏 的处理小妙招

    在ionic2项目启动是会出现短暂的白屏或者黑屏,虽然很短,但是用户体验不太好.上网查了相关的资料,都是针对打包APP的解决办法,针对浏览器端使用的项目没有效果,所以自己写了样式,巧妙的避开这个问题, ...