1、bean元素配置,基本属性
bean元素:
<!--
配置bean元素
name:给对象起个名字
class:类的完整路径名
id:唯一 里面不出现特殊字符 当我们使用struts2时会出 现:"/XXXXAction"
name和id没有多大区别,所以我们一般不用id。-->
<bean name="user"class="cn.hd.test.User" id="user"></bean>
2、创建方式
<!--
配置bean元素
scope:(对象的创建方式)
singleton:(单例模式) 在所有的地方创建对象就只有这一个。
prototype:(多例模式) 什么时候用什么时候创建,并且创建的方式每次重新new
request: web环境下,对象的生命周期和request的一样。
session: web环境下,对象的生命周期和session的一样。
-->
<bean name="user" class="cn.hd.test.User" id="user"scope="prototype"></bean>
一般情况下,都使用默认的。
多例模式:在整合struts2的时候action必须使用多例模式。
3、生命周期的方法
在对象创建后,马上就执行一个方法。
在对象销毁前,执行一个方法。
<bean name="user"class="cn.hd.test.User" id="user" scope="prototype"
init-method="init"destroy-method="destory"></bean>
在user类中书写init和destory方法
测试:可以手动的去销毁对象,调用ClassPathXmlApplicationContext的close()
注意:销毁对象,对象必须是单例的,如果是多例的将无法手动销毁。
4、spring创建对象的方式
1.无参的构造函数(重点使用)。
public User() {
System.out.println("调动了无参的构造函数。");
}
2.静态工厂实例化。
配置完配置信息,要创建一个静态工厂类。
bean name="userFactory"class="cn.hd.test.UserFactory"
factory-method="createUser"></bean>
public static User createUser(){
System.out.println("调用了静态工厂创建。");
return new User();
}
3.实例化工厂创建
<bean name="userFactory1"class="cn.hd.test.UserFactory"></bean>
<bean name="user1"factory-bean="userFactory1" factory-method="createUser1"></bean>
public UsercreateUser1(){
System.out.println("实例化工厂创建。");
return new User();
}
5、对象属性的注入
1.set注入(最重要)
基本属性:8大基本类型+String
<!--
给对象下面的某个属性赋值
name:属性
value:值
-->
<bean name="car"class="cn.hd.injection.Car">
<property name="name" value="小电车"></property>
<property name="color" value="花的"></property>
</bean>
引用属性:对象
<bean name="user"class="cn.hd.injection.User">
<!--
给对象下面的某个属性赋值
name:属性
value:值
ref:引用
-->
<property name="name" value="张三"></property>
<property name="age" value="18"></property>
<property name="car" ref="car"></property>
</bean>
2.构造函数注入
<bean name="user1"class="cn.hd.injection.User">
<!--
index:当出现多态时,决定构造函数中属性出现的顺序。
type:当出现多态时,决定构造函数中属性的类型。
-->
<constructor-arg name="name"value="yang" index="0" type="java.lang.String"></constructor-arg>
<constructor-arg name="age"value="18" index="1"></constructor-arg>
<constructor-arg name="address"value="不知道" index="2"></constructor-arg>
<constructor-arg name="car"ref="car" index="3"></constructor-arg>
</bean>
name:给那个属性。 value:具体的值。index:参数的位置。Type:参数的类型。
public User(Stringname, String age, String address, Car car) {
System.out.println("调用了构造函数。");
this.name = name;
this.age = age;
this.address = address;
this.car = car;
}
3.p空间注入(最简单)
1.导入约束
xmlns:p="http://www.springframework.org/schema/p"
http://www.springframework.org/schema/p">
2.配置文件
<bean name="user2"class="cn.hd.injection.User" p:name="杨蛋" p:age="2" p:address="无地址" p:car-ref="car"></bean>
4.spel注入类似与EL和OGNL表达式
<bean name="user3"class="cn.hd.injection.User">
<!--#{user2.name}:将上面一个对象的属性赋值给它-->
<property name="name" value="#{user2.name}"></property>
<property name="car" value="#{car}"></property>
</bean>
模块化
<import resource="applicationContext.xml"></import>
resource:其他配置文件的地址。