zoukankan      html  css  js  c++  java
  • 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>
    

      

      

  • 相关阅读:
    Android5.0 Gallery2上编译Gallery模块出错
    Ubuntu Linux系统下的SVN客户端工具PySVN
    ubuntu下如何安装及使用 pysvn-workbench
    系统数据库开启
    Ubuntu下使用SVN
    Ubuntu Linux 环境变量
    android 权限管理和签名 实现静默卸载
    Android系统权限及签名
    Android Security
    《Java程序猿面试笔试宝典》之字符串创建与存储的机制是什么
  • 原文地址:https://www.cnblogs.com/fjkgrbk/p/spring_bean.html
Copyright © 2011-2022 走看看