属性:
<bean
id="beanId"
name="beanName"
class="beanClass"
parent="parentBean"
abstract="true | false"
singleton="true | false"
lazy-init="true | false | default"
autowire="byName | byType | constructor | autodetect | default"
dependency-check = "none | objects | simple | all | default"
depends-on="dependsOnBean"
init-method="method"
destroy-method="method"
factory-method="method"
factory-bean="bean">
</bean>
1.parent
表示该Bean为子Bean,其值指向父Bean,重用父Bean已实现的依赖,如果有很多继承同一个父类的Bean,那么在配置文件中实例那些Bean时候可以省略掉父类已经注入的属性,bean定义继承父bean定义,它可以覆盖父bean的一些值。
<bean id="carnetMgr" parent="txProxyTemplate">
<property name="target">
<bean class="ecustoms.carnet.app.biz.CarnetMgr">
<property name="extensionHistoryDAO" ref="extensionHistoryDAO" />
<property name="stockTransactionDAO" ref="stockTransactionDAO" />
<property name="carnetDAO" ref="carnetDAO" />
</bean>
</property>
</bean>
2.list, set, map和props元素
分别用来设置类型为List,Set,Map和Propertis的属性值。分别用来为bean传入集合值。
<bean id="chinese" class="Chinese">
<property name="friends">
<list>
<value>张三</value>
<value>李四</value>
<ref>beanID</ref>
<bean id="" class=""/>
</list>
</property>
<property name="score">
<map>
<entry key="数学">
<value>60</value>
</entry>
<entry key="英语">
<value>70</value>
</entry>
</map>
</property>
<property name="basicInfo">
<props>
<prop key="身高">165</prop>
<prop key="体重">45kg</prop>
</props>
</property>
<property name="interest">
<set>
<value>唱歌</value>
<value>跳舞</value>
</set>
</property>
</bean>
对应的java代码如下:
public class Chinese implements People {
private List friends = new ArrayList();
private Map score = new HashMap();
private Properties basicInfo = new Properties();
private Set interest = new HashSet();
}
3.id
Bean的唯一标识名。它必须是合法的XML ID,在整个XML文档中唯一。
4.name
用来为id创建一个或多个别名。它可以是任意的字母符合。多个别名之间用逗号或空格分开。
5.class
用来定义类的全限定名(包名+类名)。只有子类Bean不用定义该属性。
6.abstract(默认为”false”)
用来定义Bean是否为抽象Bean。它表示这个Bean将不会被实例化,一般用于父类Bean,因为父类Bean主要是供子类Bean继承使用。ture表示抽象Bean,ApplicationContext预初始化时忽略所有抽象Bean定义
7.singleton(默认为“true”)
定义Bean是否是Singleton(单例)。如果设为“true”,则在BeanFactory作用范围内,只维护此Bean的一个实例。如果设为“flase”,Bean将是Prototype(原型)状态,BeanFactory将为每次Bean请求创建一个新的Bean实例。
8.lazy-init(默认为“default”)
用来定义这个Bean是否实现懒初始化。如果为“true”,它将在BeanFactory启动时初始化所有的Singleton Bean。反之,如果为“false”,它只在Bean请求时才开始创建Singleton Bean。
9.autowire(自动装配,默认为“default”)
它定义了Bean的自动装载方式。
1、“no”:不使用自动装配功能。
2、“byName”:通过Bean的属性名实现自动装配,根据Bean定义时的“id"属性上指定的别名与Setter名称是否一致进行自动装配。
3、“byType”:通过Bean的类型实现自动装配,根据PoJo的setXXX()方法所接受的类型判断bean定义文件是否定义有类似的类型对象进行自动装配。
4、“constructor”:类似于byType,但它是用于构造函数的参数的自动组装,Spring容器比对容器中的Bean实例类型及相关的构造方法上的参数类型是否符合进行自动装配。
5、“autodetect”:通过Bean类的反省机制(introspection)决定是使用“constructor”还是使用“byType”,先进行constructor自动装配,若缺省,则进行byType自动装配。
10.dependency-check(依赖检查,默认为“default”)
它用来确保Bean组件通过JavaBean描述的所以依赖关系都得到满足。在与自动装配功能一起使用时,它特别有用。
1、 none:不进行依赖检查。
2、 objects:只做对象间依赖的检查。
3、 simple:只做原始类型和String类型依赖的检查
4、 all:对所有类型的依赖进行检查。它包括了前面的objects和simple。
11.depends-on(依赖对象)
这个Bean在初始化时依赖的对象,这个对象会在这个Bean初始化之前创建。若A depends-on B 意思是实例化A之前必须先实例化B,但A不需要持有B的实例
12.init-method
用来定义Bean的初始化方法,它会在 BeanFactory创建JavaBean实例和属性set注入之后调用。它必须是一个无参数的方法一般用于一些资源的初始化工作。
13.destroy-method
用来定义Bean的销毁方法,它在BeanFactory关闭时调用。同样,它也必须是一个无参数的方法。它只能应用于singleton Bean。
14.factory-method
定义创建该Bean对象的工厂方法。它用于下面的“factory-bean”,表示这个Bean是通过工厂方法创建。此时,“class”属性失效。若是class属性指向工厂类,该工厂类包含的工厂方法须是static
15.factory-bean
定义创建该Bean对象的工厂类。如果使用了“factory-bean”则“class”属性失效。factory-bean属性必须指定一个bean的名字,这个bean一定要在当前的bean工厂或者父bean工厂中,并包含工厂方法。而工厂方法本身通过factory-method属性设置。
@Component:标注一个普通的Spring Bean类
@Controller:标注一个控制器组件类
@Service:标注一个业务逻辑组件类
@Repository:标注一个DAO组件类
约定只是将Bean类首字母改为小写,其他部分不变
@Scope指定作用域
@Resource指定配置依赖
@Autowired自动装配,默认byType.一个实例里面配置一个Field,若多个就要用Field[]数组,如果配置集合Field一定要用泛型
@Qualifier精确的自动装配,byName