Spring | Spring框架最基本核心的jar包、Spring的入门程序、依赖注入

本文介绍了Spring框架的基础jar包,包括核心库、bean管理、依赖注入概念和实现方式,通过步骤详细展示了如何在Spring中进行入门编程,包括使用属性注入和XML配置文件.
摘要由CSDN通过智能技术生成

1.Spring框架最基本、最核心的jar包

Spring是一个轻量级框架,Spring最基本、最核心的的jar包括 : beans、context、core、expression

  • spring-core.jar : 这个jar包 包含spring框架基本的核心工具类,这是其他组件的基本核心
  • spring-beans.jar : 这个jar包是所有应用都能用到的,它包含了访问配置文件、 创建和管理Bean (BeanFactory)、进行IOC/DI操作相关的类。
    BeanFactory能添加和管理bean,其底层是通过IOC控制反转(Inversion of Control,IoC)的方式来管理bean。IOC是一种设计思想,它将传统的程序中的对象依赖关系由直接依赖改为间接依赖,实现了程序中各个模块的解耦,降低了模块间的耦合度,提高了代码的可维护性和可复用性。
    ps :
    BeanFactory是属于旧方式的管理Bean的方式,开发中一般使用ApplicationContext方式来替代BeanFactory来管理bean。
  • spring-context.jar : 这个jar包功能是建立在 corebeans 的基础上实现的,他在基础的IOC功能上提供扩展服务,此外还提供许多企业级服务的支持,有邮件服务任务调度JNDI定位EJB集成远程访问缓存以及多种视图层框架的支持
    ps :
    spring-context.jar 中的 ApplicationContext 能替代 BeanFactory 的添加和管理Bean,开发中更常用。ApplicationContext管理bean底层也是IOC
  • spring-expression.jar : 主要用于在Spring应用中表达和解析表达式。该功能在Spring 3.0中引入。

2.Spring的入门程序

第一步、在DIEA中创建一个Java项目,添加web功能模块。

第二步、在项目WEB-INF目录中创建lib文件夹,存放Spring框架最基本核心的jar包,让jar包生效。
获取spring框架基本核心jar包

第三步、创建UserDao接口 和 UserDaoImpl实现类
UserDao.java (接口)

public interface UserDao {

 public void say();

}

UserDaoImpl.java (实现类)

public class UserDaoImpl implements UserDao{ //实现类

 //重写实现类中的方法
 @Override
 public void say() {
     System.out.println("UserDaoImpl say hello World !");
 }
}

第四步、创建ApplicationContext.xml,其中添加和配置bean的信息 ( 用ApplicationContext的方式来在IOC容器中添加和管理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">

    <!--  将UserDaoImpl这个类交给Spring容器管理,即Beans管理,让其创建对象的实例  -->
    <!--  通过创建 ApplicationContext的方式来添加和管理Bean  -->
    <bean id="userDaoImpl" class="com.myh.ioc.UserDaoImpl"/>
</beans>

第五步、创建ApplicationContext获得bean,创建测试类使用bean。

public class TestIoC {
 public static void main(String[] args) {
         //1.初始化spring容器,加载配置文件
        ApplicationContext applicationContext =
                new ClassPathXmlApplicationContext("ApplicationContext.xml");
         //2.通过容器获得userDaoImpl实例
        UserDaoImpl userDaoImpl = (UserDaoImpl)applicationContext.getBean("userDaoImpl");
        //3.调用实例职工的say()方法
        userDaoImpl.say();
 }
}

3.依赖注入

3.1 依赖注入的概念

  • 依赖注入( Dependency Injection, 简称DI) 控制反转 (loC) 的含义相同,只不过这两个称呼是从两个角度描述的同一个概念 ( 不同角度下描述的同一概念 )。

  • 当某个Java对象 (调用者) 需要调用另一个Java对象( 被调用者,即被依赖对象)时。在 传统模式 下,调用者通常会采用 “new被调用者” 的代码方式来创建对象,如下图所示。这种方式会导致调用者被调用者之间的 耦合性增加不利于后期项目的升级和维护
    在这里插入图片描述

  • 在使用Spring 框架之后,对象的实例不再由调用者来创建,而是由Spring 容器来创建。
    Spring容器会负责控制程序之间的关系,而不是由调用者的程序代码直接控制。这样,控制权应用代码转移到了Spring容器控制权发生了反转,这就是Spring的 控制反转 ( IOC )。

    Spring容器的角度来看,Spring 容器负责将被依赖对象赋值给调用者的成员变量,这相当于为
    调用者注入了它依赖的实例,这就是Spring的 依赖注入 ( DI) ,如下图所示。
    ps :
    控制主导权有“调用者” 转变为 “spring容器”,控制权发生转变,叫“控制反转” ( IOC ),控制反转的实际操作是 : “依赖注入” ( DI )。

    在这里插入图片描述

3.2 依赖注入的实现方式 (基于 属性 + set方法 + xml配置文件 的实现方式)

依赖注入的作用就是在使用Spring 框架创建对象时,动态地将其所依赖的对象注入Bean组件中,其中依赖注入的方式有以下这两个方式,一、属性 setter方法注入,二、 构造方法注入,具体介绍如下。

  • 属性setter方法注入 : (最为常用
    指Spring容器使用setter方法注入被依赖的实例(对象)。通过调用无参构造器或无参静态工厂方法实例化Bean后,调用该Bean的setter方法,即可实现基于setter方法的依赖注入。

  • 构造方法注入 :
    指Spring容器使用构造方法注入被依赖的实例。基于构造方法的依赖注入通过调用带参数的构造方法来实现,每个参数代表着一个依赖。

    属性setter方法注入的例子

    UserService.java

    public interface UserDao {
    
     public void say();
    
    }
    

    UserServiceImpl.java

    public class UserServiceImpl implements UserService{
    
        //声明UserDao属性 (被调用者实例)
        private UserDao userDao; // "userDao"为 Bean实例中相应的 “属性名”
    
        //添加UserDao属性的setter方法,用于依赖注入
        public void  setUserDao(UserDao userDao){
            this.userDao = userDao;
        }
    
        //实现接口中的方法
        @Override
        public void say() {
            //调用userDao中的say()方法
            this.userDao.say();
            System.out.println("userServiceImpl say hello World!");
        }
    }
    

    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"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    
        <!--  将UserDaoImpl这个类交给Spring容器管理,即Beans管理,让其创建对象的实例  -->
        <!--  通过创建 ApplicationContext的方式来添加和管理Bean  -->
        <bean id="userDaoImpl" class="com.myh.ioc.UserDaoImpl"/>
    
        <!--  在IOC容器中创建一个id为“userServiceImpl“的Bean,该Bean用于实例化 UserServiceImpl类的信息  -->
        <bean id="userServiceImpl" class="com.myh.ioc.UserServiceImpl">
            <!--  将id为"userDao"的Bean实例注入到 userService实例中 -->
            <!--   name : 表示Bean实例中相应的 “属性名”
                   ref : 用于指定其属性值
             -->
            <property name="userDao" ref="userDaoImpl"/>
            <!--   property标签用于调用Bean实例中的 setUserDao() 方法完成属性赋值   -->
        </bean>
    
    </beans>
    

    TestDI.java (测试类)

    public class TestDI {
        public static void main(String[] args) {
            //1.初始化spring容器,加载配置文件
            ApplicationContext applicationContext =
                    new ClassPathXmlApplicationContext("ApplicationContext.xml");
            //2.通过容器获取UserService实例
            UserServiceImpl userServiceImpl = (UserServiceImpl) applicationContext.getBean("userServiceImpl"); //getBean()中参数为配置bean对应的id名
            //3.调用实例中的say()方法
            userServiceImpl.say();
        }
    }
    
  • 以上为Spring容器 属性setter注入 的方式,也是实际开发中最为常用的一种方式。

  • 26
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值