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

目录:

    • 1.Spring框架最基本、最核心的jar包
    • 2.Spring的入门程序
    • 3.依赖注入
      • 3.1 依赖注入的概念
      • 3.2 依赖注入的实现方式

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)


<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">

    
    
    <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框架最基本核心的jar包、Spring的入门程序、依赖注入_第1张图片

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

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

    Spring | Spring框架最基本核心的jar包、Spring的入门程序、依赖注入_第2张图片

3.2 依赖注入的实现方式

依赖注入的作用就是在使用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 (其中添加以下代码

    
    <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">
    
        
        
        <bean id="userDaoImpl" class="com.myh.ioc.UserDaoImpl"/>
    
        
        <bean id="userServiceImpl" class="com.myh.ioc.UserServiceImpl">
            
            
            <property name="userDao" ref="userDaoImpl"/>
            
        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注入 的方式,也是实际开发中最为常用的一种方式。

你可能感兴趣的:(框架知识点-合集,spring,jar,DI,依赖注入,IOC控制反转)