Spring-IOC

来源:互联网 发布:源码购买平台 编辑:程序博客网 时间:2024/06/02 07:29

1. 注入方式

配置文件配置属性的方式是一种配置方式,

<bean id="myServer" class="top.microfrank.MyServer">    <property name="serverSocket" ref="serverSocket"/>    <property name="path" value="d://"/></bean>

还有一种是通过构造函数进行注入:

<bean id="serverSocket" class="java.net.ServerSocket">    <constructor-arg index="0" type="int"value="8084"/></bean>

上面这个例子就通过构造函数,只有一个int参数的构造函数且这个int参数的序号是第零个。Index代表序号,type代表该参数类型,在没有歧义的情况下,可以只写index或type。

这便是通过构造函数注入。

2. Bean获取方式

通过ApplicationContext来获取Spring上下文环境,可以通过这个上下文的getBean方法来获取bean。其实bean还有其他几种生成方式。与ApplicationContext形成对比的就是BeanFactory,但是他是面向Spring内部的,而ApplicationContext则面向开发人员,因而后者用的多,前者一般不会使用。另外如果是web应用中我们就不能用ApplicationContext了,因为web应用我们写的是action,即对每次请求的处理,这个上下文显然在任何一次请求中初始化都是不合适的,应该是伴随web应用启动。所以需要另一个接口WebApplicationContext

ApplicationContext的产生方式有ClassPathXMLApplicationContextFileSystemXmlApplicationContext两种,分别是类路径和系统文件路径获取配置文件。

WebApplicationContext产生方式也有两种,一种是通过web容器的监听器Listener启动,另一种是通过自启动的sevlet来启动。两者都是在web.xml中进行配置:

<context-param>    <param-name>contextConfigLocation</param-name>    <param-value>classpath:springconf.xml</param-value></context-param><listener><listener-class>     org.springframework.web.context.ContextLoaderListener </listener-class></listener>

这是监听器的方式配置伴随web容器启动的spring。我一般用的是这种,另一种通过自启动的servlet来启动的方式这里就不写了,感兴趣可以自己查一下。

然后在servlet中通过servlet上下文context来获取这个WebApplicationContext

WebApplicationContextweb  context =(WebApplicationContext)context.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE); 

3. 注入参数

之前通过property标签将参数进行注入,可以设置的是name和value或ref属性,value是值类型(基本数据类型和String),ref则是引用类型。

如果是null值则用<null/>标签标示。

如果是List类型则用<list><value>v1</value><ref>r2</ref></list>数组类型也用这个

如果是Set类型则和list标签类似的set标签

如果是Map类型则<map><entry><key>k1</key><value>v1</value></entry></map>

通过p命名空间的引入,可以简化参数的注入:

xmlns:p="http://www.springframework.org/schema/p"       …<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"destroy-method="close"      p:driverClass="com.mysql.jdbc.Driver"      p:jdbcUrl="jdbc:mysql://localhost/smart"      p:user="root"      p:password=""/>

4. Bean的继承和依赖

Bean继承不是类的继承,只是有多个bean的类型参数值都一样可以通过继承的方式,完全继承父bean的参数的值,然后可以改动不一样的参数的值,少写一些字而已。通过parent属性指定父bean的id即可。

Bean依赖是为了在生成这个bean的时候用到了另一个bean,需要指定另一个bean需要先被创建。通过depends-on属性指定依赖的bean的id即可。

5. 多配置文件整合

一个项目中往往不止一个配置文件,因为开发过程可能是分工完成的。每个模块可能都有一个配置文件,整合多个配置文件是一定会遇到的情况。整合方法一般有两种,一种是通过import标签直接将另一个配置文件引入,importresource属性指定路径,例如resource=”classpath:springconf2.xml”。这种方式用的比较多,常见的模式是各个模块都有一个配置文件,最后总的配置文件引入所有。另一种方式则是不进行引入,直接在ClassPathApplicationContext类的构造函数中传入多个文件参数即可。

另一种情况,如果想将部分属性单独拿出去,如数据库账户密码,因为直接在整个配置文件中可能很难找,配置起来不舒服。则可以在配置文件中

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">             <property name="location" value="classpath:db.properties"/>             <property name="fileEncoding" value="utf-8"/>        </bean>

即可将properties文件引入,这个文件内容是:

userName=rootpassword=123456 

然后在xml文件中可以通过${userName}引用属性值

6. 其他配置方式

前面的都基于通过xml配置,xml是最全,所有功能都能实现的配置方式。也是必须得会的方式。其他方式只不过提供了简便写法。之前讲过注解配置的最简单的写法,注解是通过Component声明一个类为bean(与之等效的还有Service Repository和Controller)。然后Autowired按类型匹配注入,Qualifier 按名字匹配注入,Resource 则是更加灵活的注入写法。

以上两种用的最多,适用范围广。还有基于java类的配置,即在一个类上加上Configuration注解,然后在方法上加Bean注解表示这个方法返回的对象添加为一个Bean,这种配置方式,可以用java语言设置bean内字段的属性,比较贴近开发者。同样这个也需要context命名空间,和指定扫描的包。基于Groovy DSL的配置是第四种方式,这个是spring4才有的,他本质上和基于java类配置一样,只不过用Groovy写的,更简练。Xml之外的三种都比较简练,但是也缺少一些灵活性,不那么全能,而且是侵入式的。总之配置方式千变万化,我们只需要学好xml,其他的都是万变不离其宗。

原创粉丝点击