aspectj

曹工说Spring Boot源码(8)-- Spring解析xml文件,到底从中得到了什么(util命名空间)

橙三吉。 提交于 2020-04-18 08:36:15
写在前面的话 相关背景及资源: 曹工说Spring Boot源码(1)-- Bean Definition到底是什么,附spring思维导图分享 曹工说Spring Boot源码(2)-- Bean Definition到底是什么,咱们对着接口,逐个方法讲解 曹工说Spring Boot源码(3)-- 手动注册Bean Definition不比游戏好玩吗,我们来试一下 曹工说Spring Boot源码(4)-- 我是怎么自定义ApplicationContext,从json文件读取bean definition的? 曹工说Spring Boot源码(5)-- 怎么从properties文件读取bean 曹工说Spring Boot源码(6)-- Spring怎么从xml文件里解析bean的 曹工说Spring Boot源码(7)-- Spring解析xml文件,到底从中得到了什么(上) 工程代码地址 思维导图地址 工程结构图: 概要 先给大家看看spring支持的xml配置,我列了个表格如下: namespace element util constant、property-path、list、set、map、properties context property-placeholder、property-override、annotation-config、component

Spring5源码深度解析(一)之理解Configuration注解

好久不见. 提交于 2020-04-18 04:43:27
代码地址: https://github.com/showkawa/spring-annotation/tree/master/src/main/java/com/brian 1.Spring体系结构 1.1、Spring Core:主要组件是BeanFactory,创建JavaBean的工厂,使用控制反转(IOC) 模式 将应用程序的配置和依赖性规范与实际的应用程序代码分开。 1.2、Spring AOP:集成了面向切面的编程功能(AOP把一个业务流程分成几部分,例如权限检查、业务处理、日志记录,每个部分单独处理,然后把它们组装成完整的业务流程。每个部分被称为切面), 可以将声明性事物管理集成到应用程序中。 1.3、Spring Cntext:一个核心配置文件,为Spring框架提供上下文信息。 1.4、Spring Do:Spring操作数据库的模块。 1.5、Spring ORM:Spring集成了各种orm(object relationship mapping 对象关系映射)框架的模块,集成mybatis 1.6、Spring Web集成各种优秀的web层框架的模块(Struts、Springmvc) 1.7、Spring web MVC:Spring web层框架 2.Configuration注解分析内容(@Configuration,@ComponentScan,

Spring5源码深度分析(二)之理解@Conditional,@Import注解

被刻印的时光 ゝ 提交于 2020-04-18 04:42:47
代码地址: https://github.com/showkawa/spring-annotation/tree/master/src/main/java/com/brian 1.源码分析二主要分析的内容 1.使用@Condition多条件注册bean对象 2.@Import注解快速注入第三方bean对象 3.@EnableXXXX 开启原理 4.基于ImportBeanDefinitionRegistrar注册bean 5.基于FactoryBean注册bean对象 1.使用@Conditional多条件注册bean对象 conditional字面意思条件句,亦即满足某些条件将该类注册到IOC容器的意思 @Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documented public @ interface Conditional { /** * All { @link Condition Conditions} that must { @linkplain Condition#matches match} * in order for the component to be registered. */ Class <? extends Condition

Spring5深度源码分析(三)之AnnotationConfigApplicationContext启动原理分析

落花浮王杯 提交于 2020-04-18 04:05:56
代码地址: https://github.com/showkawa/spring-annotation/tree/master/src/main/java/com/brian AnnotationConfigApplicationContext启动原理分析主要分析下面三点 1.@Qualifier与@Primary注解的使用 2.BeanFactory与ApplicationContext区别 3.AnnotationConfigApplicationContext启动原理分析 1.@Qualifier与@Primary注解的使用 下面是 @Qualifier 和 @Primary注解的官方解释 @ Qualifier This annotation may be used on a field or parameter as a qualifier for candidate beans when autowiring. It may also be used to annotate other custom annotations that can then in turn be used as qualifiers.这个注释可用于作为预备bean的字段或参数,也可以用在其他的自定义注释下 @Qualifier(“XXX”) Spring的Bean注入配置注解

AOP面试知识整理,^_^-包括spring Aop

二次信任 提交于 2020-04-18 01:53:20
讲到java企业级开发框架,就不可避免的讲到 IOC,AOP,MCV   今天面试时被问到AOP,讲的很乱,这里整理笔记,包括AOP,spring-AOP的部分知识,错误的地方请小伙伴指出来. 谈谈你对AOP的理解: AOP概念(Aspect-Oriented Programming): 即面向切面编程,与OOP(Object - Oriented Programming,面向对象编程)相辅相成,AOP的基本单元为Aspect(切面),Struts2 的拦截器设计就是基于AOP的思想。 AOP原理: 大型系统中的 通用的服务型的代码会穿插在各个业务类 ,方法中,随着系统规模的增大,会造成 大量的代码重复 ,,且与核心代码没有太多的关系。 系统中的业务可分为 核心关注点和横切关注点 , 核心关注点是业务处理的主要流程,横切关注点是与核心业务无关的通用业务。如日志权限 等,各个横切点离散的穿插与核心业务中。导致系统中的每一个模块代码都与这些业务具有很强的依赖性,当需要添加横切功能时,需要大幅修改已有的代码。 AOP即解决这个问题, 使用AOP框架,能够将这些影响多个类的通用性服务抽取出来,(即切面) ,并通过 配置的方式明确在那些位置插入这些服务, 系统运行后,AOP框架在指定的时机自动运行这些服务,从而达到核心业务逻辑和服务性逻辑分离的目的,减少了重复代码的

spring AOP

我怕爱的太早我们不能终老 提交于 2020-04-13 16:51:28
【今日推荐】:为什么一到面试就懵逼!>>> 为什么要说动态代理: 动态代理可以实现为对象提供一种代理,以控制这个对象的访问。 我们通常会用到在执行一批操作之前,例如对数据库数据进行增删改,需要保证这一部分操作的完整性,如果出现问题需要回滚到操作之前的状态。而这样的操作在业务上有很多。 最简单粗暴的做法,就是在每一个方法调用之前先加载这一步安全控制方法。 代理模式正是做了这样一件事情,它实现被代理类的接口,并引入被代理类,我们调用UserManagerImpleProxy类来通过代理类实现添加的功能。 /* * 静态代理类 * 实现接口UserManager * 引入UserManagerImpl * */ public class UserManagerImplProxy implements UserManager { private UserManagerImpl userManagerImpl; // 构造方法 public UserManagerImplProxy(UserManagerImpl userManagerImpl) { this.userManagerImpl = userManagerImpl; } // 具体方法 public void addUser(String username, String password) { // 执行检查方法

spring中aop不生效的几种解决办法

余生长醉 提交于 2020-04-07 11:51:05
先看下这个问题的背景:假设有一个spring应用,开发人员希望自定义一个注解@Log,可以加到指定的方法上,实现自动记录日志(入参、出参、响应耗时这些) package com.cnblogs.yjmyzz.springbootdemo.aspect; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface Log { } 然后再写一个Aspect来解析这个注解,对打了Log注解的方法进行增强处理  package com.cnblogs.yjmyzz.springbootdemo.aspect; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org

spring中aop不生效的几种解决办法

倾然丶 夕夏残阳落幕 提交于 2020-04-07 10:10:11
先看下这个问题的背景:假设有一个spring应用,开发人员希望自定义一个注解@Log,可以加到指定的方法上,实现自动记录日志(入参、出参、响应耗时这些) package com.cnblogs.yjmyzz.springbootdemo.aspect; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface Log { } 然后再写一个Aspect来解析这个注解,对打了Log注解的方法进行增强处理  package com.cnblogs.yjmyzz.springbootdemo.aspect; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org

面试刷题30:SpringBean的生命周期?

家住魔仙堡 提交于 2020-04-06 13:29:14
spring是Java软件开发的事实标准。 我是李福春,我在准备面试,今天的问题是:springBean的生命周期是怎样的? 答:spring最基础的能力是IOC(依赖注入),AOP(面向切面编程),ioc改善了模块之间的耦合问题, 依赖注入的方式:set方法,构造方法,成员变量+ @Autowire ;Bean的管理是IOC的主要功能。 bean的生命周期完全由spring容器管理,从属性设置到各种依赖关系的注入,简化了开发人员对bean的生命周期认知; Spring的容器中Bean生命周期如下: 对象创建 1,从xml配置的Bean,@Bean注解,或者Java代码 BeanDefinitionBuilder 中读取Bean的定义,实例化Bean对象; 2,设置Bean的属性; 3,注入Aware的依赖(BeanNameAware,BeanFactoryAware,ApplicationContextAware); 4, 执行通用的方法前置处理,方法: BeanPostProcessor.postProcessorBeforeInitialization() 5, 执行 InitalizingBean.afterPropertiesSet() 方法 6,执行Bean自定义的初始化方法init,或者 @PostConstruct 标注的方法; 7,执行方法

面试刷题30:SpringBean的生命周期?

流过昼夜 提交于 2020-04-05 23:10:04
spring是Java软件开发的事实标准。 我是李福春,我在准备面试,今天的问题是:springBean的生命周期是怎样的? 答:spring最基础的能力是IOC(依赖注入),AOP(面向切面编程),ioc改善了模块之间的耦合问题, 依赖注入的方式:set方法,构造方法,成员变量+ @Autowire ;Bean的管理是IOC的主要功能。 bean的生命周期完全由spring容器管理,从属性设置到各种依赖关系的注入,简化了开发人员对bean的生命周期认知; Spring的容器中Bean生命周期如下: 对象创建 1,从xml配置的Bean,@Bean注解,或者Java代码 BeanDefinitionBuilder 中读取Bean的定义,实例化Bean对象; 2,设置Bean的属性; 3,注入Aware的依赖(BeanNameAware,BeanFactoryAware,ApplicationContextAware); 4, 执行通用的方法前置处理,方法: BeanPostProcessor.postProcessorBeforeInitialization() 5, 执行 InitalizingBean.afterPropertiesSet() 方法 6,执行Bean自定义的初始化方法init,或者 @PostConstruct 标注的方法; 7,执行方法