Springvalue和ref
Posted yongh701
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Springvalue和ref相关的知识,希望对你有一定的参考价值。
在《【Spring】Spring3.0.5的下载、配置与Helloworld》(点击打开链接)和《【Spring】Spring依赖注入IOC的设值注入setter》(点击打开链接)两篇文章中,我曾写过在bean之下的property中如何value和ref,可惜没有好好总结一番。Spring很多东西你可以不用懂,但是value和ref这两个东西真的很常见。
其实也没有什么大不了,基本上value就是用来赋值,ref就是用来初始化变量。
用一个java程序就能够说明这个问题。
Java程序的目录结构如下:
其中Bean.java如下,这个东西非常常见,估计已经不用解释了,经常用于数据库持久对象po层,作为一个数据库实体entity。你完全可以理解成string a;定义一个变量a,然而这个a并没有被初始化。
public class Bean
private String a;
public String getA()
return a;
public void setA(String a)
this.a = a;
至于MySpring.java如下,定义了一个没初始化Bean bean,和Bean.java一样,这里的bean的定义之所以写得这么长,不能直接Bean bean就完事。纯属是因为艹蛋的spring要求所有变量都要用这种严格的Java的规范private私有变量+getter+setter来表达。反正在eclipse也就alt+shift+s和点点鼠标的事情,我就忍了。
至于这里为啥要搞成static,这也不为啥,实际上在javaee中无须这个static,让bean里面的变量可以在静态的主函数输出啊!不然大家看不到效果啊!
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MySpring
/* 相当于Bean bean;定义一个Bean变量bean(更贴切的说法是,定义个Bean的实例) */
private static Bean bean;
public static Bean getBean()
return bean;
public static void setBean(Bean bean)
MySpring.bean = bean;
/* 主函数 */
@SuppressWarnings("resource")// 无实意,纯属为了消除spring的警告,由于spring多用在javaee,直接用在java会被提示无法关闭流什么的
public static void main(String[] args)
new ClassPathXmlApplicationContext("applicationContext.xml");// 无实意,纯属为了初始化spring,加载applicationContext.xml,实际上,spring多在javaee被web.xml加载
System.out.println(bean.getA());
大家可以看到上面无论Bean.java还是MySpring.java都仅仅定义了一个变量a和一个类Bean,但都没有赋值,没有初始化,也就是没有string a="呵呵";,Bean bean=new Bean();这些东西。可是,由于applicationContext.xml的存在,<bean class="Bean">指明了要对Bean.java这个java文件搞事情,其中的子节点<property name="a" value="呵呵" />则让里面的a得到了"呵呵"这个值,也搞了这么多,其实就是a="呵呵";。
至于下面的<bean class="MySpring">也是一样的道理,但是由于MySpring里面的需要被初始化的Bean是一个类class,所以你这时就不能用value来赋值,要用的ref来赋值了。虽然同为初始化,但毕竟你在普通的java中对类初始化,也需要将=换成=new XX();啊!
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean class="Bean">
<property name="a" value="呵呵" />
</bean>
<bean class="MySpring">
<property name="Bean" ref="Bean" />
</bean>
</beans>
因此,大家看到Bean.java和MySpring.java没有一句初始化的东西,这在平时的java准给了报空指针异常,但是由于Spring的存在,让程序运行起来,运行结果如下:
好了,文章内容就这么多,其实上,我写了这么多,相当于下面这个脑残程序啊:
class Bean
private String a;
public String getA()
return a;
public void setA(String a)
this.a = a;
public class MySpring_
public static void main(String[] args)
Bean bean = new Bean();
bean.setA("呵呵");
System.out.println(bean.getA());
于是大家肯定要问搞spring干嘛。甚至上面的Bean这个类也可以直接不要了。还不如String a="呵呵"啊。你这个程序真的好呵呵啊!
在数据如此少的情况下确实如此,但是你为什么要将string a放到Bean这个类之中,要是这是个class Student你是宁愿int studeng1_no=xx;string studeng1_name=xx;int studeng2_no=xx;string studeng2_name=xx;还是将no和name放到一个student类里面呢?至于为何类为什么不全搞成public int no: public string name;呢?这也是因为现在java行业的写作标准的习惯性用 private+getter+setter的模式啊,你写成public一些框架还不认呢!你就随大流吧,不然你的程序人家不认。
好了,扯了一大堆,至于为何要用spring,你不觉得在javaee这些应用中,你搞数据库的时候,由于又要set数据库链接地址,又要set数据库用户名密码什么的,搞到java里面一半的代码都在初始化。写在xml里面不好吗?由于spring,你才能将初始化这些无聊的语句写到xml里面,让你的程序读起来更加性感好吗?
说到底,其实Spring就是不像一个什么插件做了什么事情,他只是让你的程序代码长得更加漂亮的化妆品而已。这也是为何这么多公司选择它的原因。大家约定了一个规范标准好管理啊!才管了写的代码多不多,配置spring是否蛋疼!
以上是关于Springvalue和ref的主要内容,如果未能解决你的问题,请参考以下文章