Spring学习3
一、Bean的作用域
- singleton:这将 bean 定义范围限定为每个 Spring IoC 容器的单个实例(默认)。
prototype:这将单个 bean 定义的范围限定为具有任意数量的对象实例。
- request:这将 bean 定义的范围限定为 HTTP 请求。 仅在 Web 感知 Spring ApplicationContext 的上下文中有效。
session:这将 bean 定义范围限定为 HTTP 会话。 仅在 Web 感知 Spring ApplicationContext 的上下文中有效。
1.单例模式(Spring默认机制)
<bean id="user" class="com.rxj.pojo.User" c:name="来一沓Java" c:age="16" scope="singleton"/>
2.原型模式
每次从容器中取对象的时候,都会产生一个新对像!
<bean id="user" class="com.rxj.pojo.User" c:name="来一沓Java" c:age="16" scope="prototype"/>
3.其余的request、session、application,这些只能在web开发中使用!
二、Bean的自动装配
- 自动装配是Spring满足bean依赖的一种方式
- Spring会在上下文中自动寻找,并自动给bean装配属性
1.在xml中显示的配置
2.在Java中显示的配置
3.隐式的自动装配
三、ByName自动装配
<bean id="cat12" class="com.rxj.pojo.Cat"/><bean id="dog34" class="com.rxj.pojo.Dog"/>
<!--
byName:会自动在容器上下文查找,和自己对象set方法后面的值对应的beanid。
byType:会自动在容器上下文查找,和自己对象属性类型相同的beanid。(要保证<bean id="dog34" class="com.rxj.pojo.Dog"/>中的id的值全局唯一)
--><bean id="people" class="com.rxj.pojo.People" autowire="byType"><property name="name" value="来一沓Java"/></bean>
小结
- byName的时候,要保证所有的bean的id唯一,并且这个bean需要和注入的属性的set方法的值一致。
- byType的时候,要保证所有的bean的class唯一,并且这个bean需要和自动给注入的属性的set方法的值一致。
四、注解实现自动装配
Spring是2.5及2.5之后才支持注解的!
要使用注解需要注意事项
- 导入约束
xmlns:context = "http://www.springframework.org/schema/context"
- 配置注解的支持
<?xml version = "1.0" encoding = "UTF-8"?><beans xmlns = "http://www.springframework.org/schema/beans"xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"xmlns:context = "http://www.springframework.org/schema/context"xsi:schemaLocation = "http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><context:annotation-config/></beans>
@Autowired
直接在属性上使用即可,也可以在set方法上使用
@Autowiredprivate Cat cat;@Autowiredprivate Dog dog;
使用Autowired可以不用写set方法,前提是自动装配的属性在IOC容器中存在,且符合名字byName
扩展
@Nullable 属性标记了这个注解,说明这个属性可以为null
@Autowired 后面有一个required,如果它为false,说明这个对象可以为null,否则不允许为null
测试代码
public class People {@Autowired(required = false)private Cat cat;@Autowiredprivate Dog dog;private String name;
}
@Autowired还可以和@Qualifier(value = "xxx")配合使用,当自动装配环境比较复杂的时候!
@Autowired(required = false)@Qualifier(value = "xxx")private Cat cat;