Spring学习-IOC控制反转

本文介绍了Spring框架中的核心概念——IOC(控制反转),详细阐述了IOC如何管理Bean对象,包括XML配置、注解和Java配置等方式。同时,讨论了BeanFactory和ApplicationContext这两种Bean容器的区别和特性,以及Bean的实例化方法,如构造器和工厂方法等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

什么是spring

Spring是一个使用JavaBean,全方位整合各个组件,实现一站式开发的企业级应用的框架,说白了,就是一个兼容器,兼容各种开发的组件使得开发便捷高效!

spring体系架构

spring架构图

简单说明,spring包含的常用的重要的封装
IOC容器,管理所有的bean对象,降低组件之间的耦合
封装AOP技术,标准且便捷了切面开发编程
提供了事务管理,消息服务
提供了辅助类包括jdbcTemplate,便捷我们对数据库操作
支持几乎所有主流框架如shiro,mybatis等

Spring-IOC是什么

控制反转(IOC)

IOC(Inversion of Control):传统方式,程序员通过代码创建对象bean。spring以容器的方式去创建,并管理程序中的Bean对象。这种管理方式就是控制反转,装载Bean的容器也被称为IOC容器。

如何让IOC管理Bean对象,既Bean的配置方式有哪些

三种方式:

  1. 使用xml文件的方式使得Bean容器管理Bean对象
<?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">
<!--    xml方式配置Bean对象,使得IOC管理-->
    <bean id="IocPerson" class="org.yangz.entity.IocPerson"></bean>
</beans>
  1. 使用注解,@ComponentSacn指定扫描范围,通过标识注解达到Bean容器管理对象
    @ComponentSacn+@Controller类似
  2. 使用java代码,主要是@Configuration注解,把bean对象交给Bean容器管理
@Configuration
public class IOCConfig {
    /**
     * 此处@Configuration代表这是一个配置类,比如上面的xml配置文件,@Bean代表此方法返回对象IOC进行管理,已方法名作为Bean的id
     * @return
     */
    @Bean
    public IocPerson getIocPerson(){
        return new IocPerson("java config配置");
    }
}

Bean容器有哪些

BeanFactory

基础的IOC容器,org.springframework.beans.factory接口,提供了完成的IOC支持,是管理Bean的工厂负责初始化各种Bean对象,并且管理他们的生命周期。

		ClassPathResource classPathResource=new ClassPathResource("bean.xml");
        BeanFactory beanFactory=new XmlBeanFactory(classPathResource);
        IocPerson iocPerson = beanFactory.getBean("IocPerson", IocPerson.class);
ApplicationContext

继承了BeanFactory的的接口,增加了许多其他接口的功能,称之为上下文容器。springBoot种直接Autowired即可

		ApplicationContext showBeanApplication=new ClassPathXmlApplicationContext("bean.xml");
        IocPerson iocPerson2 = showBeanApplication.getBean("IocPerson1", IocPerson.class);

默认情况下,ApplicatinContext创建单例对象时,使用饿汉模式,当容器启动就会创建好所有对象。区别于BeanFactory懒汉模式,获取实例时才创建对象。
特点:
1. 继承了EnvironmentCapable,可以获取环境信息
2. 提供了统一的资源访问方式
3. 继承了MessageSource,可以支持国际化
4. 同时支持加载多个配置文件
5. 可以载入多个有继承关系的上下文,每个上下文专注于特定的层次

Bean的实例化方法有哪些,以xml配置ioc为例

<!--    xml方式配置Bean对象,使得IOC管理,默认使用构造方法进行实例化-->
    <bean id="IocPerson1" class="org.yangz.entity.IocPerson"></bean>

<!--    工厂模式,分别以实例工厂和静态工厂完成bean的实例化操作-->
    <bean id="PersonFactory" class="org.yangz.entity.PersonFactory"></bean>
    <bean id="IocPerson2" factory-bean="PersonFactory" factory-method="getIocPerson2"></bean>
    <bean id="IocPerson3" class="org.yangz.entity.PersonFactory" factory-method="getIocPerson"></bean>

<!-- 此处是FactoryBean的配置,但是返回的确实Iocperson对象,他会直接调用getObject方法,而且模式单例模式-->
    <bean id="IocPerson4" class="org.yangz.entity.PersonFactoryBean"></bean>
  1. 构造器方式
  2. 工厂方法(静态工厂,实例工厂)
public class PersonFactory {

//    静态工厂模式
    public static IocPerson getIocPerson(){
        IocPerson iocPerson = new IocPerson();
        return iocPerson;
    }
//实例工厂模式
    public IocPerson getIocPerson2(){
        IocPerson iocPerson = new IocPerson();
        return iocPerson;
    }

}
  1. FactoryBean接口
public class PersonFactoryBean implements FactoryBean<IocPerson> {
    @Override
    public IocPerson getObject() throws Exception {
        return new IocPerson();
    }

    @Override
    public Class<?> getObjectType() {
        return null;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yang_zeng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值