spring学习笔记一

来源:互联网 发布:ubuntu 传输文件 编辑:程序博客网 时间:2024/05/19 12:41

Spring的工厂类的继承关系:



BeanFactory早期的版本中使用的一个对象.
ApplicationContext是新版本的使用工厂类的对象.
    * ClassPathXmlApplicationContext          :加载classpath下面的applicationContext.xml
    * FileSystemXmlApplicationContext        :加载文件系统上的applicationContext.xml

分模块进行开发:
Spring分模块开发有两种方式:
1、通过代码加载多个配置文件
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml","applicationContext2.xml");

2、 在一个配置文件中引入另一个配置文件
<import resource="applicationContext2.xml"/>

spring实例化Bean的三种方式:
1、空参构造实例化bean
     前提:一个bean实例
     xml文件中:
     <bean id="onebean" class="beanQualifiedName"></bean>
2、静态工厂实例化bean
     前提:一个bean实例,一个返回bean的静态工厂方法beanStaticFactory
     xml文件中:
     <bean id="beanStaticFactory " class="beanStaticFactoryQualifiedName" factory-method="getBean"></bean>
3、实例工厂实例化bean
     前提:一个bean实例,一个返回bean的pulbic工厂方法beanPublicFactory
     xml文件中:
     <bean id="beanPublicFactory" class="beanPublicFactoryQualifiedName"></bean>
     <bean id="bean"  factory-method="getBean" factory-bean="beanPublicFactory"></bean>
实际一般用第一种。

Bean的作用范围:
<bean>标签中的scope属性设置:
* scope属性的取值:
    * singleton         :单例的.
    * prototype        :多例的.
    * request            :应用在web工程中的,创建一个Bean的实例,将Bean的实例存入到request的域中.
    * session            :应用在web工程中的,创建一个Bean的实例,将Bean的实例存入到session的域中.
    * globalsession  :应用在web工程中的,集群环境.如果没有集群环境的话,配置globalsession与session一致.
设置为单例的,可保证该对象在内存中的唯一性。

Bean在Spring中的生命周期的:
1.instantiate bean对象实例化
2.populate properties 封装属性
3.如果Bean实现BeanNameAware 执行 setBeanName
4.如果Bean实现BeanFactoryAware 或者 ApplicationContextAware 设置工厂 setBeanFactory 或者上下文对象 setApplicationContext
5.如果存在类实现 BeanPostProcessor(后处理Bean) ,执行postProcessBeforeInitialization
6.如果Bean实现InitializingBean 执行 afterPropertiesSet
7.调用<bean init-method="init"> 指定初始化方法 init
8.如果存在类实现 BeanPostProcessor(处理Bean) ,执行postProcessAfterInitialization
9.执行业务处理
10.如果Bean实现 DisposableBean 执行 destroy
11.调用<bean destroy-method="customerDestroy"> 指定销毁方法 customerDestroy

Bean的属性注入:
【构造方法的注入】
    <bean id="person" class="com.study.spring.person>
        <constructor-arg name="name" value="张三"/>
        <constructor-arg name="age" value="22"/>
    </bean>
【set方法注入】
    <bean id="person" class="com.study.spring.person>
        <property name="name" value="李四"></property>
        <property name="age" value="50"></property>
    </bean>
【对象类型的注入】
    <bean id="house " class="com.study.spring.house">
        <property name="name" value="别墅"></property>
        <property name="person" ref="person"></property>
    </bean>


Spring2.5版本的时候提供p名称空间的注入:
前提是需要引入p名称空间:
<bean id="person" class="com.study.spring.person" p:name="张三" p:age="22"></bean>

Spring3.0之后提供了SpEL的注入:
语法:#{ SpEL }
    <bean id="person" class="com.study.spring.person ">
        <property name="name" value="#{'王五'}"></property>
        <property name="age" value="#{'55'}"></property>
    </bean>



原创粉丝点击