- 浏览: 248663 次
- 性别:
- 来自: 深圳
-
文章分类
最新评论
-
sweed0:
为何每一段代码都重复一次呢?
spring注解实例二 -
Gary_Huangpf:
- - 插件报错啊
Ext前台分页 -
ddvk2007:
版主 我想請問你所說的mapreduce是hadoop的還是g ...
MapReduce中的Shuffle和Sort分析 -
人可木:
好问章,楼主写的相当详细。。。多谢。。。
findbugs插件的安装与应用 -
hautbbs:
按照博主的方法启动调试出现jvm terminated.Ex ...
10分钟学会使用MyEclipse断点调试js
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
- public interface IUserDao {
- public void InsertUser(String username,String password);
- }
Dao接口的实现类 UserDaoImpl.java
- public class UserDaoImpl implements IUserDao{
- @Override
- public void InsertUser(String username, String password){
- System.out.println("----UserDaoImpl --addUser----");
- }
- }
业务层接口IUserManager.java
- public interface IUserManager {
- public void addUser(String username,String password);
- }
业务层接口的实现UserManagerImpl.java
- public class UserManagerImpl implements IUserManager {
- private IUserDao userDao;
- @Override
- public void addUser(String username, String password) {
- userDao=new IUserDaoImpl();
- userDao.InsertUser(username,password);
- }
- }
其实从这里就可以看出,业务层其实也是依赖了Dao层的具体实现,没有起到解耦的作用。
Client.java
- public classClient {
- public static void main(String[] args) {
- IUserManager usermanager=new UserManagerImpl();
- userManager.addUser("wanghuan","password");
- }
- }
从客户端的代码里,我们也可以看出,客户端也还是依赖于业务层的具体实现。接下来我们使用IOC容器。就是将我们的对象放到配置文件里,让Spring知道,从而由Spring来帮我们管理。
Spring 框架的 IOC 容器采用两种方法实现:
(一)【setter方法注入】:通过 JavaBean的属性分配依赖性。
(二)【构造器注入】:依赖性以构造函数的形式提供,不以 JavaBean 属性的形式公开。
首先看setter方法注入,是IOC通过set方法将需要的对象注入。需要提供被注入对象的set方法。
- Public class UserManagerImpl implements UserManager {
- private IUserDao userDao;
- //set方法
- public void setUserDao(IUserDao userDao) {
- this.userDao = userDao;
- }
- @Override
- public void addUser(String username, String password) {
- //不需要实例化,直接可以使用
- userDao.InsertUser(username,password);
- }
- }
重点是配置Spring的核心配置文件applicationContext.xml,在配置文件中配置上userDao的信息,使得IOC容器自己将UserDao对象注入到UserManagerImpl中。
applicationContext.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"
- xmlns:aop="http://www.springframework.org/schema/aop"
- xmlns:tx="http://www.springframework.org/schema/tx"
- xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-2.0.xsd
- http://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-2.0.xsd
- http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
- <!--id名字自己取,class表示他代表的类,如果在包里的话需要加上包名-->
- <bean id="userManager" class="UserManagerImpl" >
- <!—property代表是通过set方法注入,ref的值表示注入的内容-->
- <property name="userDao" ref="userDao"/>
- </bean>
- <bean id="userDao" class="UserDaoImpl"/>
- </beans>
这样我们就可以看出,业务层里只出现了Dao层的接口,是依赖于接口,而没有依赖于真正的实现。客户端对业务层的依赖是同样道理,可以只依赖业务层接口,通过IOC注入解决。
下面看另一种通过构造器注入。这种方法不需要提供set方法,但需要提供构造方法。看代码:
- Public class UserManagerImpl implements UserManager {
- private IUserDao userDao;
- //构造函数
- public UserManagerImpl(IUserDao userDao) {
- this.userDao = userDao;
- }
- @Override
- public void addUser(String username, String password) {
- userDao.InsertUser(username,password);
- }
- }
配置文件也有不同:
applicationContext.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"
- xmlns:aop="http://www.springframework.org/schema/aop"
- xmlns:tx="http://www.springframework.org/schema/tx"
- xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-2.0.xsd
- http://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-2.0.xsd
- http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
- <bean id="userManager" class="UserManagerImpl" >
- <!—constructor-arg代表是通过构造函数注入,ref的值表示注入的内容-->
- <constructor-arg ref="userDao "/>
- </bean>
- <bean id="userDao" class="UserDaoImpl"/>
- </beans>
这两种注入方式,在客户端进行调用都是一样的。来看客户端代码:
- public class Client{
- public staticvoidmain(String[] args) {
- /*这句话就不用出现了
- IUserManager usermanager=new UserManagerImpl();
- */
- //使用Spring的工厂将ioc容器中的对象取出
- BeanFactory factory=newClassPathXmlApplicationContext("applicationContext.xml");
- //依赖于接口,不会出现具体实现
- IUserManager userManager=(IUserManager)factory.getBean("userManager");
- userManager.addUser("wanghuan", "password");
- }
- }
通过代码我们可以看出IOC依赖注入的好处:
1.对象之间的依赖关系,不由对象自身来负责,而是由容器依据配置文件动态建立,这样就很灵活,可配。
2.采用依赖注入,模块之间一定是松散耦合的
3.代码易维护易测试
如果不使用框架,我们传统的写法一般是自己建立工厂或者用单例来处理业务层与Dao层,而使用了Spring,这些工作我们就都不用管了,而且每层的代码都很清楚。这样就使得真正的业务流程更明确了。
转载自:http://zhangll98.iteye.com/blog/1551321
发表评论
-
spring AOP
2012-06-13 11:14 928先简单的说说spring aop使用的好处:利用AOP横向添加 ... -
spring IOC介绍
2012-06-13 10:55 1365首先想说说IoC(Inversion of ... -
spring概述
2012-06-13 10:52 816随着越来越多的项目 ... -
spring学习总结
2010-02-04 08:49 978先说说简单地使用Struts2做Web时的经历: 1.经常需要 ... -
spring注解实例二
2010-01-26 11:22 2383昨天对Spring注解有了一个整体认识,至少完成了一个简单的w ... -
spring注解实例一
2010-01-26 11:15 2950先来构建一个极为简单的web应用,从controller到da ... -
spring注解配置文件解析
2010-01-26 11:01 35821、applicationContext.xml ... -
使用 Spring 2.5 基于注解驱动的 Spring MVC(二)
2010-01-22 11:13 3439我们在 ② 处添加了一个 ModelMap 属性,其属性名为 ... -
使用 Spring 2.5 基于注解驱动的 Spring MVC(一)
2010-01-22 11:05 1375基于注解的配置有越来越流行的趋势,Spring 2.5 顺应这 ... -
spring注解详解
2010-01-22 09:57 13581.准备工作(1)导入common-annotations.j ... -
spring注解
2010-01-13 09:56 1029Spring JSR-250注解 注释配 ... -
spring相关配置内容解析
2010-01-05 14:27 13351、web.xml配置文件: <? ... -
Spring MVC 配置【转】
2010-01-03 14:51 1072一,配置分发器 Dispatche ... -
spring mvc 学习笔记
2010-01-03 14:41 1167一、与struts的不同 1.Spr ... -
Spring Mvc快速入门
2010-01-03 14:20 1756Spring MVC是结构最清晰的MVC ... -
Spring 可代码简化操作类
2009-12-28 09:31 1069SimpleJdbcTemplate类是Jd ... -
Spring 命名参数操作类NamedParameterJdbcTemplate
2009-12-28 09:28 1813在传统的SQL语句中,参数都是用'?'占 ... -
Spring JdbcTemplate操作类
2009-12-24 10:42 27981.JdbcTemplate ...
相关推荐
Spring Ioc 使用java反射和代理
- 控制器层(Controller):在MVC架构中,Spring MVC使用Ioc处理HTTP请求。 总之,Spring Ioc通过控制反转和依赖注入,极大地提高了代码的可维护性和可测试性,降低了系统的复杂度,使得开发人员能够更加专注于业务...
下面将详细讲解Spring IOC的使用过程及相关知识点。 1. **配置文件**: Spring 使用XML配置文件来定义和管理Bean。在XML文件中,我们定义Bean的ID、类路径,并可以通过`<property>`标签为Bean的属性赋值。例如: ...
SpringIOC是Spring Framework中的核心组件之一,负责管理应用程序中的对象、依赖关系和生命周期。 在 Spring IOC 中,对象的创建和管理是通过 BeanFactory 或 ApplicationContext 实现的。BeanFactory 是 Spring ...
springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC...
spring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demo...
Spring 框架是Java开发中的核心框架,它主要由两个关键部分组成:IOC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)。这两个概念是Spring框架的核心特性,极大地简化了企业...
Spring IoC 加载流程讲解 在本节中,我们将对 Spring IoC 加载流程进行详细的讲解,并探讨 IoC 思想和...通过了解 Spring IoC 加载流程,我们可以更好地理解 Spring 的核心机制,并更好地使用 Spring 框架进行开发。
Spring 中 IoC 优点与缺点解析 IoC(Inversion of Control)是 Spring 框架中的一种设计模式,它的主要思想是将对象的创建和管理交给容器,从而解耦合对象之间的依赖关系。今天,我们将详细解析 IoC 的优点和缺点。 ...
Spring IOC,全称...通过`TestSpringIoc`的测试,我们可以确保Spring IOC的配置和使用符合预期,保证了代码的正确性和灵活性。同时,这样的测试也有助于理解和学习Spring IOC的工作机制,提升对Spring框架的理解。
spring Ioc容器配置 IOC容器数据源配置 <!-- 配置数据源 --> destroy-method="close"> <value>org.gjt.mm.mysql.Driver <value>jdbc:mysql://localhost:3306/demo <value>root ...
Spring IOC(Inversion of Control,控制反转)是Spring框架的核心特性之一,它允许开发者将对象的创建和管理交给Spring容器来处理,从而使代码更加松耦合,更易于测试和维护。下面将详细介绍Spring IOC的基本概念、...
标题 "Spring IOC" 描述了我们讨论的核心主题——Spring 框架中的依赖注入(Inversion of Control,简称 IOC)机制。Spring 是一个广泛应用的 Java 应用开发框架,其核心特性之一就是IOC,它极大地简化了软件组件...
Spring IOC(Inversion of Control,控制反转)是Spring框架的核心特性,它极大地简化了Java应用的开发,通过将对象的创建和管理交由Spring容器来处理,开发者可以更专注于业务逻辑。下面,我们将深入探讨Spring IOC...
Spring IOC(Inversion of Control,控制反转)是Spring框架的核心特性,它将对象的创建和管理权交由Spring容器来负责,从而实现了依赖倒置,增强了代码的可测试性和可维护性。DI(Dependency Injection,依赖注入)...
在Spring中,AOP通常与IoC配合使用,以提供更加灵活和可维护的系统架构。 总结来说,Spring IOC操作和设计模式是Spring框架最核心的部分之一,它们帮助开发者将对象之间的依赖关系交由Spring容器管理,实现了业务...
Spring框架是Java开发中不可或缺的一部分,它通过提供两种核心特性——控制反转(IoC)和面向切面编程(AOP)来简化应用的构建。理解并掌握这两种技术对于任何Java开发者来说都至关重要。 **控制反转(IoC)**,也...
Spring框架使用它来记录各种内部信息。 - `log4j.jar`: Log4j是Apache的一个经典日志工具,提供了灵活且强大的日志记录功能。通过配置log4j,你可以定制日志输出的级别、格式和目的地,以满足不同项目的需求。 在...
标题《Spring IoC源码深度剖析开源架构源码2021.pdf》和描述《Spring IoC源码深度剖析开源架构源码2021.pdf》表明该文档主要面向于分析Spring框架中控制反转(IoC)容器的核心源码,解析和理解其内部的工作机制及...
Java反射和Spring IOC是Java开发中的两个重要概念,它们在构建灵活、可扩展的应用程序时起着关键作用。本文将深入探讨这两个主题,并提供相关的学习资源。 首先,让我们了解一下Java反射。Java反射机制是Java语言的...