- 浏览: 3012107 次
- 性别:
- 来自: 河南
文章分类
- 全部博客 (340)
- Java综合 (26)
- 程序人生 (53)
- RIA-ExtJS专栏 (18)
- RIA-mxGraph专栏 (4)
- RIA-Flex4专栏 (43)
- 框架-Spring专栏 (16)
- 框架-持久化专栏 (22)
- 框架-Struts2专栏 (11)
- 框架-Struts专栏 (12)
- SQL/NOSQL (12)
- 报表/图表 (2)
- 工作流 (5)
- XML专栏 (4)
- 日常报错解决方案 (5)
- Web前端-综合 (12)
- Web/JSP (14)
- Web前端-ajax专栏 (14)
- Web前端-JQuery专栏 (9)
- IDE技巧 (6)
- FILE/IO (14)
- 远程服务调用 (2)
- SSO单点登录 (2)
- 资源分享 (22)
- 云计算 (1)
- 项目管理 (3)
- php专栏 (1)
- Python专栏 (2)
- Linux (1)
- 缓存系统 (1)
- 队列服务器 (1)
- 网络编程 (0)
- Node.js (1)
最新评论
-
hui1989106a:
我的也不能解压,360和好压都试了,都不行
《Spring in Action》完整中文版分享下载 -
temotemo:
这些example有些过时了,官方建议使用HBase-1.0 ...
Java操作Hbase进行建表、删表以及对数据进行增删改查,条件查询 -
zy8102:
非常感谢~
HeadFirst系列之七:《深入浅出SQL》原版高清PDF电子书分享下载 -
zy8102:
重命名了一下搞定了
HeadFirst系列之七:《深入浅出SQL》原版高清PDF电子书分享下载 -
zy8102:
为什么下载以后老解压不了呢?
HeadFirst系列之七:《深入浅出SQL》原版高清PDF电子书分享下载
1. Spring IoC的依赖注入
1) 使用构造方法来注入依赖:比较麻烦
<constructor-arg index="构造方法参数的索引(从0开始)" value="给这个属性注入的值"/>
2) 使用setter方法来注入依赖:建议使用
<property name="属性名" [value="要注入的值"|ref="引用自Spring容器中的其它JavaBean的ID"]/>
3) 集合类型的注入
<property>
<set>、<list>、<map>、<props>
</property>
首先来看看第1)和第2)的综合示例
JavaBean.java
package com.javacrazyer.bean; public class JavaBean { private int intValue; private double doubleValue; private boolean booleanValue; private char charValue; private String stringValue; public JavaBean(){} public JavaBean(int intValue, double doubleValue, boolean booleanValue, char charValue, String stringValue) { super(); this.intValue = intValue; this.doubleValue = doubleValue; this.booleanValue = booleanValue; this.charValue = charValue; this.stringValue = stringValue; } public int getIntValue() { return intValue; } public void setIntValue(int intValue) { this.intValue = intValue; } public double getDoubleValue() { return doubleValue; } public void setDoubleValue(double doubleValue) { this.doubleValue = doubleValue; } public boolean isBooleanValue() { return booleanValue; } public void setBooleanValue(boolean booleanValue) { this.booleanValue = booleanValue; } public char getCharValue() { return charValue; } public void setCharValue(char charValue) { this.charValue = charValue; } public String getStringValue() { return stringValue; } public void setStringValue(String stringValue) { this.stringValue = stringValue; } }
JavaBean2.java
package com.javacrazyer.bean; public class JavaBean2 { private int intValue; private double doubleValue; private boolean booleanValue; private char charValue; private String stringValue; public JavaBean2(){} public int getIntValue() { return intValue; } public void setIntValue(int intValue) { this.intValue = intValue; } public double getDoubleValue() { return doubleValue; } public void setDoubleValue(double doubleValue) { this.doubleValue = doubleValue; } public boolean isBooleanValue() { return booleanValue; } public void setBooleanValue(boolean booleanValue) { this.booleanValue = booleanValue; } public char getCharValue() { return charValue; } public void setCharValue(char charValue) { this.charValue = charValue; } public String getStringValue() { return stringValue; } public void setStringValue(String stringValue) { this.stringValue = stringValue; } }
JavaBean4.java
package com.javacrazyer.bean; public class JavaBean4 { public void init(){ System.out.println("对JavaBean4进行初始化"); } public void destroy(){ System.out.println("对JavaBean4进行资源回收"); } }
Spring配置applicationContext-base.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/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
<bean id="javaBean" class="com.javacrazyer.bean.JavaBean" scope="prototype">
<constructor-arg index="0" value="123"/>
<constructor-arg index="1" value="456.789"/>
<constructor-arg index="2" value="true"/>
<constructor-arg index="3" value="中"/>
<constructor-arg index="4" value="中国北京"/>
</bean>
<bean id="javaBean2" class="com.javacrazyer.bean.JavaBean2">
<property name="intValue" value="321"/>
<property name="doubleValue" value="876.54"/>
<property name="booleanValue" value="false"/>
<property name="charValue" value="中"/>
<property name="stringValue" value="java"/>
</bean>
<bean id="javaBean4" class="com.javacrazyer.bean.JavaBean4"
init-method="init"
destroy-method="destroy"/>
</beans>
测试示例
package com.javacrazyer.test;
import org.junit.BeforeClass;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.javacrazyer.bean.JavaBean;
import com.javacrazyer.bean.JavaBean2;
import com.javacrazyer.bean.JavaBean4;
public class ContstructorDITest {
private static ApplicationContext context;
@BeforeClass
public static void init(){
context = new ClassPathXmlApplicationContext("applicationContext-base.xml");
}
@Test
public void testDI(){
//构造器方式注入测试
JavaBean jb = (JavaBean)context.getBean("javaBean");
System.out.println(jb.getIntValue());
System.out.println(jb.getDoubleValue());
System.out.println(jb.isBooleanValue());
System.out.println(jb.getCharValue());
System.out.println(jb.getStringValue());
//属性方式注入测试
JavaBean2 jb2 = (JavaBean2)context.getBean("javaBean2");
System.out.println(jb2.getIntValue());
System.out.println(jb2.getDoubleValue());
System.out.println(jb2.isBooleanValue());
System.out.println(jb2.getCharValue());
System.out.println(jb2.getStringValue());
}
@Test
public void testScope(){
JavaBean jb = (JavaBean)context.getBean("javaBean");
JavaBean jb2 = (JavaBean)context.getBean("javaBean");
System.out.println(jb == jb2);
}
@Test
public void testInit() throws InterruptedException{
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext-base.xml");
JavaBean4 jb4 = (JavaBean4)context.getBean("javaBean4");
jb4 = null;
Thread.sleep(10000);
}
}
对于testDI方法主要是构造和属性注入方式的测试方法,测试结果为
123
456.789
true
中
中国北京
321
876.54
false
中
java
对于testScope方法,其实主要是Spring中bean的创建模式,测试结果为
false
指定Spring容器管理的Bean的生存范围
<bean>标记上有一个scope属性,它的可选值有:
sigleton:一个容器只有Bean的一个实例。默认值
prototype: 使用一次就创建一个实例
request:在HTTP请求范围内。只有在使用具有Web能力的Spring容器时才有效
session:HTTP Session范围。同上。
而对于最后一个方法testInit,则是对于bean创建和销毁时调用方法的测试,结果为
对JavaBean4进行初始化
集合类型的注入示例
javaBean3.java
package com.javacrazyer.bean;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
public class JavaBean3 {
private Set<String> strSet;
private List<String> strList;
private Map<String, String> strMap;
private Properties props;
private JavaBean2 javaBean2;
public Set<String> getStrSet() {
return strSet;
}
public void setStrSet(Set<String> strSet) {
this.strSet = strSet;
}
public List<String> getStrList() {
return strList;
}
public void setStrList(List<String> strList) {
this.strList = strList;
}
public Map<String, String> getStrMap() {
return strMap;
}
public void setStrMap(Map<String, String> strMap) {
this.strMap = strMap;
}
public Properties getProps() {
return props;
}
public void setProps(Properties props) {
this.props = props;
}
public JavaBean2 getJavaBean2() {
return javaBean2;
}
public void setJavaBean2(JavaBean2 javaBean2) {
this.javaBean2 = javaBean2;
}
}
Spring配置文件applicationContext-collection.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/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
<bean id="javaBean3" class="com.javacrazyer.bean.JavaBean3">
<property name="strSet">
<set>
<value>abc</value>
<value>中国</value>
</set>
</property>
<property name="strList">
<list>
<value>asdfasdf</value>
<value>xxxx</value>
</list>
</property>
<property name="strMap">
<map>
<entry key="cn" value="中国"/>
<entry key="us" value="美国"/>
</map>
</property>
<property name="props">
<props>
<prop key="xxx">XXX</prop>
</props>
</property>
<property name="javaBean2" ref="javaBean2"/>
</bean>
</beans>
测试类
@Test
public void testCollectionDI(){
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext-*.xml");
//上边的-*指的就是applicationContext-base.xml和applicationContext-collection.xml
JavaBean3 jb = (JavaBean3)context.getBean("javaBean3");
System.out.println(jb.getStrSet());
System.out.println(jb.getStrList());
System.out.println(jb.getStrMap());
System.out.println(jb.getProps());
JavaBean2 jb2 = jb.getJavaBean2();
if(jb2 != null){
System.out.println("jb2.intValue" + jb2.getIntValue());
}
}
测试结果
[abc, 中国]
[asdfasdf, xxxx]
{cn=中国, us=美国}
{xxx=XXX}
jb2.intValue321
最后,介绍下继承装配
<bean>元素提供了两个特殊属性来支持装配Bean的继承:
parent:指定父类Bean的id。 相当于java中extends
abstract:如果设置为true,表示此Bean为抽象的,不能被Spring容器实例化。
具体示例
ParentBean.java
package com.javacrazyer.bean;
public class ParentBean {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
ChildBean.java
package com.javacrazyer.bean;
public class ChildBean extends ParentBean {
private String address;
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
Spring配置applicationContext-adv.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/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
<bean id="parent" class="com.javacrazyer.bean.ParentBean" abstract="true">
<property name="name" value="javacrazyer"/>
<property name="age" value="38"/>
</bean>
<bean id="child" class="com.javacrazyer.bean.ChildBean" parent="parent">
<property name="address" value="北京大兴"/>
<property name="age" value="16"/>
</bean>
</beans>
测试代码
@Test
public void testExtends(){
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext-*.xml");
ChildBean c = (ChildBean)context.getBean("child");
System.out.println(c.getName());
System.out.println(c.getAge());
System.out.println(c.getAddress());
}
测试结果
javacrazyer
16
北京大兴
发表评论
-
Spring温习(9)--配置hibernate信息
2010-11-04 09:45 3119有时候为了为了操作方便,我们时常在spring整合hibern ... -
Spring温习(8)--国际化的支持
2010-11-03 11:07 3798我今天介绍的国际化呢,平时基本上都用不上,我的项目中也从来没用 ... -
Spring温习(7)--有关定时任务Quartz的示例
2010-11-02 23:07 2835实际项目中有关定时任务的使用还是比较普遍的,比如定时做报表,定 ... -
Spring温习(6)--邮件发送实现
2010-10-28 21:55 7683Spring对邮件发送支持的很好,我们只要配置好邮件发送器,写 ... -
Spring温习(5)--CGLIB的动态代理[附AOP内部实现讲解]
2010-10-27 14:55 8885这篇文章紧接着上一篇静态代理和动态代理来说 前言: 到现在 ... -
Spring温习(4)--静态代理和动态代理
2010-10-27 11:27 3342代理模式分为静态代理和动态代理。静态代理就是我们自己定义的代理 ... -
Spring温习(3)--AutoWire自动装配
2010-10-27 09:48 3110在应用中,我们常常使用<ref>标签为JavaBe ... -
Spring温习(1)--最基础的示例
2010-10-26 21:37 3499从现在开始,我将从Spring为起点,逐步复习几大框架各方面的 ... -
Spring事务管理的两种方式
2010-10-26 17:27 4039目前项目开发过程中对于Spring的事务管理,主要就这么两种方 ... -
Spring数据源配置的三种方式
2010-10-26 15:25 3788spring数据源配置目前确切的说应该分为:spring容器自 ... -
Spring AOP的两种实现方式
2010-10-26 11:18 5838AOP常用实现方式是一个采用声明的方式来实现,一个采用注解的方 ... -
Spring AOP原理及拦截器
2010-10-26 10:38 147920原理 AOP(Aspect Oriented Pro ... -
在MyEclipse8.5中恢复jpetstore项目
2010-10-22 17:24 2326恢复jpetstore项目的过程1.在myeclipse8.5 ... -
SpringMVC关键问题讲解
2010-10-21 21:31 22935接着上篇文章,大家可能关心的那两个问题 1.control ... -
SpringMVC入门实例及详细讲解
2010-10-21 20:48 215131Spring 框架提供了构建 Web 应用程序的 ...
相关推荐
Spring5 框架 ---- IOC容器 ---- 代码 Spring5 框架 ---- IOC容器 ---- 代码 Spring5 框架 ---- IOC容器 ---- 代码 Spring5 框架 ---- IOC容器 ---- 代码 Spring5 框架 ---- IOC容器 ---- 代码 Spring5 框架 ---- ...
在Java Spring框架中,Spring IoC(Inversion of Control,控制反转)是核心特性之一,它使得应用程序的组件之间的依赖关系不再由代码直接管理,而是交由Spring IoC容器负责。这种设计模式降低了代码间的耦合,提高...
1. **IoC容器**:Spring的IoC容器是实现IoC的核心。它负责读取配置文件(XML或Java注解),创建和初始化对象,并管理它们之间的依赖关系。容器通过反射机制来实例化对象,并通过setter方法或构造函数注入依赖。 2. ...
在本教程中,我们将深入探讨Spring.NET中的重要组件——IOC(Inversion of Control,控制反转)容器,以及如何通过它来管理对象的生命周期和依赖关系。 IOC容器是Spring.NET的核心,它负责创建、配置和组装应用程序...
例如,开发者可以定义bean的定义,包括类名、属性以及依赖的其他bean,然后由Spring容器负责创建和管理这些bean。 其次,AOP是Spring的另一大亮点。AOP允许开发者定义“切面”,这些切面可以插入到应用程序的多个点...
这个jar文件"Spring-ioc-jar"包含了实现Spring IOC功能所需的关键类和接口,是学习和使用Spring IOC技术的基础。 Spring框架的IOC容器是其核心组件,主要由`ApplicationContext`和`BeanFactory`两个接口代表。`...
023-spring-ioc-ioc容器的bean获取三种方式.mp4 024-spring-ioc-扩展组件周期方法.mp4 025-spring-ioc-扩展作用域配置.mp4 026-spring-ioc-扩展factoryBean使用.mp4 027-spring-ioc-三层架构组件管理介绍和...
023-spring-ioc-ioc容器的bean获取三种方式.mp4 024-spring-ioc-扩展组件周期方法.mp4 025-spring-ioc-扩展作用域配置.mp4 026-spring-ioc-扩展factoryBean使用.mp4 027-spring-ioc-三层架构组件管理介绍和...
023-spring-ioc-ioc容器的bean获取三种方式.mp4 024-spring-ioc-扩展组件周期方法.mp4 025-spring-ioc-扩展作用域配置.mp4 026-spring-ioc-扩展factoryBean使用.mp4 027-spring-ioc-三层架构组件管理介绍和...
023-spring-ioc-ioc容器的bean获取三种方式.mp4 024-spring-ioc-扩展组件周期方法.mp4 025-spring-ioc-扩展作用域配置.mp4 026-spring-ioc-扩展factoryBean使用.mp4 027-spring-ioc-三层架构组件管理介绍和...
IoC容器是Spring的核心,它负责管理对象的生命周期和对象间的依赖关系。在本教程中,我们将深入探讨Spring如何通过配置文件实现IoC。 ### 1. Spring IoC概述 IoC(Inversion of Control)是一种设计原则,它将控制...
当需要使用CGLIB或Objenesis创建代理对象时,Spring容器会根据配置和上下文信息,动态地生成并管理这些代理对象。 6. **测试支持**: 在测试环境中,Objenesis可以帮助快速创建对象,尤其是那些带有复杂初始化逻辑...
2. **Spring容器**:Spring的核心是IoC容器,如BeanFactory和ApplicationContext,它们负责读取配置,实例化、配置及管理Bean。 3. **Bean定义**:如何在XML或Java配置中定义Bean,包括其类名、初始化方法、属性...
1. **自动扫描和实例化Action类**:插件会自动扫描指定包下的Action类,并通过Spring容器来创建和管理这些Action实例。 2. **依赖注入**:Struts2的Action可以通过字段或者构造函数接收Spring管理的bean,实现依赖...
例如,Spring的事件驱动模型、AOP的实现原理、以及IoC容器的内部工作流程等。此外,源码还展示了Spring如何与其他技术(如JDBC、JMS、EJB等)无缝集成,以及如何利用注解简化配置。 通过阅读和分析"spring-...
### Spring入门学习:IOC与DI详解 #### 一、什么是IOC? **IOC**,全称为 **Inversion of Control**(控制反转),它并不是一项具体的技术,而是一种设计思想。在传统的Java开发过程中,当我们需要使用某个组件时...
在Struts2中引入Spring插件,可以将Struts2的动作类(Action)声明为Spring的bean,这样Struts2就可以通过Spring容器来管理和实例化这些动作类。这样做的好处包括: 1. **依赖注入**:通过Spring的DI功能,可以方便...
这些schema定义了如何编写XML配置文件,使开发者能够遵循一定的结构和约定,更规范地配置Spring容器及其组件。它们对于理解和编写Spring的XML配置文件至关重要。 在使用Spring Framework 5.3.1时,开发者可以利用其...
IoC使得对象的创建和管理由Spring容器负责,而不是由代码直接创建,这样降低了组件之间的耦合度。AOP则允许开发者定义“切面”,将关注点如日志、事务管理等与业务逻辑分离,提高了代码的可维护性和可复用性。 该...
可选:用测试覆盖服务如何使项目运行从GitHub克隆存储库: git clone git@github.com:ifqthenp/otus-spring-hw-01-ioc-xml.git 使用以下命令进入文件夹: cd otus-spring-hw-01-ioc-xml 使gradlew脚本可执行(如果...