尚硅谷Spring注解驱动教程(雷丰阳源码级讲解)

01注解驱动开发

在这里插入图片描述

p02 @Configuration&@Bean给容器添加组件

创建个maven项目
在这里插入图片描述

xml以前的写法

实体类
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

配置类写法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

p03 组件注册@ComponentScan 自动扫描组件

以前xml配置组件扫描
在这里插入图片描述
配置类配置组件扫描
在这里插入图片描述
@configuration也是一个component
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

p04 组件注册 自定义TypeFilter指定过滤规则

在这里插入图片描述
自定义扫描规则
在这里插入图片描述
在这里插入图片描述会扫描当前包下所有的类,matcn 方法返回为true的就会加入容器
例如
在这里插入图片描述

p 08 @import给容器快速导入一个组件

在这里插入图片描述
在这里插入图片描述

p09 @import使用importSelector

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

使用@import直接就将bule加入bean容器了
在这里插入图片描述
实现了importSelector的类会把方法中返回的类red放入容器
在这里插入图片描述
在这里插入图片描述

p10 @import使用之importBeanDefinitionRegistar

在这里插入图片描述
在这里插入图片描述

自己指定创建bean rainbow
在这里插入图片描述

p11 使用FactoryBean注册组件

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
从容器里拿这个colorFactoryBean,只会拿到他创建的color对象
在这里插入图片描述
如果想拿到原本的colorFactoryBean对象,需要加前缀**&**

p12 生命周期 @Bean指定初始化和销毁方法

生命周期:bean创建-初始化-销毁

xml定义 初始化方法和销毁方法
在这里插入图片描述
注解类型 初始化方法和销毁方法
在这里插入图片描述
在这里插入图片描述
默认单例模式下 创建容器的时候,会直接创建bean对象,并且调用init初始化方法
在这里插入图片描述
关闭容器,对象销毁
在这里插入图片描述
在这里插入图片描述
多实例prototype情况下,使用该对象的时候,才会调用 bean的构造方法和初始化方法,
并且,在关闭容器的时候,不会调用该bean的destory方法

在这里插入图片描述

p13 生命周期 initializingBean和DisposableBean

另外一种初始化方法和销毁方法 实现接口
在这里插入图片描述
在这里插入图片描述

p14 生命周期 @PostConstruct&@PreDestroy

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

p15 生命周期-BeanPostProcessor 后置处理器

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

p16 BeanPostProcessor原理

从源码可以看到 在初始化之前和之后,会调用BeanPostProcessor相关前置后置方法
在这里插入图片描述

p17 生命周期 BeanPostProcessor在Spring底层的使用

在这里插入图片描述

1

在这里插入图片描述
bean后置处理器有一个接口实现类
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2

在这里插入图片描述
在这里插入图片描述

3

在这里插入图片描述

p18 @value属性赋值

在这里插入图片描述

p19 @PropertySource加载外部配置文件

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
另外 通过容器获取环境,环境也可以获取配置文件中的值
在这里插入图片描述

p20 自动装配 @Autowire&@Qualifier&@Primary

@autowire根据类型注入
在这里插入图片描述
结合@qualifier使用 指定名称
在这里插入图片描述
@autowire非必需注入
在这里插入图片描述
@Primary 首选bean
在这里插入图片描述

p21 自动装配@Resource @Inject

在这里插入图片描述

在这里插入图片描述

p22 自动装配-方法 构造器位置的自动装配

在这里插入图片描述

@autowire使用在方法上
在这里插入图片描述
@autowire标在构造器上
在这里插入图片描述
放在构造器的参数上,效果也是一样的
在这里插入图片描述

@autowire放在@bean的方法参数旁边,这里省略不写
在这里插入图片描述

p23 自动装配Aware注入Spring底层组件&原理

在这里插入图片描述

实现各种aware接口
在这里插入图片描述
在这里插入图片描述

p24-25@profile环境搭建

@value其实也可以用在方法参数上 直接获取配置
在这里插入图片描述

模拟多环境数据源的配置,配置多个数据源bean,
在这里插入图片描述

使用虚拟机命令行参数

test环境
在这里插入图片描述
切换dev环境的bean
在这里插入图片描述

代码的方式激活某种环境

使用无参构造获取容器,容器获取environment设置激活环境
在这里插入图片描述
@Profile也可以使用在类上面,只有当环境为此模式下才会加载这个类
在这里插入图片描述

p26 ioc 小结

p27 AOP AOP功能测试

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
通配符写法 所有方法 任意个参数
在这里插入图片描述
抽取切点表达式
在这里插入图片描述
别忘了 给当前切面类加上注解
在这里插入图片描述
如果有配置文件,可以使用这个标签,开启基于注解版的切面功能
在这里插入图片描述
但是现在全部都使用注解,所以使用@EnableAspeceAutoProxy
在这里插入图片描述
总结
在这里插入图片描述
业务类

package com.atguigu.aop;

public class MathCalculator {
	
	public int div(int i,int j){
		System.out.println("MathCalculator...div...");
		return i/j;	
	}

}

切面类

/**
 * 切面类
 * @author lfy
 * 
 * @Aspect: 告诉Spring当前类是一个切面类
 *
 */
@Aspect
public class LogAspects {
	
	//抽取公共的切入点表达式
	//1、本类引用
	//2、其他的切面引用
	@Pointcut("execution(public int com.atguigu.aop.MathCalculator.*(..))")
	public void pointCut(){};
	
	//@Before在目标方法之前切入;切入点表达式(指定在哪个方法切入)
	@Before("pointCut()")
	public void logStart(JoinPoint joinPoint){
		Object[] args = joinPoint.getArgs();
		//joinPoint.getSignature().getName()获取方法
		System.out.println(""+joinPoint.getSignature().getName()+"运行。。。@Before:参数列表是:{"+Arrays.asList(args)+"}");
	}
	
	@After("com.atguigu.aop.LogAspects.pointCut()")
	public void logEnd(JoinPoint joinPoint){
		System.out.println(""+joinPoint.getSignature().getName()+"结束。。。@After");
	}
	
	//JoinPoint一定要出现在参数表的第一位
	@AfterReturning(value="pointCut()",returning="result")
	public void logReturn(JoinPoint joinPoint,Object result){
		System.out.println(""+joinPoint.getSignature().getName()+"正常返回。。。@AfterReturning:运行结果:{"+result+"}");
	}
	
	@AfterThrowing(value="pointCut()",throwing="exception")
	public void logException(JoinPoint joinPoint,Exception exception){
		System.out.println(""+joinPoint.getSignature().getName()+"异常。。。异常信息:{"+exception+"}");
	}

}

配置类

@EnableAspectJAutoProxy
@Configuration
public class MainConfigOfAOP {
	 
	//业务逻辑类加入容器中
	@Bean
	public MathCalculator calculator(){
		return new MathCalculator();
	}

	//切面类加入到容器中
	@Bean
	public LogAspects logAspects(){
		return new LogAspects();
	}
}

p28 AOP原理 @EnableAspectJAutoProxy

在这里插入图片描述

p29 源码分析 AnnotationAwareAspectJAutoProxyCreator分析

方法重写情况
在这里插入图片描述

p30 AOP原理 注册AnnotationAwareAspectJAutoProxyCreator

这里暂时看不太懂,有点枯燥,先去看大厂学院的视频了

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值