Spring学习之 简介
1、Spring 管理的Bean默认是单例的,使用scope="protoType"则为多实例,但是该Bean对象下的依赖还是单例的。
2、Spring 注入方式:
属性注入:
<property name="age" value="25"></property>
构造方法注入:(顺序+索引)
顺序:<constructor-arg type="int" value="25"></constructor>
索引:<constructor-arg index="0" value="25"></constructor>
非静态工厂方法注入:
<bean id="peopleFactory" classs="com.zhagener.factory.PeopleFactory"></bean>
<bean id="people" factory-bean="peopleFactory" factory-method="creatPeople"></bean>静态工厂方法注入:
<bean id="people" factory-bean="peopleFactory" factory-method="creatPeople"></bean>
泛型依赖注入:
3、Spring 参数注入方式:
基本类型注入:
<property name="age" value="25"></property>
引用类型注入:
<property name="dog" ref="dog_spring_id"></property >
内部Bean注入:
<bean name="people" class="com.zhagener.entity.People"><property name="name" value="zhansan"></property><property name="dog"><bean class="com.zhagener.entity.Dog"><property name="name" value="Tom"></property></bean></property ></bean>null值:
<bean name="people" class="com.zhagener.entity.People"><property name="name" value="zhangsan"></property><property name="dog"><null></null></property>
</bean>级联注入:(级联注入时,Dog对象必须在People类中实例化)
<bean name="people" class="com.zhagener.entity.People"><property name="name" value="zhansan"></property><property name="dog.name" value="Jack2"></property ></bean>
集合注入:
<bean name="people" class="com.zhagener.entity.People"><property name="name" value="zhansan"></property></bean><property name="dog.name" value="Jack2"></property ><property name="hobbies"><list><value>唱歌</value><value>跳舞</value>
</list></property><property name="loves"><set><value>唱歌</value><value>跳舞</value>
</set></property><property name="works"><map><entry><key><value>白天</value></key><value>上班</value></entry><entry><key><value>晚上</value></key><value>睡觉</value></entry></map></property><property name="addresses"><props><prop key="address_1">aaaa</prop><prop key="address_2">bbbb</prop></props></property>
4、Spring 自动装配的三种方式:
default-autowire="byName"default-autowire="byType"default-autowire="constructor"
注意:自动装配机制慎用,它屏蔽了装配细节,容易产生潜在的错误。
5、Spring 方法注入:
每次People是一个实例,每次Dog也是一个实例的实现方法:1、将People类声明为abstract类,将getDog方法声明为abstract方法。2、在bean.xml中配置如下:<lookup-method name="getDog" bean="dog"></lookup-method>
6、Spring 方法替换:
People1 改调用People2的getDog方法
1、People2必须 implements MethodReplacer
2、<
replaced-method
name
="
getDog
"
replacer
="
people2
"
/>
7、Spring Bean之间的关系
继承:
<bean id="abstractpeople" class="com.zhagener.entity.People" abastract="true"><property name="className" value="高三19班"></property><property name="age" value="20"></property></bean>
<bean id="zhansan" parent="abstractPeople"><property name="id" value="1"></property><property name="name" value="zhansan"></property><property name="age" value="30"></property></bean>依赖:
depend-on="bean_spring_id" 先加载所依赖的对象
引用:
<property name="dog" ref="dog_spring_id"></property>
8、bean 作用范围:
singleton 容器中仅有一个Bean实例,Bean以单例的方式存在;
prototype 每次从容器中调用Bean时,都返回一个新的实例;
request 每次HTTP请求都会创建一个新的Bean;
session 同一个HTTP Session共享一个Bean;
global session 同一个全局Session共享一个Bean,一般用于portlet应用环境;
application 同一个Application共享一个Bean;
3、加载Spring
ApplicationContext applicationContext = new ClassPathXmlApplication("beans.xml")
applicationContext.getBean(bean_spring_id);
<entry>
<key><value>白天</value></key>
<value>上班</value>
</entry>