Spring学习-Bean的理解

简介: Spring学习-Bean的理解

Bean的理解

三:Spring是如何管理Bean的

一:什么是Spring的Bean

1:基本概念

在Spring框架中,Bean是指在Spring容器中管理的一个对象。Spring容器通过对Bean的管理,实现了依赖注入、面向切面编程、声明式事务管理等核心特性。Spring的Bean可以是普通Java对象、JavaBean、POJO(Plain Old Java Object)等类型的对象,还可以是数据源、连接池、JMS(Java消息服务)等非常复杂的对象。


在Spring中,Bean是通过IoC(Inversion of Control,控制反转)容器创建、装配和管理的。IoC容器负责从Bean工厂中读取Bean的配置信息,并根据配置信息创建、初始化和管理Bean的生命周期。Spring的Bean工厂提供了很多Bean配置选项,可以控制Bean的实例化方式、作用域、依赖注入方式等。同时,Spring还提供了各种便捷的注解和API,使得Bean的配置和管理更加方便和灵活。


总之,Spring的Bean是Spring框架中的一个核心概念,它是构建Spring应用程序的基础组件之一。通过Spring的Bean容器,我们可以轻松创建、管理和组装各种对象,实现代码的解耦和复用。


2:Bean的工厂和应用上下文

Bean工厂和应用上下文是Spring框架中的两个重要概念,它们都是Spring容器的一种。

下面我会简要地介绍它们的区别和作用。


2.1 Bean工厂

Bean工厂是Spring框架中最基本的IoC容器,它负责实例化、配置和管理Bean对象。在Spring中,Bean工厂可以通过XML文件、Java代码或注解来配置和创建Bean对象。当我们需要使用某个Bean对象时,我们可以向Bean工厂发出请求,Bean工厂会返回对应的Bean实例。

Bean工厂提供了多种Bean的作用域,包括Singleton(单例模式)、Prototype(原型模式)、Request(请求模式)、Session(会话模式)等。不同作用域的Bean在不同的环境中有不同的生命周期,我们可以根据具体的需求来选择合适的作用域。

2.2 Bean的上下文。

1.应用上下文是基于Bean工厂的进一步抽象和扩展,它是一个更加高级的IoC容器。与Bean工厂相比,应用上下文提供了更多的功能,例如Bean的自动装配、国际化、事件传递等。同时,应用上下文也是Bean工厂的子接口,因此应用上下文可以完成Bean工厂的所有功能。


2.Spring框架提供了多种类型的应用上下文,包括ClassPathXmlApplicationContext(基于类路径的上下文)、FileSystemXmlApplicationContext(基于文件系统的上下文)、AnnotationConfigApplicationContext(基于注解的上下文)等。我们可以根据具体的需求选择合适的应用上下文。

2.3 二者选择

Bean工厂和应用上下文都是Spring容器的一种,它们都可以管理Bean对象,并提供了不同的功能和特性。如果我们只需要最基本的IoC功能,可以使用Bean工厂;如果需要更多的功能和扩展,可以选择应用上下文。


二:如何使用Spring Bean

1:装配机制

在Spring中,有三种常见的方式来配置和管理bean,分别是:


1.在XML中显式配置:通过在XML文件中定义bean的信息,包括bean的id、class、属性值等,由Spring容器进行解析和管理。

定义一个UserService的接口和其对应的实现类UserServiceImpl:

public interface UserService {
    void addUser(User user);
}
public class UserServiceImpl implements UserService {
    private UserDao userDao;
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }
    @Override
    public void addUser(User user) {
        userDao.addUser(user);
    }
}
public interface UserDao {
    void addUser(User user);
}
public class UserDaoImpl implements UserDao {
    @Override
    public void addUser(User user) {
        // 添加用户到数据库
    }
}

在XML文件中进行bean的配置:

<bean id="userDao" class="com.example.dao.UserDaoImpl" />
<bean id="userService" class="com.example.service.UserServiceImpl">
    <property name="userDao" ref="userDao" />
</bean>

2.在Java中进行显示配置:通过JavaConfig的方式,使用Java代码来定义bean的信息,可以避免使用XML文件,并且具有更好的类型安全性和编程体验。

定义一个JavaConfig类,并在其中定义bean的信息:

@Configuration
public class AppConfig {
    @Bean
    public UserDao userDao() {
        return new UserDaoImpl();
    }
    @Bean
    public UserService userService() {
        UserServiceImpl userService = new UserServiceImpl();
        userService.setUserDao(userDao());
        return userService;
    }
}

3.隐式的bean发现机制和自动装配:Spring容器会自动发现和管理应用中的bean,通过自动装配的方式将它们连接起来。这种方式可以让开发者专注于业务逻辑的实现,而不用过多关注bean的管理。

//在使用注解时,可以使用@Component、@Service、@Repository和@Controller等注解标注bean类,Spring容器会自动扫描并注册这些bean。使用@Autowired注解自动注入依赖:
@Component
public class UserServiceImpl implements UserService {
    @Autowired
    private UserDao userDao;
    @Override
    public void addUser(User user) {
        userDao.addUser(user);
    }
}

2:自动化装配

1.组件扫描(component scanning) : Spring 会自动发现应用上下文中所创建的Bean

Spring容器会自动扫描应用上下文中的类,发现带有特定注解的类,并将它们自动注册为Bean。这种方式可以避免手动在XML或JavaConfig文件中配置Bean信息,从而简化了开发过程。比如,使用@Component注解标记一个类,表示该类是一个组件(component),Spring会自动将其实例化并加入应用上下文中。


2.自动装配(autowiring): Spring自动满足bean中的依赖。

在应用上下文中,有时一个Bean需要依赖另一个Bean才能正常工作。手动在XML或JavaConfig文件中配置依赖关系可能会很繁琐,而自动装配可以让Spring容器自动解析Bean之间的依赖关系,并自动将依赖的Bean注入到需要它们的Bean中。Spring提供了多种自动装配的方式,如byName、byType、constructor等,可以根据具体的情况选择适合的方式。

三:Spring是如何管理Bean的

Spring通过Bean容器来管理Bean,Bean容器是Spring框架中最基本的组件之一。


1.BeanFactory是Spring框架中最基本的Bean容器,提供了最基本的Bean容器的功能,如Bean的创建、销毁、获取等操作。BeanFactory的实现类包括DefaultListableBeanFactory和XmlBeanFactory等,它们可以通过XML配置文件或者代码配置来初始化Bean。


2.ApplicationContext是BeanFactory的子接口,提供了更多的功能和特性,如国际化、事件传递、Web应用支持等。ApplicationContext可以从类路径、文件系统、Web应用程序或者其他一些来源中加载配置信息,并创建相应的Bean。Spring提供了多个ApplicationContext的实现类,如ClassPathXmlApplicationContext、FileSystemXmlApplicationContext、AnnotationConfigApplicationContext等。


3.Spring管理Bean的过程中,可以通过XML配置文件或者Java代码配置来定义Bean的信息,如Bean的ID、类名、属性值等。Spring会将这些Bean的信息加载到Bean容器中,当需要使用Bean时,Spring会从容器中获取相应的Bean,并进行必要的依赖注入和初始化操作。在Bean的生命周期中,Spring还提供了一些回调方法,如Bean的初始化方法和销毁方法,可以在这些方法中进行一些额外的处理操作。


下图给了一个Bean的整个生命周期:

目录
相关文章
|
1月前
|
XML Java 数据格式
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
这篇文章是Spring5框架的实战教程,主要介绍了如何在Spring的IOC容器中通过XML配置方式使用外部属性文件来管理Bean,特别是数据库连接池的配置。文章详细讲解了创建属性文件、引入属性文件到Spring配置、以及如何使用属性占位符来引用属性文件中的值。
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
|
14天前
|
缓存 安全 Java
Spring框架中Bean是如何加载的?从底层源码入手,详细解读Bean的创建流程
从底层源码入手,通过代码示例,追踪AnnotationConfigApplicationContext加载配置类、启动Spring容器的整个流程,并对IOC、BeanDefinition、PostProcesser等相关概念进行解释
Spring框架中Bean是如何加载的?从底层源码入手,详细解读Bean的创建流程
|
14天前
|
XML Java 数据格式
Spring IOC—基于XML配置Bean的更多内容和细节(通俗易懂)
Spring 第二节内容补充 关于Bean配置的更多内容和细节 万字详解!
88 18
Spring IOC—基于XML配置Bean的更多内容和细节(通俗易懂)
|
1天前
|
XML Java 数据格式
spring复习02,xml配置管理bean
详细讲解了Spring框架中基于XML配置文件管理bean的各种方式,包括获取bean、依赖注入、特殊值处理、属性赋值、集合类型处理、p命名空间、bean作用域及生命周期和自动装配。
spring复习02,xml配置管理bean
|
1天前
|
XML Java 数据格式
spring复习03,注解配置管理bean
Spring框架中使用注解配置管理bean的方法,包括常用注解的标识组件、扫描组件、基于注解的自动装配以及使用注解后的注意事项,并提供了一个基于注解自动装配的完整示例。
spring复习03,注解配置管理bean
|
29天前
|
小程序 前端开发 Java
SpringBoot+uniapp+uview打造H5+小程序+APP入门学习的聊天小项目
JavaDog Chat v1.0.0 是一款基于 SpringBoot、MybatisPlus 和 uniapp 的简易聊天软件,兼容 H5、小程序和 APP,提供丰富的注释和简洁代码,适合初学者。主要功能包括登录注册、消息发送、好友管理及群组交流。
54 0
SpringBoot+uniapp+uview打造H5+小程序+APP入门学习的聊天小项目
|
1月前
|
缓存 前端开发 JavaScript
前后端分离 SpringBoot+Vue商城买卖系统通杀版本。大家可以参考学习一下
这篇文章介绍了一个使用SpringBoot+Vue开发的前后端分离商城系统,包括技术架构、开发环境、实现的功能以及项目截图,并展示了普通用户和商家端的功能界面。
前后端分离 SpringBoot+Vue商城买卖系统通杀版本。大家可以参考学习一下
|
1月前
|
XML Java 数据格式
Spring5入门到实战------6、IOC容器-Bean管理XML方式(自动装配)
这篇文章是Spring5框架的入门教程,详细讲解了IOC容器中Bean的自动装配机制,包括手动装配、`byName`和`byType`两种自动装配方式,并通过XML配置文件和Java代码示例展示了如何在Spring中实现自动装配。
Spring5入门到实战------6、IOC容器-Bean管理XML方式(自动装配)
|
1月前
|
XML Java 数据格式
Spring5入门到实战------8、IOC容器-Bean管理注解方式
这篇文章详细介绍了Spring5框架中使用注解进行Bean管理的方法,包括创建Bean的注解、自动装配和属性注入的注解,以及如何用配置类替代XML配置文件实现完全注解开发。
Spring5入门到实战------8、IOC容器-Bean管理注解方式
|
1月前
|
Java Spring