单例 bean 存在线程问题,主要是因为当多个线程操作同一个对象的时候,对这个对象的成员变量的
写操作会存在线程安全问题。
常见的有两种解决办法:
在Bean对象中尽量避免定义可变的成员变量(不太现实)。
在类中定义一个ThreadLocal成员变量,将需要的可变成员变量保存在 ThreadLocal 中。
@Autowired为Spring提供的注解,需要导入包
org.springframework.beans.factory.annotation.Autowired;
只按照byType注入。
@Autowired注解是按照类型(byType)装配依赖对象,默认情况下它要求依赖对象必须存在,
如果允许null值,可以设置它的required属性为false。
如果我们想使用按照名称(byName)来装配,可以结合@Qualifier注解一起使用。
@Resource默认按照ByName自动注入,由J2EE提供,需要导入包javax.annotation.Resource。
@Resource有两个重要的属性:name和type,
如果使用name属性,则使用byName的自动注入策略,
而使用type属性时则使用byType自动注入策略。
如果既不制定name也不制定type属性,这时将通过反射机制使用byName自动注入策略。
1.表明当前类是一个配置类,是方法bean的源
3.将@Con?guration配置的AppCon?g由普通类型转变为cglib代理类型,后会生成cglib代理对象,通
过代理对象的方法拦截器,
可以解决AppCon?g内部方法bean之间发生依赖调用的时候从容器中去获取,避免了多例的出现
原文:https://www.cnblogs.com/zrzct/p/14315480.html