spring bean
2020-12-13 04:05
标签:this spec des enc intro ssi 构造 不同 依赖 (参考内容) Singleton 单例 在Spring IOC 容器仅存在一个Bean实例,Bean以单例方式存在,这个是默认值。 bean对象无外乎是在以下两个时刻进行实例化的: 调用getBean()方法时。 bean的作用域为singleton时,bean对象是在Spring容器启动时就进行创建。 bean的作用域为prototype时,bean对象并不会在Spring容器启动时就进行创建,bean对象将会在调用getBean()方法时进行创建。 将会在bean初始化和销毁的时候,执行bean内的方法。 @Autowired默认按类型装配,@Resource默认按名称装配,当找不到与名称匹配的bean才会按类型装配 @Autowired注解是按类型装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它的required属性为false。如: required=true代表字段personDao必须要注入值,也即是说在Spring容器中根据类型找不到对应的bean,那就会报异常; 依赖注入——自动装配依赖对象 autowire属性取值如下: @Resource默认按名称装配 注意:如果没有指定name属性,并且按照默认的名称仍然找不到依赖对象时, @Resource注解会回退到按类型装配。但一旦指定了name属性,就只能按名称装配了。 @Resource装配顺序 举例如下: spring bean 标签:this spec des enc intro ssi 构造 不同 依赖 原文地址:https://www.cnblogs.com/cuiyf/p/11104006.html
Bean的作用域
prototype 原型 每次从容器调用bean时,都会返回一个新的实例,也就是每次调用getBean()时都会实例化一个新的bean。
request 每次HTTP请求都会创建一个新的Bean,该作用于仅适用于web环境
session 每个HTTP Session共享一个Bean,不同的Session使用不同的Bean,同样只适用于web环境。
Global Session 一般作用于Portlet应用环境,只作用于Web环境。
五种作用域中,其中request、session、global session三种作用域仅适用于web环境Bean初始化
Spring容器启动时。
但我们也可以指定bean节点的lazy-init=“true”来延迟初始化bean,这时候,只有第一次获取bean会才初始化bean。
如果想对所有bean都应用延迟初始化,可以在根节点beans设置default-lazy-init=“true”,如下:
初始化方法和销毁方法
试着思考这样一个问题:bean对象到底是什么时候销毁的呢?答案是:如果没有人为地删除它,默认该bean一直在Spring容器中,也就是说随着Spring容器的关闭,该bean才会被销毁。Autowire Resource 比较
@Autowired + @Qualifier("...") = @Resource(name="...")@Autowired(required=true) @Qualifier("personDaoxxxx") private PersonDao personDao;
required=false意味着在Spring容器中根据类型找不到对应的的bean,就会把该字段设为null。
@Resource(name="personDaoBean")
private PersonDao personDao; // 用于字段上
@Resource
public void setPersonDao(PersonDao personDao) { // 用于属性的setter方法上
this.personDao = personDao;
}
1. 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常
2. 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常
3. 如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常
4. 如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配;@Resource
private PersonDao personDao;