Long time no update, and first Time to use MarkDown Type
What is Spring ?
Spring , 开源的轻量级应用开发框架
1. 创建对象
2. 管理对象
- Spring 容器,Spring中任何的Java类和JavaBean都被当成Bean处理 ,Spring 容器就是对Bean进行管理的,Spring容器通过IOC和AOP可以简化Bean对象的创建(不需要new),也可以降低Bean对象之间的耦合度;
- Spring 容器:BeanFactory, ApplicationContext
Why Spring?
- Spring 本质就是管理对象,创建对象以及维护对象之间的关系
How Spring?
如何创建对象:Spring 容器实例化
ApplicationContext 继承自BeanFactory接口
//加载文件系统中的配置文件
String conf = "D:\applicationContext.xml";
ApplicationContext ac = new FileSystemXmlApplicationContext(conf);
//加载工程classpath下的配置文件
String conf = "applicationContext.xml";
ApplicationContext ac = new ClassPathXmlApplicationContext(conf);
代码片段
Bean实例化的3种方式
构造器
<bean id="calendar1" class="java.util.GregorianCalendar"></bean>
id(name) 表示Bean的名称, class 表示Bean的类型,Spring容器会自动调用无参构造函数创建对象
Calendar cal = (Calendar)ac.getBean("calendar1");
Calendar cal2 = ac.getBean("calendar1",Casendar.class);
静态工厂方法
<bean id="calendar2" class="java.util.Calendar" factory-method="getInstance"></bean>
factctory-method指定工厂中创建Bean对象的方法,必须用static修饰该方法
Calendar cal3 = ac.getBean("calendar1",Calendar.class);
getInstance()
实例化工厂方法
<bean id="cal1" class="java.util.GregorianCalendar"></bean>
<bean id="cal2" factory-bean="cal1" factory-method="getTime"></bean>
//Spring创建对象,调用getTime()方法创建Date类型对象
Date d = ac.getBean("cal2",Date.class);
Bean 的作用域
作用域 | 含义 |
---|---|
singleton | 单例模式,一个Bean对应一个对象,默认 |
prototype | 一个Bean对应多个对象 |
request | http请求一个Bean对应一个对象 |
session | http session中一个Bean对应一个对象 |
global session | 全局http session中一个Bean对应一个对象 |
Bean 的生命周期回调
初始化回调方法
<bean id = "obj1" class ="com.org.ky.dao.TestJDBC" init-method="init"></bean>
销毁回调方法
//destory-method 仅适用于singleton模式的bean
<bean id = "obj1" class ="com.org.ky.dao.TestJDBC" destory-method="destory"></bean>
设置容器中所有的Bean 初始化回调方法
<beans>
<bean id ="objn" class ="com.org.ky.dao.TestJDBC"></bean>
</beans>
Bean 延迟实例化
//lazy-init 可以在一个singleton bean zai ApplicationContext 初始化前不被提前实例化
<bean id = "obj1" lazy-init ="true" class ="com.org.ky.dao.TestJDBC"></bean>
Bean 依赖关系
<bean id ="objA" class ="com.org.ky.dao.TestJDBC" depends-on="objB"></bean>
<bean id ="objB" class ="com.org.ky.dao.TestJDBC"></bean>
What is IOC
说白了就是创建对象不需要new, 而是通过第3方框架创建,注入(setter注入,构造器注入)
setter 注入
setter注入代码片段
注入参数配置
2. 构造器注入
构造器注入代码片段
![构造器注入配置](http://upload-images.jianshu.io/upload_images/3390822-ff0c577629edb71e.png? imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 3. autowire
可以针对单个Bean进行设置,主要为了减少xml注入配置
UserService中存在setUserDao(UserDAO userDao方法)
autowire配置
UserService 中存在接收UserDAO 类型的setter方法,Spring就自动byType 按照类型匹配,即userDao就是UserService的属性,根据userDao这个属性名,去配置文件中找到相同名字的bean,将该bean的对象注入userService中, 这样在用userDao对象时可以直接使用该对象, 不需要new了。