configuration和component区别
https://blog.csdn.net/long476964/article/details/80626930
从上面链接,可以看到,虽然Component注解也会当做配置类,但是并不会为其生成CGLIB代理Class,所以在生成Driver对象时和生成Car对象时调用car()方法执行了两次new操作,所以是不同的对象。
(1)、此处用component,对sSOInterceptor来说,采用自动注入的方式,那么上图的ssoConfig,userAuthTokenRequest,也会被注入
(2)、此处用component,对sSOInterceptor来说,采用新建的方式,那么上图的ssoConfig,userAuthTokenRequest,就不会被自动注入,全为空
(3)、此处用configuration,对sSOInterceptor来说,采用新建的方式,那么上图的ssoConfig,userAuthTokenRequest,也会被自动注入
(
//(1)在此处的bean,已经实例化成单例了,所以不会再进入到SSOInterceptor类里面进行操作了(此处,实际上应该是对Configuration注解的bean,即使是new,也是同一个对象实例,前提是不设置生命的周期的话)
)
总结:对configuration来说,对new新建也会采用cgLib的方式实现注入。通俗点讲,就是,对congfiguration来说,即使new,也是同一个实例(如果不设置生命周期,即默认是单例的模式)。对component来说,如果使用new进行实例化,那么此对象中的属性不会自动注入,如此文章的第(2)条所描述的。
但无论configuration或者component来说,都可以用@Scope控制bean的生命周期
例如:@Scope(value= WebApplicationContext.SCOPE_REQUEST,proxyMode = ScopedProxyMode.TARGET_CLASS)