Spring入门

杀马特。学长 韩版系。学妹 提交于 2020-04-05 18:18:15

Spring入门案例

Spring简介

Spring是什么

Spring是一个IOC(控制反转)和AOP(面向切面编程)为内核的轻量级容器框架。Spring使得创建java企业级应用变得容易,提供了在企业环境中使用Java语言所需的一起,可以根据应用程序的需求灵活地创建多种体系结构。

Spring核心

  • IOC
  • AOP

Spring优势

  • 轻量级
  • 声明式事务支持
  • 方便程序测试
  • 方便集成优秀框架

Spring体系结构

程序的耦合和解耦

  • 耦合:程序之间依赖关系

  • 解耦:降低程序间依赖

    解决思路: 编译期间不依赖、运行时才依赖

    • 通过配置文件的方式,来获取要使用的对象全限定类型
    • 程序中使用反射机制创建对象,避免使用new关键字创建对象
  • 解决思路

    • 工厂模式解耦:DEMO
    • SpringIOC

Spring入门案例

  • 创建maven工程

  • 配置依赖

    <dependencies>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>5.0.2.RELEASE</version>
            </dependency>
        </dependencies>
    
  • 创建包目录

  • 创建Spring配置文件ApplicationContext.xml

    把对象交给Spring来管理; id: 唯一标识 class:全限定类名

    <?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">
    
        <!--
        把对象的创建交给spring来管理
        每一个bean代表一个对象 id : 唯一标识 class: 全限定类名
        -->
        <bean id="userService" class="com.wh.service.impl.UserService"></bean>
        <bean id="userDao" class="com.wh.dao.impl.UserDao"></bean>
    </beans>
    
  • Spring容器中获取对象并使用

    import com.wh.service.IUserService;
    import com.wh.service.impl.UserServiceImpl;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class TestUserCRUD {
        public static void main(String[] args) {
            // 1. 通过资源路径获取ApplicationContext 获取核心容器
            ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
    
            // 2. 通过唯一标识获取对象
            IUserService userService = context.getBean("userService", UserServiceImpl.class);
            userService.createUser();
        }
    }
    

ApplicationContext

ApplicationContext是一个维护bean定义以及相互依赖的注册表的高级工厂的接口, 通过T getBean(String name, Class<T> requiredType) 可以获取对象实例。

ApplicationContext支持不同的配置源读取bean定义

  • ClassPathXmlApplicationContext:可以加载类路径下的xml文件
  • FileSystemXmlApplicationContext:可以加载磁盘任意位置的配置文件(必须要有访问权限)
  • AnnotationConfigApplicationContext:读取注解配置的容器

Bean总览

1. Bean标签

1. Bean的作用范围和生命周期

  • bean标签中的scope属性可以控制Bean的生命周期

    • singleton: 单例
    • prototype:多例
    • request:将对象放入request域中
    • session:将对象放入session域中
    • global session: 将对象放入集群的会话作用域范围中
  • 单例和多例区别

    • 单例: 每个应用只有一个该对象的实例,它的作用范围就是整个应用; 单例对象的创建与销毁 和 容器的创建与销毁时机一致
      • 对象出生: 当应用加载,创建容器时,对象就被创建
      • 对象活着: 只要容器存在,对象一直活着
      • 对象死亡: 当应用卸载,销毁容器时,对象就被销毁
    • 多例:每次访问对象,都会创建一个新实例; 多例对象的创建与销毁时机不受容器控制
      • 对象出生: 当使用对象时,创建新的对象实例
      • 对象活着: 只要对象在使用中,就一直活着
      • 对象死亡: 当对象长时间不用时,被 java 的垃圾回收器回收了

2. 实例化Bean的三种方式

  • 使用默认无参构造函数创建对象

    <bean id="userService" class="com.wh.service.impl.UserServiceImpl"></bean>
    
  • 使用静态工厂方法创建对象

    package com.wh.factory;
    
    import com.wh.service.IUserService;
    import com.wh.service.impl.UserServiceImpl;
    
    public class StaticFactory {
    
        public static IUserService createUserService(){
            return new UserServiceImpl();
        }
    }
    
    
    <!--使用静态工厂创建userService-->
    <!--com.wh.factory.StaticFactory: 静态工厂全限定类名-->
    <!--createUserService: 静态工厂名-->
        <bean id="userService"
              class="com.wh.factory.StaticFactory"
              factory-method="createUserService">   
        </bean>
    
  • 使用实例工厂方法创建对象

package com.wh.factory;

import com.wh.service.IUserService;
import com.wh.service.impl.UserServiceImpl;

public class InstanceFactory {
    public IUserService createUserService(){
        return new UserServiceImpl();
    }
}
<!--定义实例工厂全限定类名-->
<bean id="instanceFactory" class="com.wh.factory.InstanceFactory"></bean>
<bean id="userService" 
      factory-bean="instanceFactory" 
      factory-method="createUserService">
</bean>
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!