网上有人说spring的依赖注入中依赖的对象是用反射创建的,有人说使用工厂模式创建的,具体是怎么创建的有人知道吗?请说的仔细一点谢谢了,有创建对象部分的源码更好。
如果把工厂模式比作面包制作店,这家店有很多面包口味,比如山楂味的,蛋糕味的等,当你想吃蛋糕味的面包时,你需要先去找到这家店,然后再到里面去选择面包的口味。对应的就是如果你需要找到某个方法,那么你需要先去找到一个类(new),然后再去这个类里面找到某个(class.method())。
反射的原理你可以参考一下这个反射加载类型,并创建对象实例Class clazz = Class.forName("ClassName"); Object obj = clazz.newInstance();
ClassName是你要加载的类的名称。看到这个生成方法的原理,就能看出来,其实反射就是根据类的全路径名去实现类加载
依赖注入中有一个装bean的容器,同理bean的容器可以看成一个面包店,里面有很多bean则可以看成不同口味的面包,这就是工厂模式。我们通常通过bean实现注入的时候,我们一般写的是类的名称,而不是直接去在配置文件中new一个类,其实在spring底层中,它通过bean配置的路径,已经帮我们通过类加载机制自动生成了,这就是反射。所以这就是为什么在spring的bean中我们只需要配置类的全路径名就可以了
工厂模式和反射不矛盾。好比一场战争既是用一种战略(比如十面埋伏或者围魏救赵),也是用具体的武器(刀枪剑戟)打的。战略在这里是工厂模式等等,武器是指反射。
关于工厂模式,你可以去看设计模式,关于反射,你看任何java的书都有。
讲细比较复杂,讲个大体流程
工厂,就是调用时,不用太在意其内部“生产流程“,所以用反射的方式创建类,这个方式也就是符合定义的了
换句简单的话就是,工厂用反射的方式生产类的实例