服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - 浅析Spring配置文件

浅析Spring配置文件

2020-07-31 15:370nise Java教程

本文主要对Spring配置文件进行了介绍。具有很好的参考价值,下面跟着小编一起来看下吧

spring的配置文件概述

简介

spring的配置文件是用于指导spring工厂进行bean生成、依赖关系注入及bean示例分发的”图纸”,他是一个或多个标砖的xml文档,j2ee程序员必须学会灵活应用这份”图纸”,准确的表达自己的”生成意图”。

spring配置文件的示例

spring配置文件的一般结构

浅析Spring配置文件

spring容器高层视图

spring容器启动基本条件:

spring的框架类包

bean的配置信息

bean的元数据信息

bean的实现类

浅析Spring配置文件

bean的属性信息

例如:数据源的用户名、密码

bean的依赖关系

spring根据依赖关系配置完成bean之间的装配

bean的行为配置

例如:生命周期范围、生命周期各个过程的回调函数

bean的创建方式

说明bean是通过构造器还是工厂方法来创建的

bean的实现类

基于xml的配置

spring的配置文件是基于xml格式的,spring1.0的配置采用dtd格式,spring2.0以后使用schema的格式,后者让不同类型的配置拥有了自己的命名空间,是配置文件更具有扩展性。

xml分析

?
1
2
3
4
5
6
7
8
9
10
11
12
13
<?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"
xsi:schemalocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
<bean id="saleproduct" class="com.sale.entity.saleproduct" ></bean>
<aop:config>
<aop:pointcut expression="execution(* com.sale.service.*.*(..))" id="mycut"/>
</aop:config>
</beans>

xmlns="":表示默认命空间,用于spring bean定

xmlns:xsi="http://www.w3.org/2001/xmlschema-instance":表示xsi标准命名空间,用于指定自定义命名空间的schema文件

xmlns:aop="":表示自定义命名空间,aop表示该命名空间的简称

xsi:schemalocation="

 

">:用于为每个命名空间指定具体的schema文件

<bean id="saleproduct" class="com.sale.entity.saleproduct" ></bean>:为默认命名空间中的配置

<aop:config>

<aop:pointcut expression="execution(* com.sale.service.*.*(..))" id="mycut"/>

</aop:config>:为aop命名空间的配置

schema文件的用途

spring3.0的配置schema文件分部在各模块类包中,如果模块拥有对应的schema文件,则可以在模块类包中找到一个config目录,schema文件就为与该目录中,如下是对这些schema文件的用途:

示例说明:spring-aop-3.0.xsd

命名空间:

schema文件:

1. spring-beans.xsd :用于配置bean

2. spring-aop-3.0.xsd :aop配置

3. spring-tx-3.0.xsd:声明式事务配置的schema

4. spring-mvc-3.0.xsd:3.0新增的

5. spring-utils-3.0.xsd:简化某些复杂的标准配置

6. spring-jee-3.0.xsd:是为简化jee中ejb和jndi等功能的配置

7. spring-jdbc-3.0.xsd:是3.0新增的,配置spring内接数据库提供的schema

8. spring-jms-3.0.xsd:jms的配置

9. spring-lang-3.0.xsd:添加了对动态语言的支持,集成动态语言定义的

10. spring-oxm-3.0.xsd:配置对象xml映射到schema

11. spring-task-3.0.xsd:任务调度的schema

12. spring-tool-3.0.xsd:集成的spring有用工具而定义的schema

spring bean的命名

每个bean可以有一个或多个id,我们把第一个id成为”标识符”,其余id叫做id别名,这些id在ioc容器中必须唯一。

bean id的命名方式

配置全限定类名,唯一

<bean class="com.sale.entity.saleproduct" ></bean>

指定id,唯一

<bean  id="saleproduct"class="com.sale.entity.saleproduct" ></bean>

指定name,唯一

<bean name="saleproduct" class="com.sale.entity.saleproduct" ></bean>

指定id和name,唯一

<beanid="saleproduct"name="saleproduct"class="com.sale.entity.saleproduct" ></bean>

指定多个name,唯一

<bean name="bean1;alias1;alias2" class="com.sale.entity.saleproduct" ></bean>

指定多个id,唯一

<bean id="bean1;alias1;alias2" class="com.sale.entity.saleproduct" ></bean>

指定别名,唯一

?
1
2
<bean id="saleproduct" class="com.sale.entity.saleproduct" ></bean>
<alias name="saleproduct" alias="alias1"/>

bean id的命名约定

1、遵循xml命名规范

2、由字母,数字,下划线组成

3、驼峰式,第一个单词首字母小写,从第二个但是开始第首字母大写

spring bean的实例化

spring ioc容器是如何实例化bean呢?传统应用程序可以通过 new和反射方式进行实例化bean。二spring ioc容器则需要根据bean定义的配置元数据使用反射机制来创建bean。

spring ioc容器创建bean示例的方式

使用构造器实例化bean

默认构造

<bean id="saleproduct" class="com.sale.entity.saleproduct" ></bean>

必须存在无参数的构造

有参构造

?
1
2
3
<bean id="saleproduct" class="com.sale.entity.saleproduct" >
<constructor-arg name="prodname" value="哈哈" ></constructor-arg>
</bean>

必须存有参数的构造

使用静态工厂实例化bean

必须的class属性,factory-method属性指定实例化bean的方法,而且使用静态工厂方法也允许指定方法参数,spring ioc容器将调用此属性指定的方法来获取bean

?
1
2
3
<bean factory-method="newinstance" id="saleproduct" class="com.sale.entity.saleproduct" >
<constructor-arg index="0" value="hello" ></constructor-arg>
</bean>

使用实例工厂方法实例化bean

不能指定class属性,factory-bean来指定工厂bean,factory-method指定实例化bean的方法,而且使用实例工厂方法也允许指定参数

?
1
2
3
4
5
6
<!-- 定义实例工厂bean -->
<bean id="saleproduct1" class="com.sale.entity.saleproduct" ></bean>
<!-- 使用实例工厂bean -->
<bean id="saleproduct2" factory-bean="saleproduct1" >
<constructor-arg index="0" value="hello" ></constructor-arg>
</bean>

spring bean的作用域

spring bean中所说的作用域,在配置文件中即是”scope”。早面向对象程序设计中一般指对象或变量之间的可见范围。而在spring容器中是指其创建的bean对象相对于其他bean对象的请求范围。

spring bean的作用域类型

singleton

spring ioc容器中仅存在一个bean的实例,bean以单利方式存在,单实例模式是最重要的设置模式之一,在spring中对此实现了超越,可以对那些非线程安全的对象采用单例模式(一般使用在dao层)

浅析Spring配置文件

浅析Spring配置文件

<bean scope="singleton" id="saleproduct" class="com.sale.entity.saleproduct" ></bean>

prototype

每次从容器中调用bean时,都会返回一个全新的实例,即每次调用getbea()时,相当于执行new bean()的操作。在默认情况下,spring容器在启动时不实例化propotype的bean。

浅析Spring配置文件

浅析Spring配置文件

<bean scope="prototype" id="saleproduct" class="com.sale.entity.saleproduct" ></bean>

当用于使用spring的webapplicationconext时,还可以使用另外三种bean的作用域,即request,session和globlesession。在使用web应用环境相关的bean作用域时,必须在web容器中进行一些额外的配置

低版本web容器配置:

?
1
2
3
4
5
6
7
8
<filter>
 <filter-name>requestcontextfilter</filter-name>
 <filter-class>org.springframework.web.requestconextfilter</filter-class>
</filter>
<filter-mapping>
 <filter-name>requestcontextfilter</filter-name>
 <servlet-name>/*</servlet-name>
</filter-mapping>

高版本的web容器配置:

?
1
2
3
4
5
<listener>
 <listener-class>
org.springframework.web.context.request.requestconextlinstener
 </listener-class>
</listener>

request

发起一次http请求的时候spring会创建一个全新实例

<bean scope="request" id="saleproduct" class="com.sale.entity.saleproduct" ></bean>

session

当前会话

<bean scope="session" id="saleproduct" class="com.sale.entity.saleproduct" ></bean>

global session

httpsession会话

<bean scope="global session" id="saleproduct" class="com.sale.entity.saleproduct" ></bean>

自定义作用域

在spring 2.0中,spring的bean作用域机制是可以扩展的,这意味着,不仅可以使用spring提供的预定义bean作用域,还可以定义自己的作用域,甚至重启定义现有的作用域(不提倡这么做,而且不能覆盖内置的sinleton和prototype作用域)

实现自定义scope类:

org.springframework.bean.factory.config.scope

注册自定义scope类:

configurablebeanfactory.registerscope(string scopename,scope scope)

使用自定义的scope:

?
1
2
3
scope customscope = new threadscope();
beanfactory.registerscope(“thread”,customscope);
<bean id=”***” class=”***” scope=”scopename”>

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持服务器之家!

原文链接:http://www.cnblogs.com/0nise/p/6323588.html

延伸 · 阅读

精彩推荐