- 浏览: 1522274 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (525)
- SEO (16)
- JAVA-EE-Hibernate (6)
- JAVA-EE-Struts (29)
- JAVA-EE-Spring (15)
- Linux (37)
- JAVA-SE (29)
- NetWork (1)
- CMS (14)
- Semantic Research (3)
- RIA-Flex (0)
- Ajax-Extjs (4)
- Ajax-Jquery (1)
- www.godaddy.com (0)
- SSH (34)
- JavaScript (6)
- SoftwareEngineer (9)
- CMMI (0)
- IDE-Myeclipse (3)
- PHP (1)
- Algorithm (3)
- C/C++ (18)
- Concept&Items (2)
- Useful WebSite (1)
- ApacheServer (2)
- CodeReading (1)
- Socket (2)
- UML (10)
- PowerDesigner (1)
- Repository (19)
- MySQL (3)
- SqlServer (0)
- Society (1)
- Tomcat (7)
- WebService (5)
- JBoss (1)
- FCKeditor (1)
- PS/DW/CD/FW (0)
- DesignPattern (11)
- WebSite_Security (1)
- WordPress (5)
- WebConstruction (3)
- XML|XSD (7)
- Android (0)
- Project-In-Action (9)
- DatabaseDesign (3)
- taglib (7)
- DIV+CSS (10)
- Silverlight (52)
- JSON (7)
- VC++ (8)
- C# (8)
- LINQ (1)
- WCF&SOA (5)
- .NET (20)
- SOA (1)
- Mashup (2)
- RegEx (6)
- Psychology (5)
- Stock (1)
- Google (2)
- Interview (4)
- HTML5 (1)
- Marketing (4)
- Vaadin (2)
- Agile (2)
- Apache-common (6)
- ANTLR (0)
- REST (1)
- HtmlAnalysis (18)
- csv-export (3)
- Nucth (3)
- Xpath (1)
- Velocity (6)
- ASP.NET (9)
- Product (2)
- CSS (1)
最新评论
-
lt26w:
理解成门面模式应该比较容易明白吧
FacadePattern-Java代码实例讲解 -
lt26w:
看下面的例子比较明白.
FacadePattern-Java代码实例讲解 -
javaloverkehui:
这也叫文档,别逗我行吗,也就自己看看。
HtmlCleaner API -
SE_XiaoFeng:
至少也应该写个注释吧。
HtmlCleaner API -
jfzshandong:
...
org.springframework.web.filter.CharacterEncodingFilter 配置
Type1 接口注入
我们常常借助接口来将调用者与实现者分离。如:
private InterfaceB clzB;
public doSomething() {
Ojbect obj =
Class.forName(Config.BImplementation).newInstance();
clzB = (InterfaceB)obj;
clzB.doIt();
}
……
}
上面的代码中,ClassA依赖于InterfaceB的实现,如何获得InterfaceB实现类的实例?传统的方法是在
代码中创建InterfaceB实现类的实例,并将起赋予clzB。
而这样一来,ClassA在编译期即依赖于InterfaceB的实现。为了将调用者与实现者在编译期分离,于是有
了上面的代码,我们根据预先在配置文件中设定的实现类的类名(Config.BImplementation),动态
加载实现类,并通过InterfaceB强制转型后为ClassA所用。这就是接口注入的一个最原始的雏形。
而对于一个Type1型IOC容器而言,加载接口实现并创建其实例的工作由容器完成。
如下面这个类:
private InterfaceB clzB;
public Object doSomething(InterfaceB b) {
clzB = b;
return clzB.doIt();
}
……
}
在运行期,InterfaceB实例将由容器提供。
Type1型IOC发展较早(有意或无意),在实际中得到了普遍应用,即使在IOC的概念尚未确立时,这样的
方法也已经频繁出现在我们的代码中。
下面的代码大家应该非常熟悉:
public void doGet(
HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
……
}
}
这也是一个Type1 型注入,HttpServletRequest和HttpServletResponse实例由Servlet
Container
在运行期动态注入。
另,Apache Avalon是一个较为典型的Type1型IOC容器。
Type2 设值注入
在各种类型的依赖注入模式中,设值注入模式在实际开发中得到了最广泛的应用(其中很大一部分得
力于Spring框架的影响)。
在笔者看来,基于设置模式的依赖注入机制更加直观、也更加自然。Quick Start中的示例,就是典
型的设置注入,即通过类的setter方法完成依赖关系的设置。
Type3 构造子注入
private final DataSource dataSource;
private final String message;
public DIByConstructor(DataSource ds, String msg) {
this .dataSource = ds;
this .message = msg;
}
……
}
构造子注入,即通过构造函数完成依赖关系的设定,如:
可以看到,在Type3类型的依赖注入机制中,依赖关系是通过类构造函数建立,容器通过调用类的构
造方法,将其所需的依赖关系注入其中。
PicoContainer(另一种实现了依赖注入模式的轻量级容器)首先实现了Type3类型的依赖注入模式。
几
种依赖注入模式的对比总结
接口注入模式因为历史较为悠久,在很多容器中都已经得到应用。但由于其在灵活性、易用性上不如
其他两种注入模式,因而在IOC的专题世界内并不被看好。
Type2和Type3型的依赖注入实现则是目前主流的IOC实现模式。这两种实现方式各有特点,也各具
优势(一句经典废话J)。
Type2 设值注入的优势
1. 对于习惯了传统JavaBean开发的程序员而言,通过setter方法设定依赖关系显得更加直
观,更加自然。
2. 如果依赖关系(或继承关系)较为复杂,那么Type3模式的构造函数也会相当庞大(我们需
要在构造函数中设定所有依赖关系),此时Type2模式往往更为简洁。
3. 对于某些第三方类库而言,可能要求我们的组件必须提供一个默认的构造函数(如Struts
中的Action),此时Type3类型的依赖注入机制就体现出其局限性,难以完成我们期望的功
能。
Type3 构造子注入的优势:
1. “在构造期即创建一个完整、合法的对象”,对于这条Java设计原则,Type3无疑是最好的
响应者。
2. 避免了繁琐的setter方法的编写,所有依赖关系均在构造函数中设定,依赖关系集中呈现,
更加易读。
3. 由于没有setter方法,依赖关系在构造时由容器一次性设定,因此组件在被创建之后即处于
相对“不变”的稳定状态,无需担心上层代码在调用过程中执行setter方法对组件依赖关系
产生破坏,特别是对于Singleton模式的组件而言,这可能对整个系统产生重大的影响。
4. 同样,由于关联关系仅在构造函数中表达,只有组件创建者需要关心组件内部的依赖关系。
对调用者而言,组件中的依赖关系处于黑盒之中。对上层屏蔽不必要的信息,也为系统的
层次清晰性提供了保证。
5. 通过构造子注入,意味着我们可以在构造函数中决定依赖关系的注入顺序,对于一个大量
依赖外部服务的组件而言,依赖关系的获得顺序可能非常重要,比如某个依赖关系注入的
先决条件是组件的DataSource及相关资源已经被设定。
评论
type1方式,需注入的对象作为普通方法的参数。
type2方式,需注入的对象作为setter方法的参数。
type3方式,需注入的对象作为构造方法的参数。
不知道我这样的理解正确与否,望高手给予指点。
发表评论
-
找不到 org.springframework.test.AbstractTransactionalDataSourceSpringContextTests;
2010-03-15 13:21 3960import or ... -
Spring中常用的hql查询方法(getHibernateTemplate())
2009-12-09 16:35 1008Spring中常用的hql查询方法(getHibernateT ... -
Spring源码分析-配置文件加载流程
2009-12-07 15:04 3345Spring配置文件加载流程 Spring配置文件 ... -
读Spring源代码之按图索骥(一)Context创建与配置文件加载
2009-12-07 13:57 1542Spring 和 Struts在web.xml中增加的配置 ... -
读Spring源代码之按图索骥(一)Context创建与配置文件加载
2009-12-07 13:56 1087Spring 和 Struts在web.xml中增加的配置 ... -
HTTP Status 404(The requested resource is not available)
2009-12-04 21:08 39249但是SSH中404不一定是以下错误! 是配置问题 HTTP S ... -
'dataSource': no matching editors or conversion strategy found
2009-12-04 19:42 3602the datasource property is look ... -
tomcat启动时出现的 严重: Error listenerStart
2009-12-04 16:15 1282最近看《WebWork.Spring.Hibernate 整 ... -
严重: Error filterStart-楼主竟然不给解决方案 = =
2009-12-04 16:14 2633今天在eclipse+myeclipse+tomcat5 ... -
org.springframework.web.filter.CharacterEncodingFilter 配置
2009-12-04 16:13 13818web.xml文件 <?xml version=&qu ... -
Spring2.0的包的说明
2009-12-04 16:12 1122Spring 压缩包目录说明 ... -
startup failed due to previous errors
2009-12-04 14:20 2621关键字: 异常,tomcat启动出错 ,xfire ,spri ... -
在使用SSH添加 <listener> <listener-class>org.springframework.web.context.C
2009-12-04 13:44 4331在使用SSH添加 <listener> ... -
ApplicationContext.xml
2009-12-03 16:22 1194<?xml version="1.0" ...
相关推荐
Spring 三种依赖注入方式 Spring 框架中提供了多种依赖注入方式,其中最常用的三种依赖注入方式分别是接口注入、设值注入和构造函数注入。下面,我们将分别对这三种依赖注入方式进行详细的介绍和分析。 一、接口...
在Spring中,IOC的主要实现方式有两种:依赖注入(Dependency Injection,简称DI)和基于接口的配置。下面将对这两种方式进行详细阐述。 一、依赖注入(Dependency Injection) 1. **构造器注入**:通过构造函数来...
Spring IoC容器主要通过两种方式实现依赖注入: 1. **构造器注入**:通过类的构造方法来注入依赖项。 2. **设值注入**:通过setter方法来注入依赖项。 #### 四、使用注解进行依赖注入 随着Spring框架的发展,除了...
在Spring IOC中,主要的注入方式有以下几种: 1. **构造器注入**:通过构造函数传递依赖对象,Spring容器会根据构造函数的参数类型创建并注入相应的对象。这种方式确保对象在创建时就具备所有依赖,增强了对象的...
在Spring中,有两种主要的属性注入方式:setter方法注入和构造器注入。 1. Setter方法注入:这是最常用的方式,通过在类中定义带有`set`前缀的方法,Spring容器会调用这些方法来设置依赖。例如: ```java public ...
Spring Ioc容器的配置可以通过以下三种方式进行: 1. **XML配置**:早期Spring常用的方式,所有bean的定义都在XML文件中,如`beans.xml`。 2. **Java配置**:使用@Configuration和@Bean注解,将配置信息写在Java类...
Spring Boot 中的几种注入方法 在 Spring Boot 中,注入是一种非常重要的机制,用于将 bean 对象注入到其他 bean 对象中,以便实现松耦合和高内聚的设计目标。下面我们将对 Spring Boot 中的几种注入方法进行详细的...
在 Spring 框架中,IoC 有两种主要实现方式:构造器注入和 setter 注入。构造器注入是在创建对象时通过构造函数传入依赖,setter 注入则是在对象创建后通过 setter 方法设置依赖。此外,Spring 还提供了基于注解的 ...
在Spring中,IoC通过容器来管理对象及其依赖关系,而我们今天主要讨论的是Spring的IoC注入。 **一、什么是IoC注入** IoC,即控制反转,意味着应用程序不再负责创建和管理对象,而是将这个责任交给了一个外部容器...
这也是Spring框架支持的一种依赖注入方式,Girl类的构造函数接受一个Kissable类型的参数,并将其保存为私有成员变量。 ### 结论 通过这些幽默的例子和不同的IoC类型,我们可以看到Spring框架中的IoC如何帮助我们...
SPRING IOC注入方式过程解析 ...SPRING IOC注入方式是SPRING IOC框架中的一种核心机制,通过设值注入和构造注入两种方式来实现Bean之间的依赖关系。通过使用IOC注入方式,可以提高系统的灵活性、可维护性和可重用性。
Spring框架是Java开发中不可或缺的一部分,它通过提供两种核心特性——控制反转(IoC)和面向切面编程(AOP)来简化应用的构建。理解并掌握这两种技术对于任何Java开发者来说都至关重要。 **控制反转(IoC)**,也...
在Spring中,通常通过以下三种注解实现IoC: - `@Autowired`:自动装配,Spring会根据类型或名称找到合适的bean进行注入。 - `@Qualifier`:当有多个相同类型的bean时,用于指定注入哪一个。 - `@Resource`:基于...
总结来说,Spring的IoC方法注入提供了一种灵活的方式来管理和初始化对象,通过`@PostConstruct`和`@PreDestroy`注解,或者实现`InitializingBean`和`DisposableBean`接口,我们可以在对象生命周期的关键点执行特定的...
Spring支持三种依赖注入方式:构造器注入、setter注入和字段注入。 #### 五、IoC容器的优势 - **解耦**:通过依赖注入的方式,降低了各个组件之间的耦合度,使得每个组件更加独立,易于测试和维护。 - **灵活性**:...
依赖注入是 IOC 的一种实现方式。它有三种形式:接口注入、设值注入和构造子注入。 * 接口注入:通过定义某一类型的接口 interface 来标识一组功能相似的对象,并在这一组对象与其调用者间,在编译时分离,在运行时...
在Spring框架中,IOC(Inversion of Control,控制反转)是一种设计模式,它将对象的创建和管理交给了框架,从而让开发者更专注于业务逻辑。而自动扫描和自动注入是Spring 2.5中实现IOC的两个核心特性,极大地简化了...
在Spring中,依赖注入主要通过构造函数注入、setter方法注入和接口注入三种方式实现。 1. **构造函数注入**:在创建对象时,依赖对象通过构造函数参数传递进来。 2. **setter方法注入**:通过调用对象的setter方法...
Annotation注入是Spring IOC的一种实现方式,它利用Java注解替代XML配置来管理Bean的依赖关系,使得代码更加简洁、可读性更强。 在Spring框架中,我们主要关注以下几个关键的注解: 1. `@Component`:这是一个基础...
Spring为IOC容器注入Bean的五种方式详解 Spring 框架中,IOC(Inverse of Control,控制反转)容器是核心组件之一,用于管理 Bean 的生命周期。在 Spring 中,IOC 容器可以通过五种方式来注入 Bean,本文将对这五...