Spring学习(3) 装配Bean

声明Bean

创建Spring配置

从Spring3.0开始,Spring容器提供了两种配置Bean的方式。传统上,Spring使用一个或多个XML文件作为配置文件,而Spring3.0还同时提供了基于Java注解的配置方式,我们首先来关注传统的XML文件配置方式

在XML文件中声明Bean时,Spring配置文件的根元素是来源于Spring beans命名空间所定义的元素。以下为一个典型的Spring 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.springframe.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
    <!-- Bean declarations go here -->
    </bean>

在元素内,你可以放置所有的Spring配置信息,包括元素的声明。Spring的核心框架自带了10个命名空间配置,如表:

命名空间用途
aop为声明切面以及将@AspectJ注解的类代理为Spring切面提供了配置元素
beans支持声明Bean和装配Bean,是Spring最核心也是最原始的命名空间
context为配置Spring应用上下文提供了配置元素,包括自动检测和自动装配Bean、注入非Spring直接管理的对象
jee提供了与Java EE API的集成,例如JNDI和EJB
jms为声明消息驱动的POJO提供了配置元素
lang支持配置由Groovy、JRuby或BeanShell等脚本实现的Bean
mvc启用Spring MVC的能力,例如面向注解的控制器、视图控制器和拦截器
tx提供声明式配置
oxm支持Spring的对象到XML映射配置
util提供各种各样的工具类元素,包括把集合配置为Bean、支持属性占位符元素
声明一个简单的Bean
<bean id="duke" class="com.springaction.springidol.Juggler" />

元素是Spring中最基本的配置单元,通过该元素SPring将创建一个对象。这里创建了一个由SPring容器管理的名字为duke的Bean。这有可能是最简单的配置方式。id属性定义了Bean的名字,也作为该Bean在Spring容器中的引用。这个Bean被称为duke。你还可以根据class属性得知,duke是一个Juggler。

当Spring容器加载该Bean时,Spring将使用默认的构造器来实例化duke Bean。实际上duke会使用如下代码来创建:

new com.springincation.springidol.Juggler();

为了给Duke一个排练的机会,你可以使用如下代码加载Spring上下文:

ApplicationContext ctx = new ClassPathXmlApplicationContext(
"classpath/spring-idol.xml");
通过构造器注入

下面的XML声明了Duke成为一个可以同时抛15个豆子的杂技师:

<bena id="duke"
      class="com.spirngincation.springidol.Juggler">
<constructor-arg value="15" />
</bena>

在构造Bean的时候,我们可以使用元素告诉Spring额外的信息。不配置元素,那么Spring将使用默认的构造方法。

通过构造器注入对象引用

可以使用下面的XML配置将Sonnet29声明为一个Spring:

<bean id="sonnet29"
      class="com.springinaction.springidol.Sonnet29" />

有了poem,你需要做的就是将poem赋予Duke。现在Duke是一个PoeticJuggler了,它的声明需要稍微修改一下:

<bean id="poeticDuke"
      class="com.springinaction.springidol.PoeticJuggler">
<constructor-arg value="15"/>
<constructor-arg ref="sonnet29" />
</bean>

构造PoeticJuggler的唯一方法只能使用带有参数的构造方法。*我们可以使用带有int参数和Poem引用的构造方法。在Duke Bean的声明中,我们通过元素的value属性将豆袋子的个数配置为15。

但是,我们不能使用value属性为第二个构造参数赋值,因为Poem不是简单类型。取而代之的是,我们使用ref属性来讲ID为sonnet29的Bean引用传递给构造器。可以想象当Spring碰到sonnet29和duke的声明时,它所执行的逻辑本质上与下面的Java代码相同:

Poem sonnet29 = new Sonnet29();
Performer duke = new PoeticJuggler(15, sonnet29);

通过工厂方法创建Bean

有时候静态工厂方法是实例化对象的唯一方法。Spring支持通过元素的factory-method属性来装配工厂创建的Bean。

Bean的作用域

所有的Spring Bean默认都是单例。当容器分配一个Bean时(不论是通过装配还是调用容器的getBean()方法),它总是返回Bean的同一个实例。

当在Spring中配置元素时,我们可以为Bean声明一个作用域。为了让Spring在每次请求时都为Bean产生一个新的实例,我们只需要配置Bean的scope属性为prototype即可。

作用域定义
singleton在每一个Spirng容器中,一个Bean定义只有一个对象实例
prototype允许Bean的定义可以被实例化任意次(每次调用都创建一个实例)
request在一次HTTP请求中,每个Bean定义对应一个实例。该作用域仅在基于Web的Spring上下文(例文(例如Spring MVC)中才有效
session在一个HTTP Session中,每个Bean定义对应一个实例。该作用域仅在基于Web的Spring上下文(例文(例如Spring MVC)中才有效
global-session在一个全局HTTP Session中,每个Bean定义对应一个实例。该作用于仅在Portlet上下文中才有效
初始化和销毁Bean

为Bean定义初始化和销毁操作,只需要使用init-method和destroy-method参数来配置元素。init-method属性指定了在初始化Bean时要调用的方法。类似地,destroy-method属性指定了Bean从容器移除之前要调用的放法。

注入Bean属性

通常,JavaBean的属性是私有的,同时拥有一组存取器方法,以setXXX()和getXXX()形式存在。Spring可以借助属性的set方法来配置属性的值,以实现setter方式的注入。

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值