了解Spring IOC容器

什么是Spring IOC容器?

IOC容器,全称(Inversion of Control),即控制反转,是Spring框架的核心功能之一,它把传统上由程序代码直接操控的对象调用权交给了容器,通过容器来实现对象组件的装配和管理,利用了java反射机制。

Spring IOC负责创建对象,管理对象(通过依赖注入(DI)),装配对象,配置对象,并且管理这些对象的整个生命周期,所以IOC就像一个存放对象的容器。

通俗理解,就是使用者只需要把自己需要用到的对象告知Spring,然后直接声明使用,Spring就可以把这些所需的对象创建准备好,要用的时候直接就可以拿来用了,这样就不需要在程序中创建对象,消除了硬编码,降低了类之间的依赖关系。

好处:在实际的项目开发中,往往需要通过类与类之间的相互协作来完成特定的业务逻辑,这个时候,没个类都要管理与自己有交互的类的引用和依赖,这样就使得代码的维护异常困难并且耦合度过高,而IOC的出现就是为了解决这个问题,IOC将类与类的依赖关系写在配置文件中,程序在运行时根据配置文件动态加载依赖的类,降低了类与类之间的耦合度。

Spring IOC实现方式:

1. 依赖查找(DL):这种方式已经被抛弃了,因为它需要用户自己去使用API进行查找资源和组装对象。有侵入性。

2. 依赖注入(DI):Set注入、构造器注入、注解注入

Spring的IOC支持以下功能:

1. 依赖注入

2. 依赖检查

3. 自动装配

4. 支持集合

5. 指定初始化方法和销毁方法

6. 支持回调某些方法(需要实现Spring接口,略有侵入)

 

举例说明:

调用用户User对象,首先来创建一个User对象实体类

public class user{
    
    private String name;
    private Integer age;
    
    //构造器
    public user(){}

    public user(String name, Integer age){
        
        super();
        this.name = name;
        this.age = age;
    }

    //set,get方法这就不写了……
}

利用Spring来创建这个类的对象

<?xml version=“1.0” encoding=“UTF-8“?>
<beans xmlns=“http://www.springfrmework.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”>

<!—-创建user对象—->

<bean id=“u1” class=“com.xxx.user”>
    
    <!—- set注入 —->
    <!—— DI 依赖注入在创建这个对象的时候调用这个对象的属性完成赋值—->
    <property name=“name” value=“Zhangsan”/>
    <property name=“age” value=“18”/>    


    
    <!—-构造器注入 —->
    <constructor-arg name=“name” value=“Zhangsan”/>
    <constructor-age name=“age” value=“18”/>

</bean>

</beans>

调用user对象类

public class test{
    public static void main(String[] arg){
        ApplicationContext context = new ClassPathXmlAppliactionContext(“applicationContext.xml”);
        user userObj = (user) context.getBean(“u1”);
        System.out.println(userObj);
    }
}

以上两种讲的是set注入和构造器注入,接下来讲解下注解注入方式;

配置applicationContext.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 http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd”>

<!—- 开启自动扫描xxx.ioc包下的所有类的注解—->
<context:component-scan base-package=“Xxx.ioc”></context:component-scan>
</beans>

注解注入类

package xxx.ioc;

public interface userDao{

    public void get();
}
package xxx.ioc;

import org.springfremawork.stereotype.Component;

@Component(“userDao”)//相当于<bean id=“userDao” class=“Xxx.ioc.userDaoImpl”/>
public class userDaoImpl implements userDao{

    @Value(“张三”)
    private String name;

    public void get(){
        System.out.println(“参数是:” + name);
    }
}

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值