容器

public class App{
    public static void main(String[] args){
        // 1. 加载类路径下的配置文件
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        // 2. 从文件系统下加载配置文件
        // ApplicationContext ctx = new FileSystemXmlApplicationContext("/Users/guo/Code/spring-demo/src/main/resources/applicationContext.xml");

        // BookDao bookDao = (BookDao) ctx.getBean("bookDao");
        // BookDao bookDao = ctx.getBean("bookDao", BookDao.class);
        BookDao bookDao = ctx.getBean(BookDao.class);
        bookDao.save();
    }
}

创建容器

方式一: 类路径加载配置文件

ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");

方式二:文件路径加载配置文件

ApplicationContext ctx = new FileSystemXmlApplicationContext("/Users/guo/Code/spring-demo/src/main/resources/applicationContext.xml");

方式三:加载多个配置文件

ApplicationContext = ctx = new ClassPathXmlApplicationContext("bean1.xml", "bean2.xml");

获取Bean

方式一:使用Bean名称获取

BookDao bookDao = (BookDao) ctx.getBean("bookDao");

方式二:使用Bean名称获取并指定类型

BookDao bookDao = ctx.getBean("bookDao", BookDao.class);

方式三:使用Bean类型获取

BookDao bookDao = ctx.getBean(BookDao.class);

容器类层次结构

BeanFactory初始化

类路径加载配置文件

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创建完毕后,所有的Bean均为延迟加载,Bean的构造方法不会触发

ApplicationContext 延迟加载

<bean id="bookDao" class="com.xxx.dao.impl.BookDaoImpl" lazy-init="true"/>