day38 13-Spring的Bean的属性的注入:SpEL注入
Posted 绿茵好莱坞
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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; } }
以上是关于day38 13-Spring的Bean的属性的注入:SpEL注入的主要内容,如果未能解决你的问题,请参考以下文章
day38 09-Spring类的完整生命周期及后处理Bean