非侵入性:里面的java对象不依赖与SpringAPI
IOC容器:
在xml文件里配置id,全类名,属性
1 新建IOC容器
2 底层利用反射技术,从IOC容器里面获得javaBean
3 调用javaBean的方法
这样做将主动获取资源的方式改为了被动的接受了
学会如何配置IDE插件
================================================
IOC举例说明
如何分离接口和实现
接口:产生报表
实现:html,pdf的两个实现
工厂模式中的工厂必须单例
模拟Spring的IOC容器
1 创建IOC容器
1)读取Spring的xml文件
2)根据Spring的xml文件创建对应的两个bean对象
htmlGeneratorReport对象
GeneratorReportyService对象,
把创建的连个对象放到一个map,如map.put("html",new htmlGeneratorReportor());
3)为需要注入属性的bean注入属性
检查bean是否需要是否需要注入属性(检查bean有没有property有没有子节点)
//如何巧妙的写一个工程模式
思路1
一个生成报表的接口 ReportGenerate
两个对应的接口的实现类: HtmlReportGenerate PdfReportGenerate
一个ReportGenerateService类 里面有一个创建两个接口的实现类事例之一的方法
一个供测试的main类中提供了一个main方法
这是最原始的方法。既和接口耦合,又和实现类耦合。产生的对象的方法最原始,new了一个,需要什么对象,自己去创建
==================================
思路2
新增加一个factory ,service只需要和接口耦合,和工厂耦合
工厂类实现的原则就是工厂单例,因为在一个应用当中只有一个工厂
数据源就是一个工厂,产生connection的最大的工厂
工厂是一个单例 实现单例的三原则:
1 单例对应的类中构造函数私有化,防止外面通过new来产生一个对象
2. 引用单例对象对象的变量必须全局唯一,即static类型的,且私有防止外边来调用
3 为类的外边提供一个获得这个单例的方法,这个方法必须是类方法,static修饰,这个方法必须公有,从外边可以访问
在factoy中产生的工厂是单例
里面含有一个产生对象的方法
实际上Spring的原理就是需要什么,让spring这个容器(工厂)注入就可以了。
====================================
模拟实现SpringIOC容器
1 创建IOC容器
1)读取beans.xml配置文件
2)根据beans.xnl文件使用反射技术创建对应的bean对象
创建htmlReportGenerator对象;reportService对象;把创建的对象放到一个Map<string,object>map中。
3)为需要注入属性的bean注入属性
检查所有的bean,看bean是否需要注入属性(bean中有没有property节点)。如需要注入,从map中获取对应的属性值,利用反射技术为
其属性赋值即可。