spring配置Bean

Posted fjk

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring配置Bean相关的知识,希望对你有一定的参考价值。

  Bean   就是一个类

    一下代码都是基于spring之IOC和DI实现案例基础上进行解析

  Bean的实例化方式:

      1.无参构造

<bean id="UserService" class="com.baidu.test.UserServiceImp">
        <property name="name" value="张三"></property>
        </bean>

      2.静态工厂方法

      applicationContext.xml

     <bean id="UserService" class="com.baidu.test.BeanFactory2" factory-method="CreateUserServiceImp">
              <property name="name" value="张三"></property>
        </bean>

            创建BeanFactory2类

public class BeanFactory2 {
	public static UserService CreateUserServiceImp(){
		return new UserServiceImp();
	}
}

      3.实例工厂方法

    <bean name="BeanFactory2" class="com.baidu.test.BeanFactory2"></bean>
       <bean id="UserService" factory-bean="BeanFactory2" factory-method="CreateUserServiceImp">
        	<property name="name" value="张三"></property>
       </bean>

  创建BeanFactory2类

public class BeanFactory2 {
	public  UserService CreateUserServiceImp(){
		return new UserServiceImp();
	}
}

    Bean的作用域

 

 在bean的属性中有个scope,用来描述bean的作用域.

singleton 单例   spring IOC容器中只有一个Bean实类(默认的scope)
prototype 多例   从spring容器中获取时都会返回一个新的实例
request 将bean对象request.setAttribute()存储到request域中
session 将bean对象session.setAttribute()存储到session域中

 

 

 

 开发中常用singleton和prototype(单例和多例)

     Bean的属性注入

      1.构造方法注入

        提供构造方法

    public UserServiceImp(String name) {
		super();
		this.name = name;
	}

        修改applicationContext.xml文件

 <bean id="UserService" class="com.baidu.test.UserServiceImp">
    <constructor-arg index="0" value="张三" type="java.lang.String"></constructor-arg>
</bean>

      2.Setter注入

    修改applicationContext.xml

     <bean id="user" class="com.baidu.test.User">
        		<property name="name" value="uuu"></property>
        		<property name="age" value="15"></property>
		</bean>
        <bean id="UserService" class="com.baidu.test.UserServiceImp">
        		<property name="name" value="uu"></property>
        		<property name="u" ref="user"></property>//引入另一个bean
        </bean>

      3.map注入

       <bean id="user" class="com.baidu.test.User">
        		<property name="name" value="uuu"></property>
        		<property name="age" value="15"></property>
		</bean>
          <bean id="UserService" class="com.baidu.test.UserServiceImp">
        		<property name="name" value="uu">
        		</property>
        		<property name="list">
        			<list>
        				<value>10</value>
        				<value>张三</value>
        				<ref bean="user"/>
        			</list>
        		</property>
        		<property name="set">
        			<set>
        				<value>张三</value>
        				<ref bean="user"/>
        			</set>
        		</property>
        		<property name="map">
        		<map>
        			<entry key="1" value-ref="user"></entry>
        			<entry key="2" value="12"></entry>
        		</map>
        		</property>
        </bean>

  空间名称p和c

  引入schma

      xmlns:c="http://www.springframework.org/schema/c"
	 xmlns:p="http://www.springframework.org/schema/p"
首先它们不是真正的名称空间,是虚拟的。它是嵌入到 spring 内核中的。
使用 p 名称空间可以解决我们 setter 注入时<property>简化     
使用 c 名称空间可以解决我们构造器注入时<constructor-arg>简化

applicationContext.xml

    p名称空间 ---------    setter注入

    <bean id="user" class="com.baidu.test.User">
        		<property name="name" value="uuu"></property>
        		<property name="age" value="15"></property>
	</bean>
	<bean id="UserService" class="com.baidu.test.UserServiceImp" p:name="uu" p:u-ref="user" >
        </bean>

  

    c名称空间-------  构造器注入

 <bean id="UserService" class="com.baidu.test.UserServiceImp" c:name="uu" c:u-ref="user" > </bean>

    SPEL(spring expression language)  spring 3.0版本以后

它类似于 ognl 或 el 表达式,它可以提供在程序运行时构造复杂表达式来完成对象属性存储
及方法调用等。
Spel 表达式的格式 #{表达式}

  applicationContext.xml

  1.完成bean之间的注入

     <bean id="user" class="com.baidu.test.User">
        		<property name="name" value="uuu"></property>
        		<property name="age" value="15"></property>
		</bean>
		 <bean id="UserService" class="com.baidu.test.UserServiceImp">
         <property name="name" value="uu"></property>
          <!-- <property name="u" ref="user"></property>-> <property name="u" value="#{user}"></property>替代上面的ref值(完成bean之间的注入) </bean>

  2.支持属性调用和即方法调用

    <bean id="user" class="com.baidu.test.User">
        		<property name="name" value="uuu"></property>
        		<property name="age" value="15"></property>
		</bean>
		<bean id="user1" class="com.baidu.test.User">
        		<property name="name" value="uuu"></property>
        		<property name="age" value="#{user.getAge()+5}"></property>
		</bean>
		 <bean id="UserService" class="com.baidu.test.UserServiceImp">
         <property name="name" value="uu"></property>
        		<property name="u" value="#{user1}"></property>
        </bean>

  

 

  

 

以上是关于spring配置Bean的主要内容,如果未能解决你的问题,请参考以下文章

05Spring源码-手写篇-手写Bean配置

Spring装配bean--02通过Java代码装配bean

Spring配置Bean

05Spring源码-手写篇-手写Bean配置

05Spring源码-手写篇-手写Bean配置

Spring-Bean配置-使用外部属性文件(转)