1.Spring Bean的作用
用于描述需要Spring容器管理的对象
2.Spring Bean的属性
a)name属性:给要被spring容器管理的对象起个名字
b)id属性:同name属性一样,但是要唯一
c)class属性:被管理对象的完整类名
d)scope属性:设置bean的作用域,取值有如下几个
singleton:默认值,单例,在spring容器中只存在一个实例。
prototype:原型类型,创建容器的时候并没有实例化对象,而是获取bean的时候才会去创建一个对象,
而且我们每次获取到的对象都不是同一个对象。
request:每次HTTP请求都会创建一个新的Bean,该作用域仅适用于WebApplicationContext环境
session:同一个HTTP Session共享一个Bean,不同Session使用不同的Bean,仅适用于
WebApplicationContext环境
global-session:一般用于Portlet应用环境,该作用于仅适用于WebApplicationContext环境
e)init-method:配置一个初始化方法,spring容器创建对象后会立即调用
f)destroy-method:配置一个销毁方法,spring容器在关闭并销毁对象之前调用
3.依赖注入方式一
spring配置文件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" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd "> <!-- 使用property元素注入 name属性:对应对象的属性名称 value属性:对应要注入的值 --> <bean name="user" class="com.xiao.pojo.User" > <property name="id" value="1"></property> <property name="username" value="xiaoxiao"></property> <property name="password" value="123456"></property> </bean> </beans>
测试类
import com.xiao.pojo.User; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; /** * @Author 笑笑 * @Date 21:09 2018/05/31 */ public class SpringTest_01 { @Test public void test(){ //创建容器对象 ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); //从容器中获取user对象 User user = (User) ac.getBean("user"); //输出user对象 System.out.println(user); } }
输出结果如下
4.依赖注入方式二(构造函数注入)
首先在User类中添加构造函数
package com.xiao.pojo; /** * @Author 笑笑 * @Date 21:01 2018/05/31 */ public class User { private int id; private String username; private String password; //空参构造 public User() { } //有参构造 public User(int id, String username, String password) { this.id = id; this.username = username; this.password = password; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String toString() { return "User{" + "id=" + id + ", username='" + username + '\'' + ", password='" + password + '\'' + '}'; } }
在spring配置文件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" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd "> <!-- 使用constructor-arg元素 name属性: 对应对象的属性名称 value属性:对应要注入对象属性中的值 index属性:对应该属性在构造函数的参数列表中的索引,从0开始 type属性: 对应该属性在构造函数的参数列表中的数据类型 --> <bean name="user" class="com.xiao.pojo.User" > <constructor-arg name="id" value="2" index="0" type="int"></constructor-arg> <constructor-arg name="username" value="xiaoxiao2" index="1" type="java.lang.String"></constructor-arg> <constructor-arg name="password" value="123456" index="2" type="java.lang.String"></constructor-arg> </bean> </beans>
运行测试方法,输出结果如下
5.依赖注入方式三(p名称空间注入)
首先在spring的核心配置文件中导入p命名空间
xmlns:p="http://www.springframework.org/schema/p"
然后再配置文件使用p名称空间注入
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd "> <!-- 使用p名称空间注入 --> <bean name="user" class="com.xiao.pojo.User" p:id="3" p:username="xiaoxiao3" p:password="123456"></bean> </beans>
运行测试方法,结果如下
6.依赖注入方式四(使用SPEL表达式注入)
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd "> <!-- 使用SPEL表达式注入,可以直接注入值,也可以使用其他对象的值来注入 --> <bean name="user" class="com.xiao.pojo.User"> <property name="id" value="#{user2.id}"></property> <property name="username" value="#{'xiaoxiao4'}"></property> <property name="password" value="#{'123456'}"></property> </bean> <bean name="user2" class="com.xiao.pojo.User"> <property name="id" value="4"></property> </bean> </beans>
运行测试方法,输出结果如下