1.spring-bean的创建方式:
//User.java
public class User { private String Uname; private Integer age; public User() { System.out.println("User对象空参构造...."); } public String getUname() { return Uname; } public void setUname(String uname) { Uname = uname; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }
//UserFactory.java
package com.spring.b_create; import com.spring.bean.User; public class UserFactory { //手动创建 public static User createUser() { System.out.println("静态工厂创建User"); return new User(); } public User createUser2() { System.out.println("实例工厂创建User"); return new User(); } }
1>创建方式一:【空参构造方式】
2>创建方式二:【静态工厂创建方式】
3>创建方式三:【动态工厂创建方式】
测试类代码:
package com.spring.b_create; import org.junit.jupiter.api.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.spring.bean.User; public class Demo1 { //------------------------创建方式一:空参构造------------------ @Test public void fun1() { ApplicationContext ac = new ClassPathXmlApplicationContext("com/spring/b_create/applicationContext.xml"); User user = (User)ac.getBean("t180703_2122"); System.out.println(user); } //-----------------------创建方式二:静态工厂---------------------- @Test public void fun2() { ApplicationContext ac = new ClassPathXmlApplicationContext("com/spring/b_create/applicationContext.xml"); User user = (User)ac.getBean("t180703_2134"); System.out.println(user); } //----------------------创建方式三:动态工厂创建方式-------------------- @Test public void fun3() { ApplicationContext ac = new ClassPathXmlApplicationContext("com/spring/b_create/applicationContext.xml"); User user = (User)ac.getBean("t180703_2140"); System.out.println(user); } }
2.bean元素进阶:
1>scope属性:
singleton(默认值):单例对象,被标识为单例的对象,在spring容器中只存在一个实例。
prototype:多例原型,被标识为多例对象,每次再获得才会被创建,并且每次创建都是新的对象。整合struts2时,ActionBean必须配置配置为多例。
request:web环境下,对象与request的生命周期一致。
session:web环境下,对象与session的生命周期一致。
2>生命周期属性:
配置一个方法作为生命周期初始化方法,spring会在对象创建之后立即调用。
init-method()
配置一个方法作为生命周期的销毁方法,spring容器在关闭前并销毁所有容器对象之前调用。
destroy-method()
配置如下:
<bean name="t180704_1940" class="com/spring/bean/User" init-method="init" destroy-method="destory"></bean>
在//User.java中添加如下代码:
public void init() { System.out.println("我是初始化....................."); } public void destroy() { System.out.println("我是结束....................."); }
3>spring的分模块配置:
<!-- spring模块化配置 --> <import resource="com/spring/c_scope/applicationContext.xml"/>
3.spring属性注入:
1>set方法注入
2>构造函数注入
3>p名称空间注入
4>spel注入
//User.java
package com.spring.bean; /** * 创建一个对象 * @author taoyulong * */ public class User { private String Uname; private Integer age; private Car car; public User(String uname, Integer age, Car car) { System.out.println("(String uname, Integer age, Car car)"); Uname = uname; this.age = age; this.car = car; } public User(Integer age,String uname, Car car) { System.out.println("(String uname, Integer age, Car car)"); Uname = uname; this.age = age; this.car = car; } public User(Integer uname,Integer age, Car car) { System.out.println("Integer uname,Integer age, Car car"); Uname = uname+""; this.age = age; this.car = car; } public Car getCar() { return car; } public void setCar(Car car) { this.car = car; } public User() { System.out.println("User对象空参构造...."); } public String getUname() { return Uname; } public void setUname(String uname) { Uname = uname; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "User [Uname=" + Uname + ", age=" + age + ", car=" + car + "]"; } public void init() { System.out.println("我是初始化....................."); } public void destroy() { System.out.println("我是结束....................."); } }
//Car.java
package com.spring.bean; public class Car { private String name; private String color; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } @Override public String toString() { return "Car [name=" + name + ", color=" + color + "]"; } }
//applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd "> <!-- set方式注入 :--> <bean name="t180704_2030" class="com.spring.bean.User"> <!-- 值类型注入 --> <!-- 给User对象中名为name的属性注入值为 tom --> <property name="Uname" value="tom"></property> <property name="age" value="18"></property> <!-- 引用类型注入 --> <!-- 为Car属性注入下方配置的car对象 --> <property name="car" ref="t180704_2040"></property> </bean> <!-- 将Car对象配置到容器中 --> <bean name="t180704_2040" class="com.spring.bean.Car"> <property name="name" value="玛莎拉蒂"></property> <property name="color" value="蓝色"></property> </bean> <!-- ============================================================== --> <!-- 构造函数注入 --> <!-- index:指定构造器中重载元素的顺序 type:指定传参的类型 --> <bean name="t180704_2050" class="com.spring.bean.User"> <constructor-arg name="uname" value="11" index="0" type="java.lang.Integer"></constructor-arg> <constructor-arg name="age" value="32" index="1"></constructor-arg> <constructor-arg name="car" ref="t180704_2040" index="2"></constructor-arg> </bean> </beans>