一、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>中输入的属性值。