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

被折叠的 条评论
为什么被折叠?



