Spring学习笔记(03-Spring Bean的配置、依赖注入)

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环境

扫描二维码关注公众号,回复: 1534143 查看本文章

            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>

运行测试方法,输出结果如下



猜你喜欢

转载自blog.csdn.net/u012430402/article/details/80543622