【归纳总结】Spring之IOC&DI

基本认识

IOC

即Inverse Of Control,控制反转
区别于传统的java程序设计,用直接new对象的方法来创建对象,IOC思想是将我们设计好的对象交给Spring容器控制

DI

即Dependency Injection,依赖注入。
由容器动态的将某个依赖关系注入到组件之中


Spring的使用

1️⃣导包

Spring框架需要五个包

  • spring-core
  • spring-context
  • spring-bean
  • spring-aop
  • spring-expression

只需要导入spring-context即可,因为其他四个包都被它依赖。

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.2.10.RELEASE</version>
</dependency>

2️⃣创建容器

使用配置文件创建,配置文件名称:application(-xxx).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"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

    <!-- bean definitions here -->
    bean标签的位置
</beans>

通过bean标签来完成对组件的注册,标签中一般有如下属性:

  • id:组件在容器中的唯一标识
  • name:组件的名称,一般不写
  • class:返回类型的全类名

例如 :

 <!-- bean definitions here -->
    <bean id="userMapper" class="com.octavius.mapper.UserMapperImpl"/>

如果要建立组件之间的依赖关系,则需要使用property标签,该标签中有两个属性:

  • name:依赖的组件中给被依赖组件设置值的set方法的名字
  • ref:被依赖的组件的id

例如:
UserServiceImpl依赖UserMapperImpl:

public class UserServiceImpl implements UserService{
    UserMapperImpl userMapper;

    public void setUserMapper888(UserMapperImpl userMapper) {
        this.userMapper = userMapper;
    }
}

在配置文件中应作出如下配置:

 <!-- bean definitions here -->
    <bean id="userService" class="com.octavius.service.UserServiceImpl">
        <property name="userMapper888" ref="userMapper"/>
    </bean>

    <bean id="userMapper" class="com.octavius.mapper.UserMapperImpl"/>

3️⃣取出容器中的组件

  1. 按照组件的id取
  2. 按照组件的Class类型取(仅当该组件的Class类型在容器中唯一的时候可用)
  3. 按照组件的id和Class类型一起取
@Test
    public void test01(){
        //ApplicationContext就是容器的具体存在
        ApplicationContext context = new ClassPathXmlApplicationContext("application.xml");
        //方式一
        UserMapper userMapper1 = (UserMapper) context.getBean("userMapper");
        //方式二
        UserMapper userMapper2 = context.getBean(UserMapper.class);
        //方式三
        UserMapper userMapper3 = context.getBean("userMapper", UserMapper.class);
    }

BeanFactory

Spring的本质是一个bean工厂(beanFactory)或者说bean容器

提供容器具体存在的ApplicationContext接口有以下几个实例:

  1. ClassPathXmlApplicationContext
  2. FileSystemXmlApplicationContext
  3. AnnotationConfigApplicationContext
  4. AnnotationConfigWebApplicationContext
  5. XmlWebApplicationContext

Bean的实例化

1️⃣构造方法

①无参构造

默认的就是无参构造,例如:

<bean id="userService" class="com.octavius.service.UserServiceImpl">
        <property name="userMapper888" ref="userMapper"/>
    </bean>

    <bean id="userMapper" class="com.octavius.mapper.UserMapperImpl"/>

②有参构造

需要添加constructor-arg标签,标签中有两个属性:

  • name:有参构造方法的形参名
  • ref:容器中组件的id
  • value:当参数为基本类型时,形参的值
 <bean id="userService" class="com.octavius.service.UserServiceImpl">
        <constructor-arg name="userMapper" ref="userMapper"/>
        <property name="userMapper888" ref="userMapper"/>
    </bean>

    <bean id="userMapper" class="com.octavius.mapper.UserMapperImpl"/>

2️⃣工厂

①静态工厂

在bean标签中添加factory-method属性,属性的值就是生产组件的方法名

例如:
在这里插入图片描述在这里插入图片描述

②实例工厂

在bean标签中添加两个属性:

  1. factory-bean:生产出的组件的id
  2. factory-method:生产组件的方法名

例如:
在这里插入图片描述
在这里插入图片描述

③FactoryBean

FactoryBean接口中定义了一个方法:getObject()注册的组件类型和该方法的返回值相关
在这里插入图片描述
BeanFactory和FactoryBean之间的区别:

  • BeanFactory:生产全部组件
  • XXXFactoryBean:生产特定的xxx组件的

组件的作用域

在bean标签中添加scope属性,有两种类型:

  • singleton:组件在容器中以单例的形式存在
  • prototype:每一次获得组件的时候都去获得一个新的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值