Spring之bean

来源:互联网 发布:日本娱乐圈黑料 知乎 编辑:程序博客网 时间:2024/05/29 05:03
1.为什么要配置次bean?
spring为什么能够在众多框架中脱颖而出,主要在于他的轻便性,不需要实现很多接口之类的,但是只要是涉及到复杂业务,总会存在一个类引用另一个类的现象,这样代码会变得很有依耐性,而spring他主要是通过Spring容器来降低代码之间的耦合度
2.如何配置bean?
(1)是通过构造函数来配置:
<constructor-arg value=" "/>:基本的
<constructor-arg ref=" "/>有引用其他类的
(2)是通过静态工厂来配置的:
<bean id = " "  class = " "   factory-method = " "/>
3bean的作用域:
所有的spring bean 默认是单例的,也就是说每次通过getBea()调用时,返回的是bean的同一个实例,那如果是想要获得唯一的bean实例(京东二面有被问到),为了让spring每次请求时都为bean产生一个新的实例,只需要配置Bean的scope属性为prototype例如:
<bean id = "tiv" class = " " scope = "prototype"/>
作用域有如下几种
(1):singleton:在每一个Spring容器中,一个Bean定义一个对象实例(默认)
(2):prototype:允许Bean的定义可以被实例化任意次(每次调用都创建一个实例)
(3)request:在一次http请求中,每个Bean定义对应一个实例,只有在SpringMVC上下文中才有效
(4)session:在一个HttpSession中,每个Bean定义对应一个实例,该作用域仅在基于Web的springMVC上下文张才有效
(5)global-session:在一个全局Http Session中,每一个Bean定义对应一个实例,仅在spring mvc中才有效
4.初始化和销毁bean:(钩子方法)

 eg:

<bean id = " " class = "  "  init-methid = "turnOnLights" destroy-method = "turnOffLights"/>这是为每个bean都设置一个开始方法和结束方法

如果很多bean 都拥有相同的名字和方法则可以在beans元素中设置的default-init-method和default-destroy-method属性

(3)通过注入Bean的属性(也就是通过set方法注入)

eg:

<bean id = " " class =  " " >

<property name = " " value = " "/>字面量

<property name = " " ref = " "/> 引用值


当然也可以有内部bean

<bean id = " " class =  " " >

<property name = " " value = " "/>字面量

<property name = " " rname = " ">

</property>

</bean>

constructor-arg不需要有name属性


Java还自带了很多集合类

<list>:list和set有时候可以混用,list允许重复,而set不可以重复

<set>

<map>

<props>