一篇文章带你掌握主流基础框架——Spring(11)

为了更好的看出BeanFactory和ApplicationContext之间的区别 , 在BookDaoImpl添加如下构造函数:
public class BookDaoImpl implements BookDao {public BookDaoImpl() {System.out.println("constructor");}public void save() {System.out.println("book dao save ..." );}}如果不去获取bean对象 , 打印会发现:

  • BeanFactory是延迟加载 , 只有在获取bean对象的时候才会去创建
  • ApplicationContext是立即加载 , 容器加载的时候就会创建bean对象
  • ApplicationContext要想成为延迟加载 , 只需要按照如下方式进行配置
    <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"lazy-init="true"/></beans>
核心概念总结接下来我们对前面知识的一个总结 , 共包含如下内容:
容器相关
  • BeanFactory是IoC容器的顶层接口 , 初始化BeanFactory对象时 , 加载的bean延迟加载
  • ApplicationContext接口是Spring容器的核心接口 , 初始化时bean立即加载
  • ApplicationContext接口提供基础的bean操作相关方法 , 通过其他接口扩展其功能
  • ApplicationContext接口常用初始化类
    • ClassPathXmlApplicationContext(常用)
    • FileSystemXmlApplicationContext
bean相关
一篇文章带你掌握主流基础框架——Spring

文章插图
依赖注入相关
一篇文章带你掌握主流基础框架——Spring

文章插图
注解开发在上述的开发中 , 我们采用xml配置文件的形式来说依旧显得有些复杂
这时我们就需要发挥Spring的优点:简化开发 , 通过注解来简化开发过程
下面我们会通过多个方面将Bean逐步转化为注解
注解开发Bean在前面的内容中 , 我们的bean在xml配置文件中装配
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!--原生bean--><bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/></beans>在后期 , 我们的bean可以采用注解的形式 , 直接在实现类中注解表示为bean
我们采用@Component定义bean , 可以添加参数表示id , 也可以不添加参数 , 后期我们采用class类的类型来进行匹配
package com.itheima.dao.impl;import com.itheima.dao.BookDao;import org.springframework.stereotype.Component;import org.springframework.stereotype.Controller;import org.springframework.stereotype.Repository;//@Component定义bean@Component("bookDao")public class BookDaoImpl implements BookDao {public void save() {System.out.println("book dao save ...");}}package com.itheima.service.impl;import com.itheima.dao.BookDao;import com.itheima.service.BookService;import org.springframework.stereotype.Component;import org.springframework.stereotype.Service;//@Component定义bean@Componentpublic class BookServiceImpl implements BookService {private BookDao bookDao;public void setBookDao(BookDao bookDao) {this.bookDao = bookDao;}public void save() {System.out.println("book service save ...");bookDao.save();}}@Componenty延伸出了三种类型 , 在实现手法上是一致 , 但可以具体使用于各种类中(仅用于自我识别)

经验总结扩展阅读