在前面的程序中,以Bean的Setter方法完成依赖注入. Spring鼓励的是Setter Injection(set方法注入) 当也可以使用Constructor injection(构造方法注入),要使用Setter或 Constructor来注入依赖关系视需求而定。
Constructor injection(构造方法注入)的示例:
============
HelloBean.java
-------------------------------------------------------
package only;
public class HelloBean {
public String name;
public String helloWord;
public HelloBean(String name,String helloword){
this.name=name;
this.helloWord=helloword;
}
public String getHelloWord() {
return helloWord;
}
public void setHelloWord(String helloWord) {
this.helloWord = helloWord;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
===================
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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<!--在这里使用<constructor-arg >标签来表示将使用Contructpr Injection(构造函数注入)-->
<!--index属性就是指定对象将注入至构造函数中的哪一个位置的参数,参数的顺序指定中第一个参数用“0”表示,第二个用“1”,依此类推-->
<bean id="helloBean" class="only.HelloBean">
<constructor-arg index="0">
<value>Justin</value>
</constructor-arg>
<constructor-arg index="1">
<value>Hello</value>
</constructor-arg>
</bean>
</beans>
==============
SpringDemo .java
-------------------------------------------------
package only;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
public class SpringDemo {
/**
* @param args
*/
public static void main(String[] args) {
ApplicationContext context=
new FileSystemXmlApplicationContext("src/applicationContext.xml");
HelloBean hello=(HelloBean)context.getBean("helloBean");
System.out.print("name:");
System.out.println(hello.getName());
System.out.print("Word:");
System.out.println(hello.getHelloWord());
}
}
至于要使用Constructor或Setter方法来完成依赖注入这个问题,其实就等于在讨论一个古老的问题:要在对象建立时就准备好所有的资源,或是在对象建立好后,在使用setter方法来进行设定。
使用Constructor的好处之一是,可以在构造对象的同时一并完成依赖关系的建立,对象一建立后,它与其他对象的依赖关系也就准备好了,但如果建立的对象关系很多,使用Constructor injection会在构造方法上留下一长串的参数,且不易记忆,这时使用setter方法会是一个不错的选择,另一方面,setter方法具有明确的方法名称可以了解注入的对象是什么,像setxxx()这样的名称,会比Contructor上某个参数位置的索引代表某个对象来得好,当结合IDE的方法提示功能使用时,编程会更方便且有效率。
然而使用setter方法时,由于提供有setxxx()方法,因此不能保证相关的数据成员或资源在执行时期不会被更改设定,因为程序开发人员可能执行setxxx()方法来设定相关属性,所以如果想要让一些数据成员或资源变为只读或是私有,使用Constructor injection会是个简单的选择。
分享到:
相关推荐
spring-core:核心模块 依赖注入IOC和DI的最基本实现 spring-beans:Bean工厂与装配 spring-context:上下文,即IOC容器 spring-context-support:对IOC的扩展,以及IOC子容器 spring-context-indexer:类管理组件和...
这个jar文件"Spring-ioc-jar"包含了实现Spring IOC功能所需的关键类和接口,是学习和使用Spring IOC技术的基础。 Spring框架的IOC容器是其核心组件,主要由`ApplicationContext`和`BeanFactory`两个接口代表。`...
首先,IoC容器是Spring的核心,它负责管理对象的生命周期和依赖关系。在1.0-m2中,IoC容器通过XML配置文件来定义对象的实例化和它们之间的依赖关系,这使得程序的耦合度降低,更易于测试和维护。例如,开发者可以...
- `spring-core-5.2.6.RELEASE.jar`:Spring的核心工具集,包括IoC和基本的AOP支持。 - `spring-expression-5.2.6.RELEASE.jar`:Spring表达式语言(SpEL),用于在运行时查询和操作对象图。 - `spring-jdbc-5.2.6....
2. **spring-beans-3.1.2.RELEASE.jar**:包含Spring处理bean定义和依赖注入的核心类,使得Spring Security可以动态地管理其组件。 3. **spring-web-3.1.2.RELEASE.jar**:提供了处理HTTP请求和响应的能力,以及...
1. **核心容器**:包括Core Container和Beans模块,定义了Spring的基本部分,如Bean工厂、ApplicationContext和依赖注入功能。Bean工厂是Spring的基石,它负责创建、管理和配置对象。 2. **数据访问/集成**:如JDBC...
1. **spring-core-3.2.0.RELEASE.jar**:这是Spring框架的核心模块,提供了基本的IoC(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入)功能,以及资源加载和通用工具类。 2. **spring-...
spring-**core**-4.3.6.RELEASE.jar :包含spring框架基本的核心工具类,spring其他组件都要用到这个包里的类,其他组件的基本核心 spring-**beans**-4.3.6.RELEASE.jar:所有应用都要用到的jar包,它包含访问配置...
spring-beans-5.1.8.RELEASE.jar //配置、创建、管理Bean,负责Ioc、DI spring-context-5.1.8.RELEASE.jar //提供在基础IoC上的扩展服务 spring-expression-5.1.8.RELEASE.jar //提供对Spring表达式语言的支持
Spring框架的核心是IoC(Inversion of Control)容器,它负责管理对象的生命周期和对象间的依赖关系。 **Struts2与Spring的集成** 在没有Struts2-Spring-Plugin的情况下,要在Struts2应用中使用Spring,需要手动...
2. **spring-beans**: 支持Bean工厂和XML配置,是IoC容器实现的基础。 3. **spring-context**: 扩展了IoC容器,引入了上下文概念,提供了对国际化、事件、资源、缓存等支持。 4. **spring-aop**: 实现了面向切面...
- **Bean容器**:是Spring的核心,负责管理对象的生命周期和依赖关系,通过XML或注解实现bean的配置。 - **AOP**:提供面向切面编程,允许开发者定义方法拦截器和切点,实现代码的解耦和模块化。 3. **模块详解**...
控制反转(IoC)容器负责管理对象的生命周期和配置,从而实现了依赖注入。 - **框架模块**: - **核心容器**:包括Beans、Core、Context等模块,提供核心功能,如BeanFactory、ApplicationContext等。 - **AOP与...
Spring_IOC-v(上)笔记是关于 Spring 框架中的 IoC(控制反转)技术的笔记,主要介绍了 IoC 的概念、依赖注入、Bean 的设置、Spring 组件的管理等知识点。 IoC 技术是 Spring 框架的核心概念之一,它的主要思想...
2. **配置Bean**:通过XML配置文件告诉Spring如何创建和管理Bean。XML文件中定义Bean的类、属性、依赖关系等信息。 例如,以下代码展示了如何通过`FileSystemXmlApplicationContext`加载XML配置文件,并从容器中...
例如,关于IoC(Inversion of Control,控制反转)的实现,Spring使用了XML配置或注解来定义bean的依赖关系,通过反射机制动态加载和管理bean。另外,AOP模块实现了切面编程,允许我们定义横切关注点,如日志、事务...
在Java Spring框架中,Spring IoC(Inversion of Control,控制反转)是核心特性之一,它使得应用程序的组件之间的依赖关系不再由代码直接管理,而是交由Spring IoC容器负责。这种设计模式降低了代码间的耦合,提高...
Spring框架是Java开发中不可或缺的一部分,它以IoC(Inversion of Control,控制反转)为核心,极大地简化了软件组件的管理。在这个名为“Spring---IOC实现”的项目中,我们将深入探讨Spring如何通过IoC实现对应用...
在0.9版本中,Spring Modules可能已经包含了对Spring核心的扩展,比如AOP(面向切面编程)的增强,提供了一些预定义的切面,便于处理常见的企业级问题,如日志记录、事务管理等。同时,它可能还提供了对Spring IoC...
在了解了IOC的基本概念后,我们来看看Spring的DI。DI是IOC的一种实现方式,它允许我们在不修改代码的情况下改变对象间的依赖关系。例如,我们可以通过XML配置文件改变`AnotherBean`中`exampleBean`的实现: ```xml ...