栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring5 xml 配置编程基础运用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring5 xml 配置编程基础运用

文章目录
  • 1.什么是 IOC
  • 2.IOC底层原理涉及到:
  • 3.工场模式
  • 4.Ioc- Bean 生命周期
  • 4.xml 配置
    • 4.1、依赖注入(DI)
      • 4.1.1、构造器注入
      • 4.1.2、set注入(重点)
        • 4.1.2.1、八大数据类型和String类型
        • 4.1.2.2、list 类型
        • 4.1.2.3、String[] 类型
        • 4.1.2.4、map 类型
        • 4.1.2.5、Properties 类型
        • 4.1.2.6、注入外部bean(set注入)
        • 4.1.2.7、set 类型
  • 5.Bean的作用域:scope
  • 6.Bean的自动装配
    • 6.1、autowire的四种模式
  • 7. 什么是Aop
  • 8.AspectJ 框架介绍
    • 8.1、AspectJ 与SpringAop 的区别
    • 8.2、Aspect切点表达式语法


Spring框架有两个核心的组成部分 IOC 和 AOP

IOC : 控制反转,把创建对象的过程交给Spring进行管理

Aop : 面向切面, 不修改源代码进行功能增强

今天主要针对IOC进行介绍

IOC是Inversion of Control的缩写,即控制反转,就是把对象创建和对象之间调用的过程交给Spring进行管理,使用 IOC 的目的是为了降低耦合。

1.什么是 IOC

控制反转,把对象创建和对象之间的调用过程,交给 Spring 进行管理
使用 IOC 目的:为了耦合度降低
上一节的入门案例就是 IOC 实现

2.IOC底层原理涉及到:

xml 解析
工厂模式
反射

3.工场模式

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。


Spring提供 IOC 容器的实现方式有两种:

BeanFactory : IOC 容器的基本实现,是Spring内部的使用接口,不提供给开发人员使用,(加载配置文件时不会创建对象,只有使用对象时才会创建对象,不利于程序的时效性)

ApplicationContext : BeanFactory的子接口,提供给开发人员使用,(加载配置文件的时候就会把在配置文件中的对象创建,有利于程序的时效性)

IOC 操作bean管理

Bean管理是指两个操作 创建对象 和 注入属性

Bean管理有两种方式 基于xml配置文件方式实现 和 注解方式实现

4.Ioc- Bean 生命周期

四个阶段:

  • 1. bean定义和初始化

    • 通过构造器创建bean实例(无参构造器)
    • 给bean中的属性赋值和对其他bean引用(set方法)
  • 2. 初始化阶段(init-method)

    • 调用bean的初始化的方法(需要进行配置初始化的方法)
    • 在bean的类中创建myInitMethod()方法
    • 在配置文件bean中指定init-method所要调用的方法
  • 3. 使用 阶段

    • bean可以使用了(对象获取到了)
  • 4. 销毁阶段(destory-method)

    • 当容器关闭时调用bean的销毁的方法(需要进行配置销毁的方法)
    • 在bean的类中创建myDestroyMethod()方法
    • 在配置文件bean中指定init-method所要调用的方法
4.xml 配置 4.1、依赖注入(DI) 4.1.1、构造器注入


	
	


	
	
	


    

4.1.2、set注入(重点) 4.1.2.1、八大数据类型和String类型


    
    
    

4.1.2.2、list 类型


    
    	
			游戏
			网聊
			滑冰
			文艺
		
    

4.1.2.3、String[] 类型


    	
        
            红楼梦
            西游记
        
    


4.1.2.4、map 类型


    	
        
            
            
        
    

4.1.2.5、Properties 类型


    	
        	
				张三
				李四
				王五
			
    

4.1.2.6、注入外部bean(set注入)



    	 

public class user{
	private Clazz clazz;

	public void setClazz(Clazz clazz){
		this.clazz=clazz;
	}
}
4.1.2.7、set 类型
##属性 :private set carSet;


	
		
		
		
		
			
			
		
		
			
			
		
	

5.Bean的作用域:scope
  • 单例模式(默认)
    • singleton
  • 原形模式
    *prototype
  • 其他(web项目中才会用)
    • request
    • session
    • application


6.Bean的自动装配 6.1、autowire的四种模式
模式解释
no(默认)无自动装配
byName根据属性名称自动装配
byType如果容器中恰好存在一个该类型的bean,则使该属性自动装配
constructor类似于byType,但是适用于构造函数参数。

常用的为byName和byType
通俗来说:
 
byName:需要保证所有bean的id唯一,并且需要和自动装配的属性的set方法的值一致。⚠️1

byType:需要保证所有的bean的calss唯一,并且这个bean需要和自动装配的属性类型一致。⚠️2

  • 在XML中显式装配

⚠️1:private Car car;  


    

⚠️2:private Car car1;  

    


  • 在Java中显式装配







public class User {
    @Nullable // 表示可以为空
    private String name;
    @Autowired // 表示开启自动装配
    @Nullable // 表示可以为空
    private Dog dog;
    @Autowired(required = false) // 开启自动装配,并且可以为空
    @Qualifier(value = "cat") // 指定bean-id
    private Cat cat;
}
  • 在xml中开启扫描,Java中通过注解自动注册bean并配置自动装配




@Component // 表示该类被Spring托管了,就是bean
@Scope("prototype") // 作用域,选项参考xml配置文件方式singleton、prototype。。。
public class User {
    @Value("张三") // 表示默认值是张三
    private String name;
}

关于spring5注解式编程可以参考这篇文章

7. 什么是Aop

Aop 全称为 Aspect-Oriented Programming (面向切面【方面】编程)

针对业务处理过程中的公共功能进行切面式提取。
切面可以是处理过程中的某个相对独立的步骤或阶段,以便运行时动态植入到业务逻辑中,最终实现公共功能与核心业务隔离。

  • Aop相关术语:
    • Aspect(切面): Aspect 声明类似于java 中的类声明,在Aspect 中会包含一些Pointcut 以及相应的Advice
    • 增强处理(advice)
      • 前置增强(After Advice):在连接点(Join point)之前执行的通知。
      • 后置增强 (Before Advice): 当连接点退出的时候执行的通知(不论是正常返回还是异常退出)。
      • 环绕通知 (Around Advice): 包围一个连接点的通知,这是最强大的一种通知类型。焕然通知可以在方法调用前后完成自定义的行为。他也可以选这是否继续执行链接点 和 直接返回他们自己的返回值或 抛出异常来结束执行
      • 返回后通知 (AfterReturning Advice) : 在连接点正常完成后执行的通知(如果连接点抛出异常,则不执行)
      • 抛出异常后通知 (AfterThrowing Advice) : 在方法抛出异常退出时执行的通知
    • Join Point (链接点) : 表示在程序中明确定义的点,典型的包括方法调用,对类成员的访问以及异常处理程序块的执行等等,它自身还可以嵌套其他joint point
    • Pointcut (切点) : 表示一组joint point ,这些join point 或是 通过逻辑关系组合起来,或是通过配置正则表达式等方式集中起来的,它定义了相应的advice 将要发生的地方 ,换而言之就是 在哪些方法 执行这些切面
    • Target(目标对象): 织入Advice 的目标对象。
    • Weaving(织入): 将Aspect 和其他对象连接起来,并建立Adviced object 的过程

同一个Aspect,不同advice的执行顺序:

  1. 没有异常情况下的执行顺序:
  • around before advice
  • before advice
  • target method 执行
  • around after advice
  • after advice
  • afterReturning
  1. 有异常情况下的执行顺序:
  • around before advice
  • before advice
  • target method 执行
  • around after advice
  • after advice
  • afterThrowing
  • java.lang.RuntimeException: 异常发生
8.AspectJ 框架介绍
  • AspectJ是一个面向切面的框架,它扩展了Java语言。需要jdk1.5以上版本支持。
  • AspectJ定义了AOP语法所以它有一个专门的编译器用来生成遵守Java字节编码规范的Class文件。
8.1、AspectJ 与SpringAop 的区别
  • springAOP 是spring支持的面向切面AOP 编程。
  • AspectJ是一个面向切面的框架,它扩展了Java语言。AspectJ定义了AOP语法,它有一个专门的编译器用来生成遵守Java字节编码规范的Class文件。
  1. 织入方式
  • AspectJ 使用了三种不同类型的织入方式:

    • Compile-time weaving:编译期织入。编译器将切面和应用的源代码编译在一个字节码文件中。

    • Post-compile weaving:编译后织入。也称为二进制织入。将已有的字节码文件与切面编制在一起。

    • Load-time weaving:加载时织入。与编译后织入一样,只是织入时间会推迟到类加载到jvm时。

  • springAOP使用运行时织入(runtime weaving)

    • 在运行时织入,是使用目标对象的代理对象织入的。


总结:SpringAOP 是基于动态代理的实现AOP,这意味着实现目标对象的切面会创建一个代理类(如上图,两种代理模式)。而AspectJ在程序运行期是不会做任何事情的,因为类和切面是直接编译在一起的,这种方式称为静态代理。

  1. 连接点 Joinpoints
  • springAOP 只支持方法执行连接点
  • ASpectJ 还支持 方法调用,构造方法调用,属性引用,静态初始化、其他切面的通知等 作为连接点。 功能相当强大。

  1. 性能

编译期织入要比运行期织入快很多。因此aspectJ 的运行速度要快于springAOP

8.2、Aspect切点表达式语法
  1. Aspect语法: 类型匹配:包名.类名
    例如: within(com.biz…* )


			
			




			
		
  1. execution 语法:方法匹配:修饰符 返回值 包名.类名.方法名(参数) [throws 异常类]



			
		
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/930224.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号