Spring入门三(EL表达式)

1.EL表达式:能够在运行时构建复杂表达式,存取对象属性、对象方法调用等。格式为:#{表达式}
通过xml方式:

<bean id="student" class="com.Student">
    <property name="name" value="张三" />
    <property name="age" value="20"/>
    <property name="sex" value="F"/>
    <constructor-arg type="com.Teacher" value="#{tea}" /><!--用构造器或set方法都可以,前提是要有。-->
    <!--<property name="teacher" value="#{tea}"/>-->
</bean>
<bean id="tea" class="com.Teacher">
    <property name="name" value="王老师"/>
    <property name="age" value="35" />
</bean>

通过Annotation的方式(部分代码):

@Component("tea")
public class Teacher {
    @Value("王老师")//属性的值会注入进去
    private String name;
    @Value("30")
    private int age;
@Component("stu")
public class Student {
    @Value("张三")
    private String name;
    @Value("20")
    private int age;
    @Value("M")
    private char sex;
    @Value("#{tea}")//用到了EL表达式,也可以用tea中的属性。#{tea.name},但是私有属性必须提供get方法。
    private Teacher teacher;

EL表达式中可以运行函数,并将运行的结果的值注入到属性中去:

@Component("stu")
public class Student {
    @Value("#{'ZHANGSAN'.toLowerCase()}")//转为小写后进行注入
    private String name;
    @Value("20")
    private int age;

运行结果:

Student{name='zhangsan', age=20, sex=M, teacher=Teacher{name='王老师', age=30}}

EL表达式中还支持算数、关系、逻辑和三目运行。可以写在注释中,也可以写在xml文件中。

    @Value("#{12+12}")
    private int age;

EL表达式取出集合中的值进行注入:

@Component("pojo")
public class POJO {
    @Value("#{arr.list[1]}")//使用EL表达式,也可以放到配置文件中
    private String listValue;
    @Value("#{arr.map['name']}")//通过key取出value
    private String mapvalue;
    @Override public String toString() {
        return "POJO{" + "listValue='" + listValue + '\'' + ", mapkey='" + mapvalue + '\'' + '}';
    }
    public static void main(String[] args) {
        ApplicationContext context=new ClassPathXmlApplicationContext("ApplicationContext.xml");
        POJO p=(POJO) context.getBean("pojo");
        System.out.println(p);
    }
}

xml中的部分代码:

 <bean id="arr" class="com.Array" destroy-method="destory"><!--创建对象--> <property name="list">
		<property name="list">
		      <list>
		          <value>zhangsan</value>
		          <value>20</value>
		          <ref bean="student"/>
		      </list>
		  </property>
		
		  <property name="map">
		      <map>
		          <entry key="name" value="zhangsan" />
		          <entry key="age" value="20"/>
		      </map>
		  </property>
</bean>

运行结果:

POJO{listValue='20', mapkey='zhangsan'}

EL表达式还有可以写成${},和#{}的区别是后者会加单引号,前者不会。
结论:spring容器可以同时由注释和配置文件进行控制。

上一篇
---The End---
下一篇
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值