bean配置

spring bean中属性解释:

<bean abstract="true" autowire-candidate="default" autowire="default" class="" depends-on="" destroy-method="" factory-bean="" factory-method="" id=" " init-method="" lazy-init="default" name="" parent="" primary="true" scope=""></bean>

abstract:

1、通过<bean>标签定义公共的属性,指定abstract=true,具有相同属性的类在<bean>标签中指定其parent属性;(最好和parent属性一起使用)

例子代码:

Bean1.java

public class Bean1 { 
    private int id;   
    private String name; 
    private String password;

Bean2.java

public class Bean2 { 
    private int id;   
    private String name; 
    private String loginpass;

applicationContext.xml:

   <bean id="beanAbstract" abstract="true">
        <property name="id" value="1"/>
        <property name="name" value="Jack"/>
   </bean>            
   <bean id="bean3" class="spring.Bean1" parent="beanAbstract">
        <!-- 可以覆盖父类赋予的值 -->
        <property name="name" value="Tom"/>
        <property name="password" value="123"/>
   </bean>
   <bean id="bean4" class="spring.Bean2"
parent="beanAbstract">
        <property name="loginpass" value="123"/>
   </bean>

2、字面意思:此bean不能被实例化

autowire-candidate:

1、作用是为了避免1个接口,2个实现类自动注入时,其中一个设置此属性为fasle表示不注入,即autowire-candidate属性设置为false时,容器在查找自动装配对象时,将不考虑该bean,即它不会被考虑作为其它bean自动装配的候选者,但是该bean本身还是可以使用自动装配来注入其它bean的

autowire:

当我们要往一个bean的某个属性里注入另外一个bean,我们会使用<property> + <ref/>标签的形式。但是对于大型项目,假设有一个bean A被多个bean引用注入,如果Aid因为某种原因修改了,那么所有引用了Abean<ref/>标签内容都得修改,这时候如果使用autowire="byType",那么引用了Abean就完全不用修改了

autowire属性有5种模式,如下表:

模式

说明

no

(默认)不采用autowire机制.。这种情况,当我们需要使用依赖注入,只能用<ref/>标签。

byName

通过属性的名称自动装配(注入)。Spring会在容器中查找名称与bean属性名称一致的bean,并自动注入到bean属性中。当然bean的属性需要有setter方法。例如:bean A有个属性mastermastersetter方法就是setMasterA设置了autowire="byName",那么Spring就会在容器中查找名为masterbean通过setMaster方法注入到A中。

byType

通过类型自动装配(注入)。Spring会在容器中查找类(Class)与bean属性类一致的bean,并自动注入到bean属性中,如果容器中包含多个这个类型的beanSpring将抛出异常。如果没有找到这个类型的bean,那么注入动作将不会执行。

constructor

类似于byType,但是是通过构造函数的参数类型来匹配。假设bean A有构造函数A(B b,   C c),那么Spring会在容器中查找类型为BCbean通过构造函数A(B b, C c)注入到A中。与byType一样,如果存在多个bean类型为B或者C,则会抛出异常。但时与byType不同的是,如果在容器中找不到匹配的类的bean,将抛出异常,因为Spring无法调用构造函数实例化这个bean

default

采用父级标签(即beans的default-autowire属性)的配置。


class:

类路径

depends-on:

<!-- redis配置 -->
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
    <property name="maxActive" value="20" /> 
    <property name="maxIdle" value="10" /> 
    <property name="maxWait" value="1000" />  
    <property name="testOnBorrow" value="true" />
</bean>
<!-- jedis pool配置 -->
<bean id="jedisPool" class="redis.clients.jedis.JedisPool" destroy-method="destroy" depends-on="jedisPoolConfig">
    <constructor-arg ref="jedisPoolConfig" />  
    <constructor-arg value="127.0.0.1" />  
    <constructor-arg type="int" value="6379" />  
</bean>

depends-on 用来指定Bean初始化及销毁时的顺序。如上面jedis pool定义的depends-on = "jedisPoolConfig",这意味着Spring总会保证jedisPoolConfig在jedisPool之前实例化,总是在jedisPool之后再销毁。

destory-method:

此bean被销毁时调用的方法。

factory-bean:

使用这种方式不能指定class属性,此时必须使用factory-bean属性来指定工厂Bean,factory-method属性指定实例化Bean的方法,而且使用实例工厂方法允许指定方法参数,方式和使用构造器方式一样,配置如下: 
Java代码如下

public class BeanFactory {    
    //实例工厂方法    
       public Bean newInstance() {    
              //返回需要的Bean实例    
           return new Bean();    
    }    
}  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

Xml配置如下

<!--配置工厂-->
<bean id="factorybean" class="spring_1.FactoryBean"></bean>

<bean id="factory" factory-bean="factorybean" factory-method="newInstance"></bean>

factory-method:

参考factory-bean

id:

唯一标识

init-method:

此bean被实例化的时候调用的方法。

lazy-init:

注:lazy-init 设置只对scop属性为singleton的bean起作用

默认为false,即pring启动时,立刻进行实例化。(注意前提:singleton)

为true时,则为懒加载,即第一次调用getBean时实例化。

< beans  default-lazy-init ="true" >
  .......  
</beans>
注意:此配置能加快项目启动时间(又不是加快运行时速度,启动速度快慢没有什么太大作用)

name:

bean名称,可以设置多个,以逗号分割。

parent:

必要条件:1、子bean必须与父bean保持兼容,也就是说子bean中必须有父bean定义的所有属性。

                2、父bean必须是抽象bean或者定义lazy-init=true也就是不让bean工厂实例化该bean

注:好多人将parent指向的类说是子类继承了父类,其实说法不正确,正确的说法应该是子bean父bean而不是子类父类,因为如果子bean指定的类已经继承了其他的类,那么在这里一样可以有一个父bean,(如果真像大家说的那样那不成多重继承了吗)

primary:

设置bean被自动装配时的优先级,有优先级的优先装配,如果1个接口的多个bean都设置优先级的话参照@Qualifier设置id方式消除歧义。

scope:

可以设置是单例还是多例(主要)


水平有限,错误的地方麻烦指出来,其中例子之类参考有其它文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值