当在类上写了一个@Slf4j注解后,类中为何就有了一个log对象?源码是怎么实现的

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当在类上写了一个@Slf4j注解后,类中为何就有了一个log对象?源码是怎么实现的相关的知识,希望对你有一定的参考价值。

参考技术A

这个实现,要分以下几个步骤。

    你要知道:@(注解)

    你要知道:代理

知道这两个,大致的思路就会有了。java代码运行到main方法,会扫描所有的类。通过反射查询到【有@slf4j的类】。然后通过代理,来增强有【有@slf4j的类】(即,在代理类中,创建log对象)

本回答被提问者采纳

关于SpringBoot中左侧边栏各图标的含义

@ComponentScan和@SpringBootApplication使用后都会出现这个图标,而@SpringBootApplication注解之所以会出现这个图标是因为在该注解内使用到了@ComponentScan注解,表示进行了组件扫描。例如:

 

当在类上使用@Controller、@Service、@Repository、@Component、@RestController注解时都会出现此图标,表示该类作为Bean组件同时也会注册到Spring的容器中。

注意,即使不使用如上注解,当通过其他方式如@Bean注解或xml文件配置的方式将类注入到Spring容器中,也会出现这个图标

 

当使用@Configuration注解声明该类是一个配置类后,也会出现该图标。我们看到在类上使用了@SpringBootApplication注解后也会出现该图标,如下:

那是因为@SpringBootApplication注解中用到了@SpringBootConfiguration注解

而@SpringBoootConfiguration注解中用到了@Configuration注解,所以也会出现该图标

我们可以看到这个图标其实和上面使用了@Component注解的图标类似,因为在类上使用了该注解后,该类也会被声明成为Bean组件。

 

这两个图标是一对,前者表示在配置类中声明了Bean,往容器中装入了组件,用在方法上,一般使用了@Bean注解就会出现该图标。

可以点击该图标跳转到注入了该组件的位置,也就是第二个图标

一般而言使用了@Autowired和@Resource注解就会出现该图标。

但需要注意,如果注入的组件从来没有被使用过,那么点击没有任何效果,只会给出提示

以上是关于当在类上写了一个@Slf4j注解后,类中为何就有了一个log对象?源码是怎么实现的的主要内容,如果未能解决你的问题,请参考以下文章

20170818 - 今日技能封装 - Q

@Slf4j注解的使用

@RequestMapping @ResponseBody 和 @RequestBody 注解的用法与区别

浅谈@RequestMapping @ResponseBody 和 @RequestBody 注解的用法与区别

从接口/类上扫描注解的工具类

利用Cglib实现AOP