Spring
回顾
IOC 控制反转: Spring容器控制对象
DI: 依赖注入,Spring注入依赖组件
容器
Web 容器,Spring 容器,Java Bean容器,容器类
容器: 可以承载东西的器物
Web 容器:承载执行Web组件(Servlet、HTML、过滤器)的容器,如:Tomcat、
Web Spare,WebLogic,Jetty。因为可以执行Servlet,也称Servlet引擎。
Spring: 承载管理JavaBean组件的容器,称为JavaBean容器,Spring容器,Bean容器。
集合:承载Java对象的容器,称为: 容器类, Java容器
Spring注入集合和数组
Spring注入集合类型的Bean属性
注入类型:
- 数组
<array>
- List
<list>
- Set
<set>
- Map
<map>
- 子元素
<entry>
- 子元素
- 子元素
- 基本值
<value>
- 对象
<ref>
引用其他Bean组件<bean>
创建新组件
- 基本值
如:
class DemoBean{
List<String> names;
public void setNames(List<String> names){
this.names = names;
}
}
<bean id="demo" class="DemoBean">
<property name="names">
<list>
<value>Tom</value>
<value>Jerry</value>
<value>Andy</value>
</list>
</property>
</bean>
利用DI解耦
紧耦合:组件之间紧密耦合。不方便重构。
松耦合:组件之间松散结合在一起,方便重构。
解耦:将紧耦合改成松耦合,称为解耦。
- 利用接口(面向接口编程)可以实现解耦
- 利用反射API进行解耦
- Spring的DI支持利用接口解耦
自动注入
可以不用在写 <property>
标签, 根据类型或名字自动完成组件注入。
按照名称注入:
- 被注入的bean属性名和Bean组件的ID名一致
- 在bean标签上声明自动注入
- Spring在启动时候,会自动根据名字找出组件进行注入。
按照类型注入:
- 设置被注入的Bean为 autowire=“byType”
- Spring启动时候根据被注入的的Bean的属性类型查找类型兼容的Bean组件,如果找到就进行自动注入,找不到就取消。 如果找到两个以上的Bean组件则报错误!!!
Spring 读取Properties
Spring 表达式
语法:
#{BeanID.Bean属性}
例子:
- 读取bean属性: #{worker.name} 读取worker组件Bean属性name的值
- 读取list集合: #{demo.names[0]} #{demo.names[1]}
- 读取数组: #{demo.weight[0]} #{demo.weight[1]}
- 读取Map: #{demo.table.东} #{demo.table[‘东’]}
- 读取Properties: #{jdbc.driver} #{jdbc.url}
Spring 注解
Spring提供了注解:用于声明Bean,注入Bean属性等功能
- 注解被编译器检查处理,编译器可以检查注解使用错误!
- 注解大多采用自动方式执行,减少配置,写的少做的多。
- 在源代码中直接书写,自己开发程序可以标注注解。
- 注解声明的组件和XML声明的组件地位平等。
声明组件
@Component