Spring是什么?
Spring :轻量级框架,Java EE的春天,当前主流框架
目标:使现有技术更加易用,推进编码最佳实践
内容:
依赖注入容器
Web集成
数据访问支持
简化Hibernate编码
声明式事务
AOP实现
企业级框架
大规模:用户、数据、功能数
性能和安全要求高
业务复杂
灵活应变
Spring框架内容:
IOC和DI
IOC(Inversion of Control):其思想是反转资源获取的方向.传统的资源查找方式要求组件向容器发起请求查找资源,作为回应,容器适时的返回资源。而应用了IOC之后,则是容器主动的将资源推送给它所管理的组件,组件所要做的仅是选择一种合适的方式来接受资源。这种行为也被称为查找的被动形式。
DI(Dependency Injection)——IOC的另一种表达方式:即组件以一些预先定义好的方式(例如:setter方法)接受l来自如容器的资源注入,相当于IOC而言,这种表述更直接。
为什么使用依赖注入(DI)?
IOC的前世今生
IOC前生——分离接口与实现
需求:生成HTML或PDF格式的不同类型的报表
IOC前生——采用工厂设计模式
IOC今世——采用反转控制
Spring容器的配置:
在XML文件中通过bean节点来配置bean
在Spring IOC容器读取Bean配置创建Bean实例之前,必须对它进行实例化。只有在容器实例化后,才可以从IOC容器里获取Bean实例并使用。
Spring提供了两种类型的IOC容器实现
BeanFactory:IOC容器的底层基本实现
ApplicationContext:提供了更多的高级特性,是BeanFactory的子接口。
习题训练:
要点:Spring依赖注入
需求说明:输出:
张嘎说:“三天不打小鬼子,手都痒痒!”
Rod说:“世界上有2种人,认识二进制的和不认识二进制的。”
public class HelloSpring2 {
private String name;
private String say;
//无参构造,属性注入
public String getName() {
return name;
}
//通过有参构造,构造方法注入
public void setName(String name) {
this.name = name;
}
public String getSay() {
return say;
}
public void setSay(String say) {
this.say = say;
}
public void showInfo(){
System.out.println(name+"说:"+say);
}
}
ApplicationContext.xml
public class HelloTest {
public static void main(String[] args) {
ApplicationContext app=new ClassPathXmlApplicationContext("applicationContext.xml");
HelloSpring2 hello1=(HelloSpring2) app.getBean("hello1");
hello1.showInfo();
HelloSpring2 hello2=(HelloSpring2) app.getBean("hello2");
hello2.showInfo();}}
配置Bean基于XML
在XML文件中通过bean节点来配置bean
在IOC容器中必须是唯一的
若id没有指定,Spring自动将类名作为Bean的名字
XML配置Bean——依赖注入的方式
依赖注入的方式配置Bean,Spring支持3种依赖注入的方式
1.属性注入
2.构造器注入
3.工厂方法注入(很少使用,不推荐)
1.属性注入(通过无参构造)
属性注入即通过setter方法注入Bean的属性值或依赖的对象
属性注入使用元素,使用name属性指定Bean的属性名称,value属性或
属性注入是实际应用中最常用 的注入方式
(上面基于XML配置Bean的例子就是属性注入)
2.构造器注入(至少有一个有参函数,传参数)
通过构造方法注入Bean的属性值或依赖的对象,它保证了Bean实例在实例化后就可以使用
构造器注入在元素里声明属性,常用属性:
name、value、type
若字面值中包含特殊字符,可以使用吧字面包裹起来。
在XML袁术中,“<”和“&”是非法的
CDATA部分中的所有内容都会被解析器忽略
CDATA部分由“”结束
CDATA部分不能包含字符串“]]>”,也不允许嵌套
标记CDATA部分结尾的“]]>”不能包含空格或折行
ApplicationContext的主要实现类:
ClassPathXmlApplicationContext:从类路径下加载配置文件
FileSystemXmlApplicationContext:从文件系统中加载配置文件
ConfigurableApplicationContext扩展于ApplicationContext,新增加两个主要方法:refresh(0和close(),rang ApplicationContext具有启动、刷新和关闭上下文的能力
ApplicationContext在初始化上下文时就实例化所有单例的Bean
WebApplicationContext是专门为WEB应用而准备的,它允许从x相对于WEB根目录的路径中完成初始化工作
从IOC容器中获取Bean,调用ApplicationContext的getBean()方法