spring--bean的作用域和自动依赖

本文详细解读了Spring中单例模式与原型模式的区别,以及自动装配的byName和byType两种方式,并强调了在不同场景下的选择。

1.单例模式(spring默认机制): 一个bean在容器中只创建一个对象,get到的都指向这一个对象单线程使用这个

<bean id="user" class="com.yf.pojo.User" p:name="yf" p:age="20" scope="singleton"/>

2.原型模式:从容器中拿到的对象都不是同一个,一个bean在容器中可以创建多个对象。多线程使用这个

<bean id="user2" class="com.yf.pojo.User" c:name="yf2" c:age="21" scope="prototype"/>

3.其余的request、session、application只有在web应用中才会使用到!

尽量使用单例模式,这毕竟是人家默认的方式。但是多线程的情况下,单例模式可能会导致数据不一致的问题。视情况而定。

bean的自动装配

自动装配是spring满足bean依赖的一种方式。

spring会在上下文中自动寻找,并自动给bean装配属性。

spring中有三种装配方式

1.xml中显示的装配

2.java中显示装配

3.隐式自动装配bean

测试类

public class People {
    private Cat cat;
    private Dog dog;
    private String name;

ByName方式:

byName 会自动在容器上下文中查找,和自己对象set方法后面的值对应的beanid
例如:people的set方法
public void setDog(Dog dog) {
this.dog = dog;
}
这样就会在容器中寻找id为dog的bean对象。
<bean id="people" class="com.yf.pojo.People" autowire="byName">
                <property name="name" value="yf"/>
        </bean>

ByType方式:

byType自动在容器上下文中寻找,和自己对象set方法中参数类型一致的bean对象

但是要注意的就是在使用byType的时候,那个类型的bean对象只能有一个,如果存在多个就会报错,因为不知道应该自动选取哪个bean对象。

通过bytype的方式自动匹配甚至匹配的bean对象可以没有id,这不影响,因为我只看类型。

<bean id="people" class="com.yf.pojo.People" autowire="byType">
                <property name="name" value="yf"/>
        </bean>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值