`
huayu611
  • 浏览: 1539 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Spring配置介绍(一)

阅读更多

 

对于spring详细描述这边就不在多话了,不知道什么时候spring已经成为web项目程序员必备的能力。这博客先简单介绍一下最简单的场景,对于jta,aop后面我再慢慢写。

Bean

         对于bean,我们主要为xml和注解两种,这篇我主要想写一下xml方式

spring声明bean时,对于xml文件,我们都知道,可以在web.xml中定义它的文件名格式,而在每一个bean的文件中,在beans的元素里我们也会找到这样的一个节点: http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

这个定义含义是,下面这个对bean的定义规范,使用的是spring3.0schema

我们打开spring-beans-3.0.xsd这个文件,这个文件应该是在spring-beans-*.jar 中的org\springframework\beans\factory\xml,(我参考的是spring4.0版本,其jar名为spring-beans-4.0.0.M1.jar)。

         xmlspy打开xsd,如下图所示,我们一一介绍,(otherdescription不再介绍)

 

 

                                                                                                                                                              

先是beans的大节点,下面我们分条看

attributes:这个里面配置一些通配,如果子bean节点没有配置,则采用这里的配置,如果这里也没有配置,则使用默认值。

1、打开下面的扩展



 

1import: import:这个比较好理解,在xml文件中,spring提供能力,让你可以在这里面配置一个新的xml文件,然后它会去按你配置地址去寻找,最后对它进行加载。这个文件可以不满足web.xml中配置的文件格式。

如:<import resource="USR.xml"/>

当然它是支持jar包内寻找,在二次封装spring中,这个可以很灵活的使用。

 

2alias别名,我们在定义springbeanid时,spring同时支持一个别名模式,比如我们向spring申请一个一个对象,但因业务场景不同对spring中的beanid生成又不同,则这个时候可以使用别名,比如

<bean id="A" class="com.huayu.A" name="B"></bean>

这时你不管用A,还是B,向spring申请对象时,spring给你的都是同一个对象。当然也可以写成

<bean id="A" class="com.huayu.A" ></bean>

<bean id="B" class="com.huayu.A”></bean>

但这个方式在单例的情况下,会生成两个不同的对象。

同样也可以写成<alias name="A" alias="B"/>这样的话,就单独定义别名,如果有多个别名,可以用逗号分开(spring在分隔时使用了,; ,也就是逗号,分号和空格它都认的)

3) bean,这个才是xml中写入bean的地方,我们打开bean的节点。



 

它有一个必选属性,我已经展开了,那就是ididbean的主键是不可或缺的。

我们再看它的第二个可选属性。(这个属性图截起来很多,我就截一小部分,其它直接按顺序写属性名称)



 

name:这个是配置name,前面已经说过,这个里面可以配置bean的别名的。

class:这个上台率绝对是除了主键,它是最高的,它配置了这个bean对应的class路径,package+class,但它仅仅是一个可选属性。后面还有很多属性,说完之后会发现它可以不是一个必要的东西

parentspring设计bean的时候,也有自己的继承模型,你可以将parent配置成其它beanid,这个时候你当前bean的大部分属性将从父bean中获取,可以是class

scope:这个是对场景的控制,我们常用的有两个控制,一个是singleton,一个是prototype

 singleton,是单例的,前面说过懒加载,也是需要这个来约束,向spring申请对象时,它都返回的同一个,因为它只初始化一次,发果没有配置scope,默认也是singleton的。

prototype是多例的,每次向spring申请对象时,它都会重新创建一个对象出来,

这两个我单独说一下,可能基本上对scope的理解,很多人都是这两个,对,这两个很关键,但同样,它们也引发过很多并发问题,而并非出自spring,而是使用者使用不慎导致的,如果你的类和父类中有全局变量,一定要用prototype,如果你想用singleton,一定不能在bean的类中或父类中存在全局变量。有人会说,那我不想排查代码,直接使用prototype,其实prototype每次都创建对象,大量使用务必会导致性能下降,那有人的又会说,那我把所有类中全局变量都优化掉,放弃全局变量,然后配置成singleton,第一,全局变量有它的优势,如果全局变量带来的优势大于单例所带来的优势,那岂不是本末倒置了吗?再者,因为singleton对象,JVM不会对它进行回收,所以它会一直占了内存不放,如果这个类一天或几天才会用一次,何不用prototype呢?

当然scope还有其它属性值,如requestsession,有兴趣的可以自己研究一下。

  abstract,是否为抽象bean,它常常与parent合作使用,因为这类的bean永远不会初始化,它如果有bean继承它,那么它的价值就能体现了。

lazy-init:启动时是否懒加载,spring启动会扫描所有的定义的bean,对那些需要初始化的bean进行初始化,而初始化可能存在三种情况不会被初使化,一种是多例,对于多例的情况,程序向spring申请对象的时候 ,不论何时,都会创建新的对象给调用者,另一种是abstract,是否为抽象,如果为抽象,则这个bean永远不会被初始化,在spring的世界里,不论配置的class是什么类型的,而spring认为它是抽象的,不具备初始化能力,还有一种是懒加载,对于此,比较特殊,在单例的情况下,启动spring不会被初始化,而第一次调用时,它们创建对象,而此后对象一种保存在spring的缓存里,再调用时,直接把这个对象给调用者。lazy-init的默认情况为false,对于多例或abstract情况下,这个配置将失效。

autowire   自动装载,它有5种选项,default ,no, byname, byType, constructor

default:默认为no

no:不会自动装载

byname,通过名字自动装载。比如类中的属性名字为abc,则按abc去寻找对应的bean

byType,通过类型进行自动装载。如果同类型有多个bean使用,则报错。但没有则不会报错。

Constructor:构造器装载(有人可能问应该还有一个autodetect,我是参考的是spring3.0xsd,对于后续版本新加的能力,我这边暂不会提到)

depends-onspring创建bean的时候,在业务上可能需要其它的bean先初始化,则使用depends-on,比如depends-on=”Abc”,那么在初始化这个bean时,发现depends-on,则暂停初始化本bean,优先初始化Abc

autowire-candidate,前面说过,如果在autowire自动装载时,发现多个,则会出现异常,如果我们不想让它报错,比如现在A的类由两个,

<bean id="A" class="com.huayu.A"></bean>

<bean id="B" class="com.huayu.A"></bean>

byType时,找到了两个类,这个时候spring会抛错,如果我们把其中一个标记为一下<bean id="B" class="com.huayu.A" autowire-candidate="true"></bean>

那么会找自动找B,这种就让byType有了生存空间,在项目中同一个类标记为多个spring bean是常有的事情 ,当然你有多个autowire-candidate,也会报错。

primary:有了autowire-candidate,其实spring还不满足,因为有人想autowire-candidate重复也不要报错就好了,那么又有一个primary的属性,那么你autowire-candidate多个,但有一个primary,又能正确找到spring bean了。看来springbyType很重视。

init-method:这个里面可以写一个本类的的方法,也就是spring在初始化类后,会调用一下这个方法,这样扩展了,对象在创建之后 ,可以执行初始化方法。

destroy-method:这个是与init-method方法类型,不过它在销毁时会调用,一般情况下在关闭服务器时会调用。

factory-method 这个是工厂模式创建对象,通常情况下,spring会直接newInstance方式创建对象,如果不想让它创建 ,可以配置factory-method方法进行创建,它可以是本类中的静态方法,也可以是其它类中的普通方法。

factory-bean:前面说过factory-method可以是其它类中的普通方法,如果要用其它类,则在这里要把这个类的bean通过factory-bean属性引用过来。

 

至此,属性已经差不多了,下面我们再看下它下面的元素节点



 



 
meta:



 

它其实很简单,一个key,一个value ,真正使用的场景不是很多。一般在spring内部处理时,会用到元数据。比如说spring script

constructor-arg 这个是构造函数需要的参数 ,如果构造函数有多个参数,则需要多个constructor-arg



 

先看一下attribute

index,表示构造方法中的参数位置,如果没有设置的话,

type表示参数的类型。

Name表示数据的名字。

ref:表示引用,参数从哪里引用过来。

value:值

其实ref value时,这一个构造函数的传参已经定下来了,ref=”a”表示,传这个需要bean A类型的传参,并且实例化,value直接对应值。比如value=”3”,之类的。如果没有这两个值 ,则可能需要下面的这些新的节点来标记传参。

bean:这个算是嵌套进去的,里面的格式与我们正在介绍的bean是一样的。它的作用是这个bean的实例作为传参,它与ref不同时,它完全自己定义。

其实新加的点节也是有ref的。如下图



 

它不是直接把对方bean引进来,而是继承上面的bean,这个与之前说的parent是类似的。

idref:这个看起来就比较怪了,如下图



 

它需要一个beanlocal,其实它俩含义上差不多,spring先取bean,如果没有再取local。其实它的含义与ref是差不多的。

value:子节点也有一个value。我们看一下value



 

仅仅一个type的属性,type需要写成一个类,其实它的配置书写方法应该是

<constructor-arg>

<value type="com.h.A">DDD</value>

</constructor-arg>

它的text部分为DDD。可以是一个表达式,也可以是一个字符串。

null:value类似,只不是它type是空的。text部分也是空的。

arraylistset:这几个是一样的,它们都是集合或数组 ,里面有一个attribute和一个一对多的集合。其实集合与我们现在说的以上几点是一样的。返回指定集合

map,props它俩格式是一样的,返回指定键值对。

其实constructor-arg相对来说是比较复杂的,说完这个,我们再看property,那就比较简单了,而且还是比较常用了,我们只要打开一看,它其实与constructor-arg里面格式是一样 ,只是说constructor-arg是为构造数据配置参数,但property为里面的属性配置数据。



 

qualifier

先看一下图



                                         

这个在注解中使用的比较多,qualifier翻译一下,为合格者,在byName自动装载时,我们可以定义如果有需要装载类的名称,可能我没有仔细研究过,这个配置过后,只有在注解时会有作用。

lookup-method:如果有一个抽象类,现在你想配置一个bean出来。可以使用lookup-method将抽象方法指定返回 的类,这样向spring申请对象时,spring会给你创建一个新的对象,不是这个对象不属于抽象类的,而是抽象类的一个子类 ,这个子类由spring自动生成 的。

 

replaced-method:当然,如果你想在执行你的bean时,将某一个方法执行给替换掉。可以使用replaced-method,它在执行你这个类的时候 ,会自动寻找你配置的这个类的代理。

  • 大小: 1.3 KB
  • 大小: 15 KB
  • 大小: 7.9 KB
  • 大小: 11.7 KB
  • 大小: 8.3 KB
  • 大小: 11.6 KB
  • 大小: 5.7 KB
  • 大小: 8.6 KB
  • 大小: 17.2 KB
  • 大小: 15.9 KB
  • 大小: 7.3 KB
  • 大小: 19.6 KB
  • 大小: 15.1 KB
分享到:
评论

相关推荐

    spring配置 spring配置 spring配置 spring配置 spring配置

    spring配置 spring配置 spring配置 spring配置 spring配置

    ssm配置spring配置

    ssmspring配置ssmspring配置ssmspring配置ssmspring配置ssmspring配置ssmspring配置ssmspring配置ssmspring配置ssmspring配置ssmspring配置ssmspring配置ssmspring配置ssmspring配置ssmspring配置ssmspring配置ssm...

    Spring配置加注释

    Spring配置 Spring 配置 映射 加注释!!!!Spring配置 Spring 配置 映射 加注释!!!!

    spring配置文件实例

    spring配置文件实例

    spring配置文件详细介绍

    下面是对Spring配置文件的详细介绍。 首先,Spring配置文件通常是以`.xml`为扩展名的文件,例如`beans.xml`。这些文件存储在项目的`src/main/resources`目录下,以便在运行时被自动加载。Spring容器...

    spring配置文件详解

    Spring 配置文件是 Spring 框架中最重要的配置文件之一,它负责定义和配置应用程序的Bean对象,以及它们之间的依赖关系。Spring 配置文件通常以XML文件的形式存在,文件名通常为applicationContext.xml。 在 ...

    spring配置文件

    spring配置文件spring配置文件spring配置文件spring配置文件spring配置文件spring配置文件spring配置文件spring配置文件spring配置文件spring配置文件spring配置文件spring配置文件spring配置文件spring配置文件...

    Spring配置文件集合

    在本压缩包中,我们找到了一系列与Spring相关的配置文件,这些文件在构建JavaWeb应用时起着至关重要的作用。 1. `jdbc.properties`: 这个文件通常用于存储数据库连接的相关信息,如URL、用户名、密码等。它是Spring...

    Spring配置的5种方式

    ### Spring配置的5种方式详解 #### 一、引言 在Java开发领域,特别是针对企业级应用,Spring框架作为一款轻量级的容器管理工具,不仅提供了强大的依赖注入功能,还支持多种事务管理策略。Struts2+Spring+Hibernate...

    SpringCloud——分布式配置中心(Spring Cloud Config)

    在微服务架构中,Spring Cloud Config 是一个强大的分布式配置中心,它允许开发人员将应用程序的配置存储在远程仓库中,并且可以在运行时动态地管理和更新这些配置,无需重启应用。这个特性对于大型分布式系统来说...

    spring配置的简单案例.zip

    spring配置的简单案例.zip spring配置的简单案例.zip spring配置的简单案例.zip spring配置的简单案例.zip spring配置的简单案例.zip spring配置的简单案例.zip spring配置的简单案例.zip spring配置的简单案例.zip ...

    spring配置和启动方式

    spring配置和启动方式 博客地址:https://blog.csdn.net/u010476739/article/details/76696756

    spring配置步骤

    ### Spring配置步骤详解 #### 一、Spring框架简介 Spring框架是Java平台上的一个开源框架,它提供了一种简化企业级应用开发的方式。Spring的核心功能包括依赖注入(Dependency Injection, DI)、面向切面编程...

    Spring配置MySQL数据源

    连接MYSQL数据库,SPRING配置文件示例。

    Spring 配置

    1.创建web工程 2.导入jar ...3.导入配置文件 spring-framework-2.5.6\samples\jpetstore\war\WEB-INF\log4j.properties spring-framework-2.5.6\samples\jpetstore\war \WEB-INF\applicationContext.xml

    Spring动态加载配置文件

    接下来,一旦检测到Spring配置文件发生变化,我们需要重新加载配置文件。这可以通过Spring的`ApplicationContext`的`refresh()`方法来实现。`refresh()`会重新初始化Bean工厂,读取新的配置信息,并更新所有Bean的...

    Spring Cloud配置中心获取不到最新配置信息的问题

    Spring Cloud配置中心获取不到最新配置信息的问题是一个常见的问题,在微服务应用中,配置中心是非常重要的组件,它负责管理和分发配置信息。但是,如果配置中心出了问题,整个微服务系统就会受到影响。这个问题的...

    spring配置数据库文件

    spring配置数据库文件,连接数据库的一写配置文件

    spring 下载与配置

    以上就是关于Spring框架的下载与配置的基本介绍。在实际开发中,我们还需要考虑如何整合其他Spring项目,如Spring MVC用于构建Web应用,Spring Data用于数据库操作,以及Spring Boot用于简化Spring应用的初始搭建和...

    spring MVC配置详解

    Spring MVC 配置详解 ...Spring MVC 是一个功能强大且灵活的 Web 框架,它提供了许多可配置的组件,以便我们根据需要进行自定义配置。掌握 Spring MVC 的配置和原理是我们开发高质量 Web 应用程序的关键。

Global site tag (gtag.js) - Google Analytics