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>
运行测试方法,输出结果如下