1. 程式人生 > >Spring MVC中,基於XML配置和基於註解的依賴注入例項

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!

相關推薦

Spring MVC基於XML配置基於註解依賴注入例項

一、首先是基於XML配置的依賴注入例項   在本例項中,Spring MVC並非主要講解內容,其檔案正規化不再重複,而有關依賴注入檔案包括:介面類car.java,實現了car介面的Taxi,java和Train.java。在User類中,有一個Car物件屬性。即此Car即

spring mvc如何在 Java 代碼裏獲取 國際化 內容

source 所在 bundle 註入 pre 定義 pan col void 首先,在Spring的application.xml中定義 <bean id="messageSource" class="org.springframework.context.su

Spring使用Java配置的方式進行依賴註入

context say 介紹 study 推薦 參數 str turn red 之前用spring的時候,只知道使用xml的方式,和使用註解的方式,卻一直不知道在spring中,還可以使用Java類的方式進行配置。使用Java類的方式,就可以取代xml和註解。使用Java配

(親測有效。)Spring MVCController使用service只需使用註解但是普通類獲取 service或 dao 都是null空的。

在springmvc中,controller中可以通過註解 @Autowired 獲取你的service層調方法。但是普通的工具類中呼叫service層。老是報null空指標。用new 物件可以,但是

spring配置xml配置java註解配置對比

雖然spring早就推出java註解的方式配置框架,由於習慣了看xml所以一直沒有去學習,然而最近需要學習springboot,為了平滑過渡,先被迫研究一下註解配置方式。 這裡展示3種spring配置檔案,來對比xml配置和java註解配置的區別,分別是spring\mv

spring專案web.xml的 ContextLoaderListener監聽器的原理

</pre><pre class="java" name="code">建立監聽器和ServletContext的code:</pre><pre class="java" name="code"><context-par

Spring Boot如何擴充套件XML請求響應的支援

開發十年,就只剩下這套架構體系了! >>>   

SpringIoC兩種介面兩種依賴注入方式的比較

spring是一個開源框架,是為了解決企業應用程式開發的複雜性而建立的,為J2EE應用程式開發提供整合的框架。簡單來說,spring是一個輕量級的控制反轉IOC和麵向切面AOP的容器框架。spring框架會對定義在配置檔案中的bean例項自動管理,這個bean也就是Java

spring事務管理基於xml配置完成事務回滾;spring資料庫表中欄位名pojo屬性名不一致時候實現RowMapper介面手動封裝

宣告使用JDK8,spring5.0.7, 測試說明: service 層 宣告介面進行轉賬,從A轉賬B ,然後對AB 進行更新操作,在事務中對find方法開啟 只讀許可權,無法進行更新操作,造成事務回滾進行測試事務; 主要測試方法:* void tra

Spring MVC的WebMvcConfigurerAdapter用法收集(零配置XML配置

clas security net turn 信息 xxx jsonview frame ppi 原理先不了解,只記錄常用方法 用法: @EnableWebMvc 開啟MVC配置,相當於 <?xml version="1.0" encoding="UTF-

spring mvc配置定時任務事務等

定時任務 在spring-mvc的配置檔案中加入 <task:executor id="executor" pool-size="10" queue-capacity="128" /> <task:scheduler id="scheduler" po

Spring MVC使用Swagger生成API文件完整專案示例Demoswagger

轉載自:http://www.360doc.com/content/17/0914/17/16915_687184334.shtml    實際專案中非常需要寫文件,提高Java服務端和Web前端以及移動端的對接效率。   聽說Swagger這

Spring MVC使用Swagger生成API文件完整專案示例Demoswagger-server-api

package cn.fansunion.swagger.serverapi.controller; import org.springframework.http.MediaType; import org.springframework.stereotype.Controller; import org

Spring依賴注入基於XML配置檔案Annotation的方式完成屬性裝配)

依賴注入的方式(手工裝配): 1.使用bean的構造器注入—基於XML方式 2.使用屬性setter方法注入—基於XML方式 3.使用field注入—基於Annotation方式 注入依賴物件可

spring的事務管理xml配置註解方式優先順序

在spring中,對於事務的管理可以通過xml配置的方式去設定,也可以通過@Translation註解去設定,如果兩個同時設定了會怎麼樣呢? 測試方法: 1、在xml中設定事務的某個屬性值 2、採用註解設定與xml配置相反的屬性值 3、測試兩次,分別進行

Dubbo的兩種啟動模式基於註解基於XML配置

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema

spring注入引數(bean物件又有bean屬性)beans.xml配置

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"     xmlns:xsi="http://www.w3.o

SpringIOC配置xml實現IOC註解實現

1.什麼是spring spring 是分層的JavaSE/EE輕量級應用開源框架,已控制反轉IOC和麵向切面程式設計AOP為核心,提供了展現層SpringMVC, 和持久層Srping JDBC以及事務管理等。 spring是一個開源框架,為了解決企業應用開發的複雜性而

Spring MVC基於xml配置的web應用構建

開發十年,就只剩下這套架構體系了! >>>   

spring mvc攔截器配置mvc:interceptors

ria letter lec 成了 -a font 進行 匹配 eight 其實在mvc:interceptors標簽中,有兩種類型的配置,一種直接配置一個bean(bean和ref歸為一類),另一種還要配置上攔截的路徑和排除的路徑。直接配置的bean那就代表對所有的請求進