黑马程序员--Spring框架方方面面之…

时间:2022-09-25 06:07:11

--------android培训java培训期待与您交流------


第一次写技术性的博客,希望大家多多指教;

所谓的控制反转就是说当依赖对象的创建和维护是由外部容器实现的。比如说我们在Service层要使用dao层,以前我们是在service层直接new一个dao层对象,在软件工程中,这种做法是不可取的,不能达到解耦的效果.为了实现层与层之间的解耦,我们可以用工厂设计模式和Spring的依赖注入功能,在service层定义dao层接口的引用,由Spring容器动态的给dao层的引用赋值;

关于控制反转和依赖注入,在Spring提供了两种方式,一种是手动注入或者说装配,一种是自动装配,由于自动装配胡产生许多未知问题,因此非常不建议使用,而手动装配又有两种方式,一种是基于xml配置文件的,另一种是基于注解的方式;

关于其使用方式此中不做赘述,仅仅讲解其底层实现原理。其实不管是哪种方式都是依赖Java的反射机制,以xml配置文件方式为例

首先我们先对xml文件进行解析,要用到dom4j技术,解析其中的各种配置项,由于这些配置项都是对应的一个个的实体类,因此只要我们解析出了这些类的类名,比如cn.itcast.dao.impl.UserDaoImpl;然后我们就可以Class.forName("className");得到了dao层实现类的实例对象,然后解析出需要dao层的service类,为其注入该dao层实例对象,这又有几种方式:set方法和构造方法;我们以set方法为例;我们解析到类service层的,并创建其实例对象,这时我们可以用用方法的反射,即method.invoke(service,dao);将该dao实现类实例对象注入到service实现类的实例中去;注解方式同样类似;

总之我们对于这种思想能理解最好,不能理解但是要会用,这里有一个软件工程的思想,即实现解耦的方式,我们必须要理解,在三层架构开发中,必须要做到层与层之间的解耦,这就是面向接口编程的例子。