`
huanglz19871030
  • 浏览: 248663 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

spring IOC的使用

 
阅读更多

 

Ioc和他的作用,简单的来讲,就是由容器控制程序之间的关系,而不是由我们手动编写控制实现中,由程序代码直接操控。这也就是所谓“控制反转”的概念所在:控制权由应用代码中转到了外部容器,控制权的转移,是所谓反转

下面通过添加用户的小例子具体来看,首先配置Spring的环境

1、加入spring的依赖包

(1).SPRING_HOME/dist/spring.jar

(2).SPRING_HOME/lib/log4j/log4j-1.2.14.jar

(3).SPRING_HOME/lib/jakarta-commons/commons-logging.jar

2、提供spring配置文件applicationContext.xml,一个典型的Spring项目需要创建一个或多个Bean配置文件,这些配置文件用于在Spring IOC容器里配置Bean,这个配置文件最好放在classpath目录下。

3、提供log4j.properties配置文件

 

创建项目,写Dao层接口IUserDao.java

Java代码 
  1. public interface IUserDao {  
  2.           public void InsertUser(String username,String password);  
  3. }  

 

 

Dao接口的实现类 UserDaoImpl.java

Java代码 
  1. public class UserDaoImpl implements IUserDao{  
  2.          @Override  
  3.          public void InsertUser(String username, String password){               
  4.               System.out.println("----UserDaoImpl --addUser----");  
  5.          }  
  6.  }  

 

业务层接口IUserManager.java

Java代码 
  1. public interface IUserManager {  
  2.           public void addUser(String username,String password);  
  3. }  

 

业务层接口的实现UserManagerImpl.java

Java代码 
  1. public class UserManagerImpl implements IUserManager {  
  2.       private IUserDao  userDao;  
  3.       @Override  
  4.       public void addUser(String username, String password) {                  
  5.             userDao=new IUserDaoImpl();  
  6.             userDao.InsertUser(username,password);  
  7.       }  
  8.  }  

 

其实从这里就可以看出,业务层其实也是依赖了Dao层的具体实现,没有起到解耦的作用。

 

Client.java

Java代码 
  1. public classClient {  
  2.     public static void main(String[] args) {   
  3.         IUserManager usermanager=new UserManagerImpl();  
  4.         userManager.addUser("wanghuan","password");  
  5.     }  
  6. }  

 

 

从客户端的代码里,我们也可以看出,客户端也还是依赖于业务层的具体实现。接下来我们使用IOC容器。就是将我们的对象放到配置文件里,让Spring知道,从而由Spring来帮我们管理。

Spring 框架的 IOC 容器采用两种方法实现:

(一)【setter方法注入】:通过 JavaBean的属性分配依赖性。

(二)【构造器注入】:依赖性以构造函数的形式提供,不以 JavaBean 属性的形式公开。

首先看setter方法注入,是IOC通过set方法将需要的对象注入。需要提供被注入对象的set方法。

 

Java代码 
  1. Public  class  UserManagerImpl  implements  UserManager {  
  2.     private  IUserDao  userDao;  
  3.     //set方法     
  4.     public void  setUserDao(IUserDao  userDao) {  
  5.        this.userDao = userDao;  
  6.     }  
  7.     @Override  
  8.     public void addUser(String username, String password) {               
  9.       //不需要实例化,直接可以使用  
  10.       userDao.InsertUser(username,password);  
  11.   }  
  12. }  

 

重点是配置Spring的核心配置文件applicationContext.xml,在配置文件中配置上userDao的信息,使得IOC容器自己将UserDao对象注入到UserManagerImpl中。

applicationContext.xml

 

Html代码 
  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.          xmlns:aop="http://www.springframework.org/schema/aop"  
  5.          xmlns:tx="http://www.springframework.org/schema/tx"  
  6.          xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-2.0.xsd  
  7.           http://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-2.0.xsd  
  8.           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">  
  9. <!--id名字自己取,class表示他代表的类,如果在包里的话需要加上包名-->  
  10. <bean id="userManager"  class="UserManagerImpl" >  
  11.     <!—property代表是通过set方法注入,ref的值表示注入的内容-->  
  12.      <property  name="userDao"  ref="userDao"/>       
  13.  </bean>    
  14. <bean id="userDao"  class="UserDaoImpl"/>    
  15. </beans>  

 

 

这样我们就可以看出,业务层里只出现了Dao层的接口,是依赖于接口,而没有依赖于真正的实现。客户端对业务层的依赖是同样道理,可以只依赖业务层接口,通过IOC注入解决。

下面看另一种通过构造器注入。这种方法不需要提供set方法,但需要提供构造方法。看代码:

 

Java代码 
  1. Public  class  UserManagerImpl  implements  UserManager {  
  2.     private  IUserDao  userDao;  
  3.     //构造函数  
  4.     public  UserManagerImpl(IUserDao  userDao) {  
  5.        this.userDao = userDao;  
  6.     }    
  7.         @Override  
  8.     public void addUser(String username, String password) {               
  9.        userDao.InsertUser(username,password);  
  10.     }  
  11. }  

 

配置文件也有不同:

applicationContext.xml

 

Html代码 
  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.          xmlns:aop="http://www.springframework.org/schema/aop"  
  5.          xmlns:tx="http://www.springframework.org/schema/tx"  
  6.          xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-2.0.xsd  
  7.           http://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-2.0.xsd  
  8.           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">  
  9. <bean id="userManager" class="UserManagerImpl" >  
  10.     <!—constructor-arg代表是通过构造函数注入,ref的值表示注入的内容-->  
  11.     <constructor-arg  ref="userDao "/>       
  12.  </bean>    
  13. <bean id="userDao" class="UserDaoImpl"/>    
  14. </beans>  

 

 

这两种注入方式,在客户端进行调用都是一样的。来看客户端代码:

 

Java代码 
  1. public  class  Client{  
  2. public staticvoidmain(String[] args) {   
  3.       /*这句话就不用出现了 
  4.              IUserManager  usermanager=new UserManagerImpl(); 
  5.       */  
  6.        //使用Spring的工厂将ioc容器中的对象取出  
  7.        BeanFactory factory=newClassPathXmlApplicationContext("applicationContext.xml");  
  8.        //依赖于接口,不会出现具体实现   
  9.        IUserManager userManager=(IUserManager)factory.getBean("userManager");  
  10.        userManager.addUser("wanghuan""password");  
  11.     }  
  12. }  


通过代码我们可以看出IOC依赖注入的好处:

1.对象之间的依赖关系,不由对象自身来负责,而是由容器依据配置文件动态建立,这样就很灵活,可配。

2.采用依赖注入,模块之间一定是松散耦合的

3.代码易维护易测试

如果不使用框架,我们传统的写法一般是自己建立工厂或者用单例来处理业务层与Dao层,而使用了Spring,这些工作我们就都不用管了,而且每层的代码都很清楚。这样就使得真正的业务流程更明确了。

 

转载自:http://zhangll98.iteye.com/blog/1551321

 

分享到:
评论

相关推荐

    Spring Ioc 使用java反射和代理

    Spring Ioc 使用java反射和代理

    springIoc实现原理

    - 控制器层(Controller):在MVC架构中,Spring MVC使用Ioc处理HTTP请求。 总之,Spring Ioc通过控制反转和依赖注入,极大地提高了代码的可维护性和可测试性,降低了系统的复杂度,使得开发人员能够更加专注于业务...

    spring ioc使用教程

    下面将详细讲解Spring IOC的使用过程及相关知识点。 1. **配置文件**: Spring 使用XML配置文件来定义和管理Bean。在XML文件中,我们定义Bean的ID、类路径,并可以通过`&lt;property&gt;`标签为Bean的属性赋值。例如: ...

    实验一 Springioc基本操作.docx

    SpringIOC是Spring Framework中的核心组件之一,负责管理应用程序中的对象、依赖关系和生命周期。 在 Spring IOC 中,对象的创建和管理是通过 BeanFactory 或 ApplicationContext 实现的。BeanFactory 是 Spring ...

    springIOC手写框架分析

    springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC...

    spring ioc模块手写demo

    spring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demo...

    spring ioc和aop原理流程图(详细)

    Spring 框架是Java开发中的核心框架,它主要由两个关键部分组成:IOC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)。这两个概念是Spring框架的核心特性,极大地简化了企业...

    Spring IoC加载流程讲解

    Spring IoC 加载流程讲解 在本节中,我们将对 Spring IoC 加载流程进行详细的讲解,并探讨 IoC 思想和...通过了解 Spring IoC 加载流程,我们可以更好地理解 Spring 的核心机制,并更好地使用 Spring 框架进行开发。

    Spring中IoC优点与缺点解析

    Spring 中 IoC 优点与缺点解析 IoC(Inversion of Control)是 Spring 框架中的一种设计模式,它的主要思想是将对象的创建和管理交给容器,从而解耦合对象之间的依赖关系。今天,我们将详细解析 IoC 的优点和缺点。 ...

    SpringIoc示例代码

    Spring IOC,全称...通过`TestSpringIoc`的测试,我们可以确保Spring IOC的配置和使用符合预期,保证了代码的正确性和灵活性。同时,这样的测试也有助于理解和学习Spring IOC的工作机制,提升对Spring框架的理解。

    spring Ioc容器配置

    spring Ioc容器配置 IOC容器数据源配置 &lt;!-- 配置数据源 --&gt; destroy-method="close"&gt; &lt;value&gt;org.gjt.mm.mysql.Driver &lt;value&gt;jdbc:mysql://localhost:3306/demo &lt;value&gt;root ...

    spring ioc思维导图源文件

    Spring IOC(Inversion of Control,控制反转)是Spring框架的核心特性之一,它允许开发者将对象的创建和管理交给Spring容器来处理,从而使代码更加松耦合,更易于测试和维护。下面将详细介绍Spring IOC的基本概念、...

    spring ioc

    标题 "Spring IOC" 描述了我们讨论的核心主题——Spring 框架中的依赖注入(Inversion of Control,简称 IOC)机制。Spring 是一个广泛应用的 Java 应用开发框架,其核心特性之一就是IOC,它极大地简化了软件组件...

    SpringIOC经典Demo

    Spring IOC(Inversion of Control,控制反转)是Spring框架的核心特性,它极大地简化了Java应用的开发,通过将对象的创建和管理交由Spring容器来处理,开发者可以更专注于业务逻辑。下面,我们将深入探讨Spring IOC...

    Springioc注入Demo

    Spring IOC(Inversion of Control,控制反转)是Spring框架的核心特性,它将对象的创建和管理权交由Spring容器来负责,从而实现了依赖倒置,增强了代码的可测试性和可维护性。DI(Dependency Injection,依赖注入)...

    Spring IOC.pdf

    在Spring中,AOP通常与IoC配合使用,以提供更加灵活和可维护的系统架构。 总结来说,Spring IOC操作和设计模式是Spring框架最核心的部分之一,它们帮助开发者将对象之间的依赖关系交由Spring容器管理,实现了业务...

    springioc和spring aop

    Spring框架是Java开发中不可或缺的一部分,它通过提供两种核心特性——控制反转(IoC)和面向切面编程(AOP)来简化应用的构建。理解并掌握这两种技术对于任何Java开发者来说都至关重要。 **控制反转(IoC)**,也...

    Spring IoC依赖包

    Spring框架使用它来记录各种内部信息。 - `log4j.jar`: Log4j是Apache的一个经典日志工具,提供了灵活且强大的日志记录功能。通过配置log4j,你可以定制日志输出的级别、格式和目的地,以满足不同项目的需求。 在...

    Spring IoC源码深度剖析开源架构源码2021.pdf

    标题《Spring IoC源码深度剖析开源架构源码2021.pdf》和描述《Spring IoC源码深度剖析开源架构源码2021.pdf》表明该文档主要面向于分析Spring框架中控制反转(IoC)容器的核心源码,解析和理解其内部的工作机制及...

    Java反射_Spring IOC

    Java反射和Spring IOC是Java开发中的两个重要概念,它们在构建灵活、可扩展的应用程序时起着关键作用。本文将深入探讨这两个主题,并提供相关的学习资源。 首先,让我们了解一下Java反射。Java反射机制是Java语言的...

Global site tag (gtag.js) - Google Analytics