首页 > 其他分享 >SpringDay01-入门基础知识、Bean的配置(一)

SpringDay01-入门基础知识、Bean的配置(一)

时间:2023-04-22 23:14:15浏览次数:53  
标签:ApplicationContext SpringDay01 BeanFactory spring 基础知识 Bean 实例 Spring

Spring(黑马)

一、基础知识

1.1 传统JavaWeb的缺点

  • 传统的JavaWeb在实现某个主要的业务逻辑时需要做的事情:
    • new一个实现类对象,然后通过对象调用某个主要的方法;
    • 开启事务、提交事务、回滚事务;在日志中记录修改数据;
    • 在日志中记录异常数据等。
  • 以上传统方法带来的问题:
    • 实现类与接口过于耦合--通过工厂模式,以第三方的方式解决耦合问题
    • service层事务功能、日志功能都与业务代码过于耦合

1.2 IOC、DI、AOP思想

  • IOC:控制反转 即业务层需要用到Bean对象时不再使用new的方式,而是通过第三方(动态代理)来拿到Bean对象,将创建Bean的权力控制反转给第三方。
  • DI:依赖注入 即Bean对象需要用到另一个Bean对象时也同样不再使用new的关系,可以直接交给第三方,不需要开发人员在业务层程序代码中进行设置。
  • AOP:面向切面编程 即对某一个Bean进行增强,主要是通过代理Proxy。

1.3 框架的概念

  • 从众多业务中抽取出来的通用的解决方案。
  • 使用了大量的设计模式,如反射、xml解析、注解解析
  • 使用简单的代码实现复杂的功能
  • 有了框架可以将精力集中于业务开发

1.4 Spring框架

  • 官方网站:spring.io 在首页栏的project查看各种框架的学习文档
  • Spring Freamwork:(学习主体)
    • Core Container:开发时会引入4个jar包(Maven开发时会引入4个坐标)
      • Beans
      • Core
      • Context
      • SpEL(表达式)
    • AOP(主要学习AOP技术)
    • Aspects(切面)
    • Data Access/Integration(数据访问层)
      • JDBC
      • ORM(JDBC框架)
      • Transaction(事务)
    • Web

二、快速入门

2.1 BeanFactory快速入门

  • BeanFactory工厂模式 即第三方,需要一个配置文件,对Bean进行一些说明

  • BeanFactory工厂模式的开发步骤(IOC+DI):

    【程序代码------>第三方------>配置文件------>Bean类】

    • 1、导入第三方 即Spring的jar包或者Maven坐标

    • 2、Bean类 即编写UserService接口以及UserServiceImpl实现类

    • 3、创建beans.xml配置文件,将UserServiceImpl的信息配置到该xml中

      <bean id="userService" class="impl的全类名"> <property name="impl中的方法名去掉test后首字母小写" ref="UserDao的id"></property></bean>
      
    • 4、编写测试用例,创建BeanFactory,加载配置文件,获取UserService实例对象

  • Spring核心依赖:

    • 1)spring核心依赖
      spring-core、spring-beans、spring-context
    • 2)spring dao依赖(提供JDBCTemplate)
      spring-jdbc、spring-tx
    • 3)spring web依赖
      spring-web、spring-webmvc
    • 4)spring test依赖
      spring-test
  • BeanFactory主要的实现类

    • DefaultListableBeanFactory

2.2 ApplicationContext快速入门

  • ApplicationContext称为Spring容器,内部封装了BeanFactory,后续开发常用。xml文件名称习惯写成applicationContext.xml。
  • ApplicationContext开发步骤:
    • 1、创建ApplicationContext接口变量指向子类对象--ClassPathXmlApplicationContext
    • 2、调用getBean()方法获取userService对象,同时执行了setUserDao()方法
  • ApplicationContext主要的实现类
    • ClassPathXmlApplicationContext--加载类路径下的ApplicationContext(Spring容器)
    • FileSystemXmlApplicationContext--加载磁盘路径下的ApplicationContext
    • AnnotationConfigApplicationContext--加载注解配置类的ApplicationContext

2.3 BeanFactory和ApplicationContext的关系

  • BeanFactory是Spring的早期接口,称为Spring的Bean工厂,ApplicationContext是后期更高级的接口,称之为Spring容器

  • BeanFactory的API更偏向底层,ApplicationContext的API大多数是对这些底层API的封装

  • ApplicationContext不仅继承BeanFactory,内部还维护着BeanFactory的引用,所以二者既有继承关系,又有融合关系

  • 二者Bean的初始化时机不同,BeanFactory是在首次调用getBean时才进行Bean的创建,而ApplicationContext则是创建容器 配置文件加载的时候将Bean都实例化并且都创建好。

三、基于Xml的Spring应用

3.1 Bean标签的基础配置

  • id必须唯一,bean对象有一个默认的name,是class的值;如果配置了id,那么name就是id的值;如果没有配置id,配置了name,那么name就是name的值;如果id和name都没有配置,那么name的值就是默认的class的值。
<bean id=" " name=" " class=""></bean>
  • 范围scope(很少配置这个)

    • singleton--单例(默认),只创建并且实例化一次对象,每次调用getBean()时使用的都是同一个对象,实例化的对象会存储在Spring容器的单例池中。单例池:singletonObjects.
    • prototype--原型,每一次调用getBean()时都会创建并实例化一次对象,因此每个对象都不一样,用完后就销毁,不会存储在容器中。
    <bean scope="sington"></bean>
    
  • 延迟加载lazy-init

    • 当使用ApplicationContext时,创建容器的时候就会立马实例化并且创建bean对象,如果将lazy-init设置为true时则不会立即创建,而是在使用时创建并且存储到单例池中,本质上仍然是单例的。

      <bean lazy-init="true"></bean>
      
  • 自定义初始化和销毁方法

    • 初始化--在UserServiceImpl中定义init()方法,后在bean标签中配置init-method=init()。init()方法在创建对象后 构造方法执行完后会被调用

    • 销毁--在UserServiceImpl中定义destroy()方法,后在bean标签中配置destroy-method=destroy()。destroy()方法会在关闭容器时调用,一般不怎么用。

      <bean init-method=init() destroy-method=destroy()></bean>
      
  • Bean传递有参构造参数

    <bean><constructor-arg name="age" value="18"></constructor-arg></bean>
    
  • Bean的实例化方式

    • 自定义静态工厂方法实例化Bean

      • 1、创建工厂类,自定义静态方法
      public class MyFactory {
          //自定义工厂 实例化Bean
          public static UserDao factory(){
              //Bean创建之前可以进行一些其他的业务逻辑操作
              return new UserDaoImpl();
          }
      }
      
      • 2、配置beans.xml文档
      <bean id="userDao1" class="com.fresh_yuan.factory.MyFactory" factory-method="factory"></bean>
      
      • 3、测试
      public class ApplicationContextTest {
          public static void main(String[] args) {
              ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");
              Object userDao1 = applicationContext.getBean("userDao1");
              System.out.println(userDao1);
          }
      }
      
      输出结果:
      com.fresh_yuan.dao.impl.UserDaoImpl@5dd6264
      
    • 自定义实例工厂方法实例化Bean

      • 1、创建工厂,方法不使用static修饰

        public class MyFactory2 {
            //自定义实例工厂实例化Bean
            public UserDao factory2(){//注意方法没有static关键字修饰
                System.out.println("实例工厂调用了");
                return new UserDaoImpl();
            }
        }
        
      • 2、配置beans.xml(这是重点)

      <!--   首先创建工厂的实例化对象,通过工厂的实例化对象调用非静态方法,从而实例化Bean    -->
      <bean id="myFactory" class="com.fresh_yuan.factory.MyFactory2"></bean>
      <bean id="userDao2" factory-bean="myFactory" factory-method="factory2"></bean>
      
      • 3、测试

        public class ApplicationContextTest {
            public static void main(String[] args) {
                ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");
                //UserService userService = (UserService) applicationContext.getBean("userService");
                Object userDao2 = applicationContext.getBean("userDao2");
                System.out.println(userDao2);
            }
        }
        

标签:ApplicationContext,SpringDay01,BeanFactory,spring,基础知识,Bean,实例,Spring
From: https://www.cnblogs.com/fresh-yuan/p/17344398.html

相关文章

  • Vue基础知识
    模板语法文本插值(textinterpolation)最基本的数据绑定形式,使用“Mustache”语法即{{...}}<span>Message:{{msg}}</span>{{}}中的值会被替换为相应组件实例中msg属性的值,且会同步地更新原始HTML<p>Message:<spanv-html="msg"></span></p>这里的v-html被称为指令Attrib......
  • USB | USB基础知识
    USB|USB基础知识......
  • Java基础知识点API之Object
    一:概述Object是java中的顶级父类,所有的父类都直接或间接地继承于Object类。Object类中的方法可以被所有子类访问,所以我们要学习Object类和其中的方法。二·:OBject的构造方法及其常用的成员方法publicObject()//空参构造classStudent(){privateStringname;private......
  • Java基础知识点API之Runtime
    一:Runtime的介绍Runtime表示当前虚拟机的运行状态二:Runtime的常用方法方法名说明publicstaticRuntimegetRuntime()当前系统的运行环境publicvoidexit(intstatus)停止虚拟机publicintavailableProcessors()获取cpu线程数publiclongmaxMemoryJVM能从系统中获取总内存大小(单......
  • 【Spring】静态方法(工具类)中调用Spring管理的Bean
    背景在一些业务开发,经常会写一些工具类,但这些工具类时常需要调用到Spring管理的bean,这些Spring管理的bean注入,平常用的都是@Autowired注解一个成员变量,问题就来了:(1)成员变量(即Spring管理的bean)是非静态的,但工具类都是想写静态方法,静态方法不能引入一个非静态的变量。所以......
  • Docker基础知识和命令使用入门
    Docker基础知识和命令使用入门摘要本文介绍了Docker相关的基础知识和命令的简单使用。基础知识部分包括Docker的用途和意义,Docker的镜像、容器、仓库、Dockerfile和DockerCompose的理解,以及Docker图形管理工具Portainer的基础功能。Docker命令的使用包括镜像使用......
  • C语言基础知识(不想写笔记啦,就把它打出来)
    scanf()函数的使用:操作系统接收数据时其实都是当作字符来接收的。scanf()函数的两种用法:用法一:scanf("输入控制符",输入参数);功能:将从键盘输入的字符转化成输入控制符所规定格式的数据,然后存入以输入参数的值为地址的变量中。用法二:scanf("非输入控制符输入控制符"......
  • 【C语言】基础知识
    整型数据浮点化:9*(x-32)/5.0部分库函数:乘方:doublepow(doublebase,doubleexponent) 开方:double sqrt(double x)pow(a,1.0/x)=a^(1.0/x) 就是a开x次方 格式化输出:%m.nlf 双精度浮点型输出,字符宽度m,小数点后保留n位。输出位数大于m时按原数据输出。位数不足时前面......
  • 01. 接口测试基础知识概要
    01.接口测试基础知识概要概要软件接口的分类:软件内部模块与模块之间的接口、不同平台间的外部接口常见接口:HTTP协议:最广泛;常用JMeter和Postman工具来测试WebService接口:使用soap协议,通过http传输,一般是xml格式,常用SoapUI工具测试什么是接口测试:基于某种协议,模拟客......
  • orcal的基础知识巩固
    今天重新拿起数据库这一块,感觉还不错,虽然出现了很多挫折,但是都能一一化解:建议一定要老老实实在cmd中去创建用户,创建表,只有这样你的技术才能进一步精进!首先登陆数据库之后,用connect/assysdba命令进入超管用户权限内;由于当时在前端(区别于cmd为后端)PLsql客户端中创建的jack账......