本篇博客以一个简单的例子讲解为什么需要反射,以及为什么需要JavaBean这种组件。能让刚开始接触这个概念的小白们对这两个概念有一个很好的理解。
本博客建立在你知道怎么用反射(就是通过类名创建对象),但不知道为什么要用反射(和new一个对象有什么区别)。
PS:打括号的内容可以不用看,只是为了更具体的描述一下,看不看无所谓了。
从一个很简单的程序来讲解一下:
你需要设计一个程序,这个程序中,有一样东西是需要用户名和密码才能访问的(有什么东西无所谓),重要的是你需要一个用户名和密码。
设计方法1:
在程序里直接定义String用来存password和username,然后通过用户输入判断是否相等即可。
这种方式很明显看出了一个弊端,你要是写代码的时候心血来潮,密码是:2drqwd!as什么的,当你需要改密码的时候,你还得去修改代码,找到password,改了再运行,要是代码过多(1W行甚至更多),找都要找死个人(当然可以用ctrl+F找的快哈)。
我们一般称这种代码写死了(我们一般称这种人 土块)
设计方法2:
怎么把代码写活呢?
那肯定是把password配置在txt(或者其他文件、数据库里面),然后我们通过访问这个txt,去获取密码。当我们需要修改password的时候,只需要修改相应的配置文件即可。
为什么需要JAVA反射呢?
有了上面的例子,我们就很明白了,如果,我们在某一个程序中,需要使用实现了Animal接口的Dog类,让他叫两声,叫这个动作在接口中就定义了;如果有一天,我们不想让Dog叫了,想让Cat叫,我们是不是还要修改代码,去new一个Cat,然后把Dog换成Cat呢?得亏你是自己写代码,在现实中,有很多代码的源代码你都拿不到,都修改不了;或者说,你把产品交个客户,还希望他去修改代码?
不如这样:
我们在编写代码的时候,只写有一个动物会叫这个功能,我们利用反射创建一个类,而反射需要的参数是一个字符串,我们将字符串存入配置文件中,这样,我们修改配置文件即可动态产生不一样的代码了,而用户,通过修改配置文件就可以了,他不需要怎么写代码(一般也不会知道)。
如果没有意外的话,大部分人写代码最开始接触反射,都是在JBDC的时候,当时我们很疑惑,为啥要这个样子搞呢?通过学习反射机制,我们可以看出,我们连接数据库这几行代码唯一变的就是那个com.mysql.jdbc.Driver(别说什么数据库名称啊!用户密码啊什么的会变),我们站在使用者的角度去看这种方式,觉得很好用。
我们需要做的,就是从使用者变成设计者。