Bean的作用域:
作用域的种类:
Singleton(单例):使用Singleton定义的Bean在Spring容器中将只有一个实例,也就是说,无论有多少个Bean引用它,始终将指向同一个对象。这也是Spring容器默认的作用域
prototype(原型):每次通过Spring容器获取的prototype定义的Bean时,容器都将创建一个新的Bean实例。
request:在一次HTTP请求中,容器会返回该Bean的同一个实例,对不同的HTTP请求将会产生一个新的Bean,而且该Bean只在当前HTTPRequest请求中有效
session:在一次HTTP session中,容器会返回该Bean的同一个实例,对不同的HTTP请求将会产生一个新的Bean,而且该Bean只在当前HTTPSession内有效
Bean的装配方式:
- 基于xml的装配
配置文件中信息:
<!-- 通过构造函数注入参数 -->
<!-- <constructor-arg index="0" value="tom" />
<constructor-arg index="1" value="123456" />
<constructor-arg index="2">
<list>
<value>"constructorvalue1"</value>
<value>"constructorvalue1"</value>
</list>
</constructor-arg>
<constructor-arg index="3">
<map>
<entry key="china" value="中国" />
<entry key="USA" value="美国" />
<entry key="US" value="英国" />
</map>
</constructor-arg>
<constructor-arg index="4">
<set>
<value>张志明</value>
<value>郝金涛</value>
<value>汪一轮</value>
</set>
</constructor-arg>
<constructor-arg index="5">
<array>
<value>aaaaaaaa</value>
<value>bbbbbbbb</value>
</array>
</constructor-arg> -->
<!-- 通过setter方法注入参数 -->
<property name="username" value="赵云" />
<property name="password" value="123" />
<property name="list">
<list>
<value>看书</value>
<value>学习</value>
</list>
</property>
<property name="map">
<map>
<entry key="guangshou" value="广州" />
<entry key="shanghai" value="上海" />
<entry key="shenzhen" value="深圳" />
</map>
</property>
<property name="set">
<set>
<value>关羽</value>
<value>张飞</value>
<value>赵云</value>
<value>马超</value>
<value>黄忠</value>
</set>
</property>
<property name="array">
<array>
<value>aaaaaaaa</value>
<value>bbbbbbbb</value>
</array>
</property>
- 基于Annotation的装配
在Spring中,使用xml文件完全可以实现Bean的装配工作,但如果应用中有很多Bean时,会导致xml配置文件过于臃肿,给后续工作带来维护问题,此时提供了注解技术
@Component:可以使用此注解描述Spring中的Bean,但它是一个泛化概念,仅仅表示一个组件Bean,并且可以作用在任何层次。使用时将该注解直接写在该类上即可。
@Repository:用于将数据访问层(DAO层)的类标识为Spring中的Bean,其功能与Component相同。
@Service:用于业务层(Service层),用于将业务层的类标识为Spring中的Bean,其功能与Component相同。
@Autowired:用于对Bean的属性变量、属性的setter方法及构造方法进行标注,配合对应的注解处理器完成Bean的自动配置工作。默认按照Bean的类型进行装配。
@Resource:与@Autowired作用相同, 区别在于:@Aautowired默认按照Bean类型装配,而@Resource默认按照Bean的实例名称进行装配
@Qualifier:与Autowired配合使用,会将默认的按Bean类型进行装配,修改为按Bean的实例名称进行装配,Bean的实例名称有@Qualifier注解的参数指定。
代码实例:
- 创建一个工程建包建类
- 编写配置文件
- 注解
给DAO层加注解
给Service层加注解
- 编写测试类
- 运行结果