Spring入门
依赖注入:
1:外部文件注入(也算是接口注入):利用借口将调用者与实现者分离
Properties props = new Properties();
props.load(new FileInputStream("资源位置(在项目中)"));
xxxx = Class.forName(props.getProperty(键名)).newInstance();
在Properties配置文件中,以=分割键值对,=前面为key,后面为value
2:set注入
将依赖的对象通过set方法注入具体的对象实例;
3:构造注入
在创建这个对象的时候就将依赖对象注入;可以构造出更加严谨的,可用的对象
set注入和构造注入的优缺点
- set注入容器不会检测,要调用依赖对象的时候才问把问题揭露出来
- 构造注入会在得到对象的时候就会把问题暴漏出来。
- 更加符合java程序员的习惯:当可注入的属性非常多,但又不是必须要注入时,非常方便;
必须要放进去,不放进去就不能运行的方法使用构造注入;
IOC(inversion of control):反转控制
DI (dependecy injection) : 协调各组件间的相互的依赖关系,同时大大提高了组件的可移植性;
spring容器
一、容器
Bean工厂: 有BeanFactory,以及ApplicationContext两大派系,懒加载对象;
ClassPathResource()//当前类包下的资源
容器中的对象只有一个(同一个bean源)
Context更强大(在读取配置文件的时候就创建对象【预加载单态Bean】)
提供文本信息解析,支持I18N
提供载入文件资源的通用方法
向注册为监听器的Bean发送事件
如何启动容器?
直接使用new创建容器对象,例如 new ClassPathApplicationContext(“xxx.xml”)【读取配置文件】
一般把存在依赖关系的==【单态】==对象放入容器;
二者区别
- ApplicationContext接口继承BeanFactory
- AppContext提供附加功能
- 预加载所有的“==单态==”Bean但默认只实例化一起,如果要修改,添加XML属性scope=”prototype”; BeanFactory延迟加载所有的Bean,直到getBean调用;
IOC(反转控制: 将对象的创建以及对象间依赖关系的维护,交由第三方容器来管理–对象创建控制权反转)
DI:依赖注入【对象之间的依赖关系,由外部注入,维护】
二、AOP
三、整合
Spring配置:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="类在配置文件中的名字" class="com.wang.model.Computer" scope="设置原型prototype还是单态singleton" init-method="初始化的时候要调用的方法名" de>
类还可以通过实现InitializingBean接口重写执行初始化方法(在装配好Bean各种依赖关系以及参数后调用该方法)
可以实现DisposableBean接口重写执行摧毁方法
<!--set的依赖注入语句
<property name="方法名" ref="md"></property>-->
<!--构造器依赖注入,index表示参数的顺序-->
<constructor-arg ref="参考的bean的id" index="0">
不要ref还可这样写,卸载property之间或者constructor-arg之间
<bean class=""></bean>
</constructor-arg>
<property name="属性名" value="基本数据类型直接用value注入(注意要有set方法)"><value>value还可以这样写基本数据类型及包装类型</value></property>
<property name="属性名" >
<bean class=""></bean>
</property>
<!--集合注入-->
<property name="属性名" >
<list>
<value>String</value>
<value>int</value>
<ref bean="objId"></ref>
</list>
</property>
</bean>
<!-- 可能产生依赖的被依赖类实例反射 -->
<bean id="flashDisk" class="com.wang.model.UDisk"></bean>
<bean id="md" class="com.wang.model.MoveDisk"></bean>
</beans>