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 MVC中,Controller中使用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請求和響應的支援
開發十年,就只剩下這套架構體系了! >>>
Spring中IoC兩種介面和兩種依賴注入方式的比較
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文件和完整專案示例Demo,swagger
轉載自:http://www.360doc.com/content/17/0914/17/16915_687184334.shtml 實際專案中非常需要寫文件,提高Java服務端和Web前端以及移動端的對接效率。 聽說Swagger這
Spring MVC中使用Swagger生成API文件和完整專案示例Demo,swagger-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
Spring中IOC配置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那就代表對所有的請求進