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

如果不去获取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延伸出了三种类型 , 在实现手法上是一致,但可以具体使用于各种类中(仅用于自我识别)
  • @Controller:用于表现层bean定义
  • @Service:用于业务层bean定义
  • @Repository:用于数据层定义
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")//@Repository:@Component衍生注解@Repository("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//@Component//@Service:@Component衍生注解@Servicepublic 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();}}但是,在上述情况下,即使我们将@Component的类定义为bean
我们的xml文件是无法探测到的 , 所以我们需要配置相关扫描组件来扫描bean
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework.org/schema/context"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.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"><!-- <context:component-scan />:表示扫描文件 base-package:表示扫描路径 --><context:component-scan base-package="com.itheima"/></beans>

推荐阅读