创建容器
一: 类路径加载配置文件
//1.加载类路径下的配置文件
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
二:文件路径加载配置文件
//ApplicationContext ctx = new FileSystemXmlApplicationContext("D:\\workspace\\spring\\spring_10_container\\src\\main\\resources\\applicationContext.xml");
三:加载多个配置文件
ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml1","bean.xml2")");
获取bean
方式一:
BookDao bookDao = (BookDao) ctx.getBean("bookDao");
方式二:
BookDao bookDao = ctx.getBean("bookDao",BookDao.class);
方式三:
BookDao bookDao = ctx.getBean(BookDao.class);
方式三就是依赖注入中的按类型注入
容器类层次结构
容器中的类是一层层叠加的,最上层父接口是beanfactory
beanfactory
使用beanfactory来创建ioc容器的具体实现方式:
public class AppForBeanFactory {
public static void main(String[] args) {
Resource resources = new ClassPathResource("applicationContext.xml");
BeanFactory bf = new XmlBeanFactory(resources);
// BookDao bookDao = bf.getBean(BookDao.class);
// bookDao.save();
}
}
beanfactory和applicationcontext的区别
public class BookDaoImpl implements BookDao {
public BookDaoImpl() {
System.out.println("constructor");
}
public void save() {
System.out.println("book dao save ..." );
}
}
beanfactory 是延迟加载,只有获取bean对象时才会创建bean对象
applicationcontext 是立即加载,加载时就会创建bean对象,可以加上懒加载
核心容器总结:
容器相关:
beanfactory是ioc容器的顶层接口,初始化beanfactory对象时,加载bean延迟加载
applicationcontext 接口是spring 容器的核心接口,初始化bean立即加载
applicationcontext 接口提供基础的bean操作相关方法,通过其他接口扩展其功能,常用的初始化类:
classpathxmlapplicationcontext,filesystemxmlapplicationcontext
bean相关:
id:bean的唯一标识
name: bean的别名
class:bean的类型,静态工厂类,factorybean类
scope:控制bean的实例数量
init-method:生命周期初始化
destroy-method:生命周期销毁方法
autowrite:自动装配类型
factory-method:bean工厂方法,应用于静态工厂或实例工厂
factory-bean:实例工厂bean
lazy-init 控制bean延迟加载
依赖注入相关
setter注入重要