Spring练习1教材p248-p249的setter注入和构造器注入

文章通过两个例子展示了Spring框架中如何进行Setter注入和构造器注入。在Setter注入中,配置文件通过<property>标签为UserBean的属性赋值。而在构造器注入中,<constructor-arg>标签用于为构造方法传参,确保对象初始化时属性被正确设置。ManagerServlet类加载配置文件并获取Bean,然后输出用户信息。
摘要由CSDN通过智能技术生成

一、Setter注入

1.创建Dynamic web project,名为11-1,再创建用户的JavaBean,关键代码如下

package com.mr.user;

public class User {
    
    private String name;//用户姓名
    private Integer age;//年龄
    private String sex;//性别

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }
}

2.在Spring的配置文件applicationContext.xml中配置该JavaBean

<?xml version="1.0" encoding="UTF-8"?>
<beans
	xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
	<!-- User Bean -->
	<bean name="user" class="com.mr.user.User">
		<property name="name">
			<value>肖战</value>
		</property>
		<property name="age">
			<value>30</value>
		</property>
		<property name="sex">
			<value>男</value>
		</property>
	</bean>
</beans>

在上面的代码中,<value>标签用于为name属性赋值,他是一个普通的赋值标签。直接在成对的<value>标签中放入数值或其他赋值标签,spring会把这个标签提供的属性值注入指定的JavaBean中

3.创建名为ManagerServlet的Servlet,在doGet()方法中,首先装载配置文件并获取Bean,然后通过Bean对象的相应getXxx()方法获取并输出用户信息

package com.mr.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.mr.user.User;

/**
 * Servlet implementation class ManagerServlet
 */
@WebServlet("/ManagerServlet")
public class ManagerServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public ManagerServlet() {
        super();
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        ApplicationContext factory=new ClassPathXmlApplicationContext("applicationContext.xml"); //装载配置文件
        User user = (User) factory.getBean("user");                                    //获取Bean
        System.out.println("用户姓名——"+user.getName());//输出用户的姓名
        System.out.println("用户年龄——"+user.getAge());//输出用户的年龄
        System.out.println("用户性别——"+user.getSex());//输出用户的性别		
	}

}

4.导入jar包

 

 5.运行结果:

 二、构造器注入

1.创建Dynamic web project,名为11-2,再创建用户的JavaBean,关键代码如下

package com.mr.user;

public class User {
    private String name;							//用户姓名
    private Integer age;							//年龄
    private String sex;								//性别
    //构造方法
    public User(String name,Integer age,String sex){
        this.name=name;
        this.age=age;
        this.sex=sex;
    }
    //输出JavaBean的属性值方法
    public void printInfo(){
        System.out.println("用户姓名——"+name);		//输出用户的姓名
        System.out.println("用户年龄——"+age);			//输出用户的年龄
        System.out.println("用户性别——"+sex);			//输出用户的性别
    }
}

2.在Spring的配置文件applicationContext.xml中通过<constructor-arg>元素为JavaBean属性赋值。

注:(1)容器通过多个<constructor-arg>标签为构造方法传参,如果标签的赋值顺序与构造方法中参数的顺序或类型不同,程序会产生异常。可以使用<constructor-arg>元素的index属性和type属性解决此类问题。

(2)Index属性用于指定当前<constructor-arg>标签为构造方法的哪个参数赋值,Type属性用于指定参数类型,以确定要为构造方法的哪个参数赋值。当需要赋值的属性在构造方法中没有相同的类型时,可以用这个参数。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
	<!-- User Bean -->
	<bean name="user" class="com.mr.user.User">
		<constructor-arg>
			<value>肖战</value>
		</constructor-arg>
		<constructor-arg>
			<value>30</value>
		</constructor-arg>
		<constructor-arg>
			<value>男</value>
		</constructor-arg>
	</bean>

</beans>

3.创建名为ManagerServlet的Servlet,在doGet()方法中,首先装载配置文件并获取Bean,然后通过Bean对象的printinfo()方法获取并输出用户信息

package com.mr.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.mr.user.User;

/**
 * Servlet implementation class ManagerServlet
 */
@WebServlet("/ManagerServlet")
public class ManagerServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public ManagerServlet() {
        super();
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        ApplicationContext factory=new ClassPathXmlApplicationContext("applicationContext.xml"); //装载配置文件
        User user = (User) factory.getBean("user");            				//获取Bean
        user.printInfo();												//输出JavaBean的属性值
	}

}

4.导入jar包

 5.运行结果:

 6:理解:

运行ManagerServlet类,使用printInfo()方法获取JavaBean user类的属性值,然后输出就能得到在成对的<value>中输入的属性值。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值