Spring MVC中,基于XML配置和基于注解的依赖注入实例

一、首先是基于XML配置的依赖注入实例

  在本实例中,Spring MVC并非主要讲解内容,其文件范式不再重复,而有关依赖注入文件包括:接口类car.java,实现了car接口的Taxi,java和Train.java。在User类中,有一个Car对象属性。即此Car即为需要注入的对象。然后是配置的文件,applicationContext.xml,其中包含了Bean的定义。

  下面是各个文件的内容。

1.user,java

package com.zjn.entity;

import java.io.Serializable;
import java.util.Date;

public class User implements Serializable {
	/**
	 * @author zjn
	 */
	private static final long serialVersionUID = 1L;
	private String name; // name
	private String pwd; // pwd
	private Integer age; // age
	
	private String sex;
	
	private Car car;
	
	//全部实现了set和get方法, 以此完成依赖注入(设值注入)
	public String getSex() {
		return sex;
	}

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

	public String getName() {
		return name;
	}

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

	public String getPwd() {
		return pwd;
	}

	public void setPwd(String pwd) {
		this.pwd = pwd;
	}

	public Integer getAge() {
		return age;
	}

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


	public Car getCar() {
		return car;
	}

	public void setCar(Car car) {
		this.car = car;
	}
	
	public void run() {
		String runtype=car.getType();
		System.out.println(runtype);
	}

}

2.接口类Car和它的具体类Taxi和Train。

package com.zjn.entity;

public interface Car {
	public String getType();

}

package com.zjn.entity;

public class Taxi implements Car{

	@Override
	public String getType() {
		// TODO Auto-generated method stub
		return "His car is a taxi!";
	}

}

package com.zjn.entity;

public class Train implements Car {

	@Override
	public String getType() {
		// TODO Auto-generated method stub
		return "Wow!He has a train!";
	}

}

3.下面是配置文件applicationContext.xml

<?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">

	
	<bean id="taxi" class="com.zjn.entity.Taxi">
	</bean>
	<bean id="train" class="com.zjn.entity.Train">
	</bean>
	
	<bean id="user" class="com.zjn.entity.User">
		<property name="name" value="zfh14"/>
		<property name="pwd" value="19961006"/>
		<property name="age" value="12"/>
		<property name="sex" value="B"/>
		
		<property name="car" ref="train"/>
	</bean>
	
	
</beans>

4.然后是调用了User对象的UserController,也就是Spring MVC中的Controller。

package com.zjn.controller;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;

import com.zjn.entity.Taxi;
import com.zjn.entity.Train;
import com.zjn.entity.User;
import com.zjn.form.UserForm;

/**
 * 用户管理
 * 
 * @author zjn
 */
@Controller
public class UserController {
	@RequestMapping("login")
	public String Login(Model model) {
		return "login";
	}

	@RequestMapping("loginTo")
	public String Save(@ModelAttribute("form") UserForm userform, Model model) { // user:视图层传给控制层的表单对象;model:控制层返回给视图层的对象
		System.out.println("the input userform values:"+userform.getName()+","+userform.getSex()+","+userform.getPwd()+","+userform.getAge()+","+userform.getCar());
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext("com/zjn/controller/applicationContext.xml");
		User user = (User) applicationContext.getBean("user");
		user.run();
		System.out.println("the original user values:"+user.getName()+","+user.getSex()+","+user.getPwd()+","+user.getAge()+","+user.getCar());
		
		user.setName(userform.getName());
		user.setAge(userform.getAge());
		user.setSex(userform.getSex());
		user.setPwd(userform.getPwd());
		if(userform.getCar().equals("Taxi")) {
			user.setCar(new Taxi());
		}else if(userform.getCar().equals("Train")) {
			user.setCar(new Train());
		}
		System.out.println("the input user values:"+user.getName()+","+user.getSex()+","+user.getPwd()+","+user.getAge()+","+user.getCar());

		model.addAttribute("user", user);
		return "detail";
	}
}

此处要注意ApplicationContext applicationContext = new ClassPathXmlApplicationContext("com/zjn/controller/applicationContext.xml");这一行中配置文件的地址。。。不知道为什么放在WebContent下识别不了。可能是之前写的地址不对吧。

恩,这样,主要的关于依赖注入的部分就全了。


二、基于注解的依赖注入实例,在上面的基于XMl配置的实例基础上进行修改而成。

  首先,删除applicationContext.xml。然后,因为初次接触的原因,模仿了之前找到的一个例子,添加一个UserService.java接口和一个UserServiceImpl.java类。其中,后一个实体类就是针对依赖注入而设计的。

1.UserService,java

  

package com.zjn.service;

import com.zjn.entity.User;

public interface UserService {
	public User getUser();

}
 UserServiceImpl.java

package com.zjn.service;

import org.springframework.stereotype.Service;

import com.zjn.entity.Train;
import com.zjn.entity.User;

@Service
public class UserServiceImpl implements UserService{
	private User user;

	public UserServiceImpl() {
		user=new User();
		user.setName("zfh");
		user.setAge(22);
		user.setSex("B");
		user.setPwd("123789");
		user.setCar(new Train());
	}
	@Override
	public User getUser() {
		// TODO Auto-generated method stub
		return user;
	}

}
如上,采用构造注入的方式。在下面的UserController类中,控制器每次接受到loginTo请求后,都会去保存表单的内容,将表单内容保存在User类中,而这个User类并不是通过new实现的,而是通过UserService的getUser方法来实现的。

而UserService,也并不需要(或者说不能)进行new UserService()

2.UserController.java

package com.zjn.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;

import com.zjn.entity.Taxi;
import com.zjn.entity.Train;
import com.zjn.entity.User;
import com.zjn.form.UserForm;
import com.zjn.service.UserService;

@Controller
public class UserController {
	@Autowired
	UserService userService;
	
	@RequestMapping("login")
	public String Login(Model model) {
		return "login";
	}

	@RequestMapping("loginTo")
	public String Save(@ModelAttribute("form") UserForm userform, Model model) { // user:视图层传给控制层的表单对象;model:控制层返回给视图层的对象
		System.out.println("the input userform values:"+userform.getName()+","+userform.getSex()+","+userform.getPwd()+","+userform.getAge()+","+userform.getCar());
		
		User user = userService.getUser();
		//
		System.out.println("the original user values:"+user.getName()+","+user.getSex()+","+user.getPwd()+","+user.getAge()+","+user.getCar());
		user.run();
		
		user.setName(userform.getName());
		user.setAge(userform.getAge());
		user.setSex(userform.getSex());
		user.setPwd(userform.getPwd());
		if(userform.getCar().equals("Taxi")) {
			user.setCar(new Taxi());
		}else if(userform.getCar().equals("Train")) {
			user.setCar(new Train());
		}
		System.out.println("the input user values:"+user.getName()+","+user.getSex()+","+user.getPwd()+","+user.getAge()+","+user.getCar());
		user.run();
		
		model.addAttribute("user", user);
		return "detail";
	}
}

然后,因为不存在new UserService的情况,所以,这里的userService是Spring容器自己提供的。故而,需要在配置文件中扫描UserService和UserServiceImpl所在的包。。我是直接扫描了所有的包。。

恩,贴一下springmvc-servlet.xml的配置文件吧。

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns:beans="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd ">
	<mvc:annotation-driven />
	<!-- ①:对web包中的所有类进行扫描,以完成Bean创建和自动依赖注入的功能 -->
	<context:component-scan base-package="com.zjn" />

	<!-- 这两个类用来启动基于Spring MVC的注解功能,将控制器与方法映射加入到容器中 -->
	<beans:bean
		class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />
	<beans:bean
		class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />

	<!-- 这个类用于Spring MVC视图解析 -->
	<beans:bean id="viewResolver"
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<beans:property name="prefix" value="/WEB-INF/pages/" />
		<beans:property name="suffix" value=".jsp" />
	</beans:bean>
	
</beans:beans>


ok!




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值