day38 13-Spring的Bean的属性的注入:SpEL注入

Spring2.5提供了名称空间p注入属性的方式,Spring3.几提供了SpEL属性注入的方式。

<?xml version="1.0" encoding="UTF-8"?>
<!-- 别去schema,schema是文件,本地的文件,你得引那个头 -->

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- demo1快速入门================================================= -->
<!-- 把接口和实现类在这个配置文件中配置,有了实现类的全路径之后到时候才能用工厂反射 -->

   <!-- 通过一个<bean>标签来设置类的信息,通过id属性为类起个标识. -->
    <!-- 接口,实现类,配置文件也都有了 -->
    <!-- 现在有一个工厂Spring为我们提供好了,其实就是解析这个XML文件 -->
    <!-- 这个工厂你自己写会不会写?你用dom4j找里面的bean标签,找到class的属性值,然后就可以Class.forName()反射生成类的实例.其实Spring
         也是这么做的,只不过工厂由Spring提供好了
     -->
    <bean id="helloService" class="cn.itcast.spring3.demo1.HelloServiceImpl">
         <!-- 使用<property>标签注入属性
         value指的是普通值
         ref指的是对象
         -->
    <property name="info"  value="传智播客"></property>
    </bean>
    <!-- demo1快速入门 -->
    <!-- demo2Bean的实例化 -->
    <!-- 默认情况下使用的就是无参数的构造方法. -->
    <!--
    <bean id="bean1" class="cn.itcast.spring3.demo2.Bean1"></bean>
    -->
    <!--
    <bean name="bean1" class="cn.itcast.spring3.demo2.Bean1"></bean>
    -->
    <!-- 第二种使用静态工厂实例化 不能写class了,因为现在不是由Spring直接帮你创建对象了-->
    <!--
    <bean id="bean2" class="cn.itcast.spring3.demo2.Bean2Factory" factory-method="getBean2"></bean>
    -->
    <!-- 第三种使用实例工厂实例化 -->
    <!--
    <bean id="bean3" factory-bean="bean3Factory" factory-method="getBean3"></bean>
    -->
    <!-- 要先把Bean3Factory实例化 -->
    <!--
    <bean id="bean3Factory" class="cn.itcast.spring3.demo2.Bean3Factory"></bean>
    -->
    <!-- demo2Bean的实例化======================  end-->

    <!-- demo3Bean的作用范围======================= -->
    <!--
    <bean id="customer" class="cn.itcast.spring3.demo3.Customer" scope="prototype"></bean>
    -->
    <!--
    <bean id="product" class="cn.itcast.spring3.demo3.Product" init-method="setup" destroy-method="teardown" scope="singleton">
       <property name="name" value="空调">-->
       <!-- 把Product类的属性name注入进来 -->
       <!--
       </property>
    </bean>
 -->

       <!-- demo4Bean的生命周期======================= -->
       <!--
       <bean id="customerService" class="cn.itcast.spring3.demo4.CustomerServiceImpl" init-method="setup"  destroy-method="teardown">

          <property name="name" value="itcast"></property>
       </bean>
       -->
       <!-- 后处理Bean是由Spring容器自动调用不用你管,我们起个id是为了我们在程序中去获得它。但是这个类不用由我们获得, 由Spring自动调用。cn.itcast.spring3.demo4.MyBeanPostProcessor是后处理Bean-->
        <!-- <bean class="cn.itcast.spring3.demo4.MyBeanPostProcessor"></bean>-->
       <!-- demo5Bean的属性注入=====================================================================================================================================-->
       <!-- 构造方法的注入 -->
       <bean id="car" class="cn.itcast.spring3.demo5.Car">
        <constructor-arg name="name" value="宝马"><!-- 通过这个标签为类注入属性 -->
        </constructor-arg>
        <constructor-arg name="price" value="1000000"><!-- 通过这个标签为类注入属性 -->
        </constructor-arg>
        <!--
        <constructor-arg index="0" type="java.lang.String" value="奔驰">--><!-- 通过这个标签为类注入属性 -->
        <!-- </constructor-arg>-->
        <!--
        <constructor-arg index="1" type="java.lang.Double" value="2000000">--><!-- 通过这个标签为类注入属性 -->     

       <!-- </constructor-arg>-->
       </bean>
       <!--
       <bean id="car2" class="cn.itcast.spring3.demo5.Car2">
       -->
       <!-- <property>标签中name就是属性名称,value是普通属性的值,
       ref:引用其他的对象
       -->
       <!--
       <property name="name" value="保时捷奇瑞QQ"></property>
       <property name="price" value="500000020000"></property>
       </bean>
       -->
       <!--  p名称空间的写法
       <bean id="car2" class="cn.itcast.spring3.demo5.Car2" p:name="宝马" p:price="400000">
       </bean>
       -->
       <!-- SpEL写法 -->
       <bean id="car2" class="cn.itcast.spring3.demo5.Car2" >
       <property name="name" value="#{‘大众‘}"></property>
       <property name="price" value="#{‘120000‘}"></property>
       </bean>

       <!--
       <bean id="person" class="cn.itcast.spring3.demo5.Person">
           <property name="name" value="任童"></property>
           <property name="car2" ref="car2"></property>
       </bean>
       -->

       <!-- p名称空间的写法 -->
       <!--
       <bean id="person" class="cn.itcast.spring3.demo5.Person" p:name="童童" p:car2-ref="car2">
       </bean>
       -->
       <!-- SpEL写法 -->
       <bean id="person" class="cn.itcast.spring3.demo5.Person">
       <!--
           <property name="name" value="#{‘小边‘}"></property>
           -->
           <!--
           <property name="name" value="#{personInfo.name}"></property>
           -->
           <property name="name" value="#{personInfo.showName()}"></property>
           <property name="car2" value="#{car2}"></property>

       </bean>

       <!--
       <property name="name" value="任童"></property>
           <property name="car2" ref="car2"></property>
       -->
        <bean id="personInfo" class="cn.itcast.spring3.demo5.PersonInfo">
        <property name="name" value="张三"></property>

        </bean>
</beans>
package cn.itcast.spring3.demo5;

public class PersonInfo {
    private String name;

    public void setName(String name) {//设置是set
        this.name = name;
    }

    public String getName() {//你的属性想要在配置文件里面去获得到它肯定得有get
        return name;
    }
    public String showName(){
        return name;
    }
}
时间: 2024-10-06 00:52:32

day38 13-Spring的Bean的属性的注入:SpEL注入的相关文章

Spring给bean初始化属性值

可以在Spring容器初始化bean的时候给bean的属性赋初始值,直接在property标签里设置即可 1 2 3 4 5 6 <bean name="user**" class="com.fz.entity.User" >     <property name="id" value="1"></property>     <property name="username&

03 Spring框架 bean的属性以及bean前处理和bean后处理

上一节我们给出了三个小demo,具体的流程是这样的: 1.首先在aplicationContext.xml中添加<bean id="自定义id" class="包名.类名">.(还有两种工厂配置) 2.其次写一个自定义类,里面只包含一个系统输出的show(). 3.使用 ApplicationContext hw=new classpathXmlApplicationContext("applicationContext.xml");

spring之bean的生命周期

上篇文章中,详细介绍了spring中bean的scope,scope既是bean在spring容器中的存在方式,如prototype和singleton,且也带了一些存在周期的属性,如 session和request等.spring中 bean从实例化,到依赖注入.再到初始化.到最后消亡,有和完整的生命周期.它和scope一起构成bean完整的生命周期.本篇文章主要简单的描述下bean生命周期中的初始化方法(init())和消亡前(ondestroy(),以后称之为析构)的方法.本文主要讨论sc

Spring注解驱动开发--属性赋值

前言 在实际开发当中,Spring中bean的属性直接赋值用的不是太多,整理这方面的资料,做一个小结,以备后续更深入的学习. 通过配置文件的方式 以配置文件的方式启动spring容器时,可以使用property标签的value给bean的属性赋值,赋值的形式有以下几种: <--通过context:property-placeholder将properties文件中的值加载的环境变量中(properties中的属性值最终是以环境变量的形式存储的)><context:property-pla

[原创]java WEB学习笔记98:Spring学习---Spring Bean配置及相关细节:如何在配置bean,Spring容器(BeanFactory,ApplicationContext),如何获取bean,属性赋值(属性注入,构造器注入),配置bean细节(字面值,包含特殊字符,引用bean,null值,集合属性list map propert),util 和p 命名空间

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

反射-Spring管理Bean,注入Bean属性的反射机制。

#反射 1.是JAVA API,是Java提供的现成的类!! --接受API提供的功能! 2. 是Java提供的动态执行机制,动态加载类,动态创建对象,动态访问属性,动态调用方法. ##反射用途 1. eclipse 中解析类的结构使用了反射 2.JUnit识别被测试方法使用了反射 -- JUnit3 利用了反射查找test开头的方法 -- JUnit4 利用了反射解析@Test查找测试方法 3.Spring 管理Bean对象,注入Bean属性使用了反射 --利用反射创建Bean对象实例 --利

spring中bean的singleton属性

1.  UserDao.java package com.lxh.springSingleton; public interface UserDao { // 保存User public void save(); } 2.  UserDaoImpl.java package com.lxh.springSingleton; public class UserDaoImpl implements UserDao { @Override public void save() { System.out

Spring框架bean的配置(2):SpEL:引用 Bean、属性和方法。。。

1.SpEL,实现 Person类,其属性如下,其get,set,tostrong方法就不写了 private String name; private Car car; private String city;//city属性是引用了Address中city的属性 private String info;//根据car的price属性来确定info,price大于30万,不大于30万 car类,其属性如下,set,get,tostring方法就不写了 private String brand;

spring中的bean的属性scope

spring中bean的scope属性,有如下5种类型: singleton 表示在spring容器中的单例,通过spring容器获得该bean时总是返回唯一的实例 prototype表示每次获得bean都会生成一个新的对象 request表示在一次http请求内有效(只适用于web应用) session表示在一个用户会话内有效(只适用于web应用) globalSession表示在全局会话内有效(只适用于web应用) 在多数情况,我们只会使用singleton和prototype两种scope

Spring -10 -&lt;bean&gt;的 scope 属性 -

1.<bean>的属性; 2.作用:控制对象有效范围(单例,多例等)3.<bean/>标签对应的对象默认是单例的. 3.1无论获取多少次,都是同一个对象 Teacher t1 = ac.getBean("teacher1",Teacher.class); System.out.println(t1); Teacher t2 = ac.getBean("teacher1",Teacher.class); System.out.println(t