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

详解SSJ(Spring3.x mvc + Spring3.x Core + JPA2.x)轻量级集成开发—第3章 剖析依赖装配参数

阅读更多

上一章 详解SSJ(Spring3.x mvc + Spring3.x Core + JPA2.x)轻量级集成开发—第2章 剖析IOC容器进阶

下一章 详解SSJ(Spring3.x mvc + Spring3.x Core + JPA2.x)轻量级集成开发—第4章 剖析Annotations特性

 

目录

一、原始类型(字面值)注入;

二、引用类型(复合类型)注入;

三、集合类型注入;

 

前言

在上一章中,笔者详细的讲解了关于IOC容器的方方面面。对于刚接触Spring的朋友而言,笔者建议你一定要仔细的阅读笔者前几章讲解的内容,因为只有当你熟知这些最基本也是最核心的内容后,你才会更容易接受后续章节的内容。看过笔者博文的朋友都给笔者提过一些非常重要的意见,笔者在此由衷的感谢你们 ,是你们的支持才让笔者的博文更加精彩。大家应该都知道笔者的博文一般不太喜欢讲解一些不重要且罗里吧嗦几乎很难用到的东西,这是笔者的风格。但如果你觉得你希望看到非常全面的内容,那么笔者推荐你参考Spring的官方使用手册。

 

一、原始类型(字面值)注入

依赖装配有2种常规的方式,一种是投值注入,另外一种也就是构造注入。虽然在前面章节中笔者已经详细的讲解过了2种注入方式的用法,但是本章还需继续对依赖装配的参数类型做进一步讲解。

我们都知道在JVM内部,原始数据类型有4类8种:

1、整数类型:byte、short、int、long;

2、浮点类型:float、double;

3、字符类型:char;

4、布尔类型:boolean;

 

当然JVM内部还存在一种原始类型returnAddress,很遗憾的是Java程序员并不能够使用该类型,该类型被用来实现Java程序设计语言中的finally子句。

来看看在IOC配置文件的<bean/>标签中,我们使用<property/>标签来实现原始类型的投值注入:

<?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:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
	http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
	<bean name="product" class="org.johngao.bean.ProductBean">
		<property name="productName" value="洗面奶" />
		<property name="productPrice" value="16.8" />
		<property name=productStock value="200" />
		<property name="productDiscount" value="false" />
	</bean>
</beans>

 

对应的Bean代码如下:

public class ProductBean 
{
	private String productName;
	private double productPrice;
	private int productStock;
	private boolean productDiscount;
	
	/* 此处省略set和get方法 */
}

 

定义在IOC配置文件中的“value”属性值其实都是为字符串,只不过当IOC进行依赖装配的时候,会强制性做类型检查然后对应转换为所定义在Bean中属性的类型,这便是原始类型参数的注入。当然使用构造注入的方式和投值注入式一样的,所以笔者在此就不再重复演示使用构造注入的方式来注入原始数据类型,或许你可以自己尝试。

 

二、引用类型(复合类型)注入

其实所谓引用类型,我们可以理解为对象类型。也就是说在JVM的数据类型中,除了原始数据类型外,其余的都是引用类型。相信大家都应该知道引用类型一般由3种类型组成:

1、类类型;

2、数组类型;

3、接口类型;

 

其中类类型的值是对类实例的引用,接口类型则是对其派生类的实例引用,数组类型则是对数组对象的引用。在JVM中存在一种特殊的引用值null,该引用值表示引用类型的变量没有引用任何对象。

JVM原始类型并没有作为引用类型来实现,这样做的目的是出于效率方面的考虑。因为引用类型的变量所持有的是引用值,并不是真正的原始数据,这种间接的层次增加了资源的开销,而原始类型则没有这种开销。

可能会有很多朋友会问引用类型和原始类型有什么区别呢?原始类型的变量持有的是其原始值,然而引用类型的变量则持有引用值。原始值是指真正的原始数据,引用值指的则是对某个对象的引用,并不是目标对象本身。

JVM中的数据类型示例图:

 

 

提示:

大家来猜猜看JVM中是否存在指针?或许大部分人说有,大部分人说没有。当然笔者在这里并不是想挑起事端,笔者的浅见仅仅只是认为JVM中其实并不存在真正意义上的指针,只是说对象的引用就类似于指针的操作,仅此而已。

 

接下来咱们仍然使用投值注入的方式来注入引用类型参数,只不过这里咱们需要使用到“ref”属性进行引用:

<?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:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
	http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
	<bean name="productBean" class="org.johngao.bean.ProductBean">
		<property name="buyBean" ref="buyBean"/>
	</bean>
	<bean name="buyBean" class="prg.johngao.bean.BuyBean"/>
</beans>

 

 当IOC容器对参数进行依赖装配之前,首先会实例化定义在IOC配置文件中的Bean实例,不管这个Bean实例是否是单例,实例化操作绝对优先于依赖装配,这一点希望大家切记。笔者发现很多刚学习Spring的朋友往往最容易犯的一个错误就是在IOC容器实例化Bean实例的时候赋值或者引用还未依赖装配的参数,往往这种错误发生的时候,新手相当郁闷,甚至会自顾自的说,怎么搞的,我明明依赖装配了啊,也引用了依赖装配啊,怎么还是不行呢,所以细心是关键。

新手常见错误如下:

@Resource
private String productName;
private String productName2 = productName;

 

 仔细观察上述代码,IOC容器在初始化Bean实例的时候,其实还并未对productName属性进行依赖装。但这个时候productName2属性已经在引用productName的值了,想想看productName的缺省构造赋值是什么?没错就是“null”,所以希望大家注意下。

 

三、集合类型注入

在很多情况下,我们依赖装配注入的参数可能会使用到集合类型。从严格意义上来说集合类型也是属于引用类型的一种,那么接下来我们就来看看如何注入集合类型参数,这里值得庆幸的是Spring对集合类型的参数注入提供了良好的支持。

先来看看使用投值注入的方式如何注入一个List类型的集合类型:

<?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:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
	http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
	<bean name="products" class="org.johngao.bean.Products">
		<property name="productBeans">
			<list>
				<bean class="org.johngao.bean.ProductBean">
					<property name="productName" value="洗面奶" />
					<property name="productPrice" value="16.8" />
					<property name="productStock" value="200" />
					<property name="productDiscount" value="false" />
				</bean>
				<bean class="org.johngao.bean.ProductBean">
					<property name="productName" value="洗发水" />
					<property name="productPrice" value="36.8" />
					<property name="productStock" value="30" />
					<property name="productDiscount" value="true" />
				</bean>
			</list>
		</property>
	</bean>
</beans>

 

上述配置文件中笔者演示了如何使用投值注入的方式注入一个List集合类型,如果你想使用Set或者Map集合的方式注入你的集合参数,Spring也是支持的。

来看看使用构造注入的方式如何注入一个Set类型的集合类型:

<?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:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
	http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
	<bean name="products" class="org.johngao.bean.Products">
		<constructor-arg>
			<set>
				<bean class="org.johngao.bean.ProductBean">
					<property name="productName" value="洗发水" />
					<property name="productPrice" value="36.8" />
					<property name="productStock" value="30" />
					<property name="productDiscount" value="true" />
				</bean>
				<bean class="org.johngao.bean.ProductBean">
					<property name="productName" value="洗面奶" />
					<property name="productPrice" value="16.8" />
					<property name="productStock" value="100" />
					<property name="productDiscount" value="true" />
				</bean>
			</set>
		</constructor-arg>
	</bean>
</beans>

 

通过上述配置文件我们可以发现,如果注入集合参数时,我们可以指定<list/>、<map>、<set/>等标签来进行标注,至此本章的内容到此结束了,由于时间仓库,本文可能存在诸多不尽人意的地方,希望各位体谅

4
1
分享到:
评论
17 楼 duoduodeai 2013-01-19  
ximinjie 写道
能不能直接上点干货啊。。直接讲下整合SSJ的过程嘛。

干活,还硬通货呢。你砸自己不写
16 楼 gao_xianglong 2013-01-18  
能不能直接上点干货啊。。直接讲下整合SSJ的过程嘛。
ximinjie 写道
能不能直接上点干货啊。。直接讲下整合SSJ的过程嘛。

实在不好意思,在下想讲解细粒度的功能点,整合过程简单,但这不是我的目的。
15 楼 ximinjie 2013-01-18  
能不能直接上点干货啊。。直接讲下整合SSJ的过程嘛。
14 楼 gao_xianglong 2013-01-18  
longfor5 写道
一边抢票一边拜读这篇文章,不过这一篇比起前几篇讲的有点浮于表面了,呵呵,不过讲的也不错。持续关注~


谢谢
13 楼 gao_xianglong 2013-01-18  
linuxp363 写道
是每天一更新吗

这个不好说,尽量每天
12 楼 linuxp363 2013-01-18  
是每天一更新吗
11 楼 longfor5 2013-01-18  
一边抢票一边拜读这篇文章,不过这一篇比起前几篇讲的有点浮于表面了,呵呵,不过讲的也不错。持续关注~
10 楼 gao_xianglong 2013-01-17  
duoduodeai 写道
gao_xianglong 写道
duoduodeai 写道
使用构造注入的时候,如果是注入集合类型,不需要指定类型吗?????


注入集合类型的时候,不需要指定其类型。


哦,了解了

谢谢支持
9 楼 duoduodeai 2013-01-17  
gao_xianglong 写道
duoduodeai 写道
使用构造注入的时候,如果是注入集合类型,不需要指定类型吗?????


注入集合类型的时候,不需要指定其类型。


哦,了解了
8 楼 gao_xianglong 2013-01-17  
duoduodeai 写道
使用构造注入的时候,如果是注入集合类型,不需要指定类型吗?????


注入集合类型的时候,不需要指定其类型。
7 楼 duoduodeai 2013-01-17  
使用构造注入的时候,如果是注入集合类型,不需要指定类型吗?????
6 楼 gk1987 2013-01-17  
gao_xianglong 写道
gk1987 写道
楼主文章通俗易懂,说的很好!顶上!

在下觉得好的文章是应该显浅易懂,而不是故弄玄虚

的确,我也这么认为!
5 楼 gao_xianglong 2013-01-17  
bifa37 写道
来报道学习了!!


谢谢支持
4 楼 gao_xianglong 2013-01-17  
gk1987 写道
楼主文章通俗易懂,说的很好!顶上!

在下觉得好的文章是应该显浅易懂,而不是故弄玄虚
3 楼 gk1987 2013-01-17  
楼主文章通俗易懂,说的很好!顶上!
2 楼 bifa37 2013-01-17  
来报道学习了!!
1 楼 duoduodeai 2013-01-17  
  

相关推荐

    spring-ssj.rar_spring_spring+Struts2+jpa集成

    在"spring-ssj.rar_spring_spring+Struts2+jpa集成"这个压缩包中,我们很可能会找到一个示例项目,展示了如何将Spring、Struts2和JPA进行集成。以下是这个集成过程的一些关键知识点: 1. **Spring配置**:首先,...

    Spring MVC+Spring+Spring data JPA

    Spring MVC、Spring 和 Spring Data JPA 是 Java 开发中非常重要的三个框架,它们共同构建了一个强大的企业级应用开发环境。Spring MVC 是一个用于构建 Web 应用的模型-视图-控制器(MVC)框架,Spring 提供了依赖...

    ssj(spring+Struts2+jpa)框架的集成(含jar包)

    综上所述,SSJ框架的集成利用了Spring的灵活性和控制反转,Struts2的MVC设计模式,以及JPA的数据持久化能力,为企业级应用提供了强大而灵活的开发基础。在实际项目中,开发者可以根据需求调整和扩展这个框架,以满足...

    Spring+Struts2+JPA

    **Spring+Struts2+JPA 整合详解** 在Java Web开发中,Spring、Struts2和JPA是三个非常重要的框架。Spring作为一个全面的轻量级框架,提供了依赖注入(DI)和面向切面编程(AOP)等功能;Struts2是一个强大的MVC框架...

    struts1.x+spring+jta集成例子(包含所有jar包)

    Struts1.x、Spring 和 JTA(Java Transaction API)是Java Web开发中常见的三大技术,它们各自在应用程序架构中承担着不同的角色。本集成例子旨在展示如何将这三者结合,构建一个完整的业务处理系统。 Struts1.x是...

    SSJ(struts2+spring+jpa)

    SSJ,全称为Struts2、Spring和JPA的组合,是Java开发中常见的Web应用程序架构模式。这个项目采用SSH框架,即Struts2作为MVC(Model-View-Controller)框架,Spring作为依赖注入(Dependency Injection,DI)和应用上...

    SSH/SSJ整合,Spring 3.1.0M1,Hibernate 3.X,struts2.1.8

    本项目结合了Spring 3.1.0M1、Hibernate 3.X以及Struts2.1.8,旨在提供一个最新的整合示例。 Spring作为核心框架,3.1.0M1是其早期的一个里程碑版本,带来了许多改进和新特性。例如,它强化了依赖注入(DI),使得...

    struts2+spring+jpa整合的完整例子(含分页)

    在学习jpa时候做的一个struts2+spring+jpa整合的完整例子 包含分页,一个简单的 资产入库系统 并实现了登陆等。

    Struts+spring+JPA例子

    Struts2、Spring和JPA是Java开发中的三大核心框架,它们各自负责应用程序的不同层面,协同工作能够构建出高效、可维护的企业级Web应用。在这个"Struts2.2.3+Spring3.0.5+JPA2.0"的例子中,我们将深入探讨这三个框架...

    SSJ.rar_Jap spring_ssj

    SSJ.rar_Jap_spring_ssj 是一个与Java应用程序开发相关的压缩包,它结合了Struts、Spring和JAP(可能是Java应用平台)这三种技术。这个项目可能是一个示例或者教程,展示了如何将这三个框架集成在一起以实现特定的...

    Spring2.5+struts1.2+JPA集成

    由于文件的大小限制,所需jar包请自行加入。但要注意在项目发部的时候,tomcat启动时总是报错,解决办法是把Tomcat中项目的lib文件夹下的asm-2.2.3.jar包删掉!或者把Spring的AOP Library包移除就OK了!

    JPA+Spring+Struts整合实例

    在Java企业级应用开发中,Spring、Struts和JPA(Java Persistence API)是三个非常重要的框架。它们分别负责不同的职责:Spring作为一个全能型框架,提供了依赖注入(DI)和面向切面编程(AOP),以及对其他框架的...

    ssj.rar_jpi框架_spring的jpi_struts2 jsp spring

    SSJ.rar是一个包含示例代码的压缩包,主要展示了如何集成和使用JPI(可能是Java Persistence Interface或自定义的框架)框架与Spring以及Struts2进行Web应用开发。在这个项目中,开发者可能想要演示如何在Spring中...

    spring-mvc-demo.zip

    Spring MVC 框架是Java开发中的一个核心组件,它为构建Web应用程序提供了一种模型-视图-控制器(MVC)架构。Spring框架本身提供了丰富的功能,包括依赖注入、AOP(面向切面编程)、事务管理等,而Spring MVC则是...

    ssj整合开发jar包清单

    Spring 是一个开源的轻量级 Java EE 开发框架,其核心功能包括依赖注入、面向切面编程等。Spring 3.0 版本带来了许多新的特性和改进,如支持 HTTP 方法注解、更强大的 XML 配置等。 - **核心库**: - `spring-core...

    Struts1.3+spring2.5+JPA(hibernate) demo

    Struts1.3、Spring2.5和JPA(基于Hibernate)是Java Web开发中三个重要的框架,它们的集成使用可以构建出强大的企业级应用。这个"Struts1.3+spring2.5+JPA(hibernate) demo"提供了一个实践性的学习案例,帮助初学者...

    ssh+ssj+ssi jar包第一部分

    苦恼直接使用此包可以进行ssh ssi ssj 使用jpa开发时支持给中ROM,版本:struts2.1.8+spring2.5.6+ibatis2.3+hibernate3.3.2+structjson+dwr不多说了 分两部分,因为每次不超过 15M, 这些包一共 18M多 第二部分 ...

    spring jpa操作数据库 级联数据 hibernate

    SSJ通常指的是Struts2、Spring和JPA的集成,这种架构常见于大型企业应用。通过PPTX文件"ssj框架搭建",我们可以了解到如何配置这三个框架,实现它们之间的协作。 6. **示例项目和资源:** - "JPA+-amp+Hibernate+...

    struts2+spring2.5+jpa(基于注释)

    Struts2、Spring2.5 和 JPA 是Java企业级开发中的三大核心技术,它们共同构建了一个强大且灵活的Web应用程序框架。在这个“SSJ使用注释版”项目中,开发者利用注解的方式简化了配置,使得整个应用的搭建更加直观和...

    Spring SpringMVC Jpa整合Demo

    在JavaEE开发中,Spring、SpringMVC和JPA是三个非常重要的框架,它们的整合应用可以极大地提高开发效率和代码质量。这个"Spring SpringMVC Jpa整合Demo"就是一个典型的例子,它展示了如何将这三个框架协同工作,构建...

Global site tag (gtag.js) - Google Analytics