从spring到springmvc到springboot到springcloud(二)

接上一篇博客从spring到springmvc到springboot到springcloud(一).。上一篇说依赖注入,重点说bean。继续。

按照: 【Maven项目转换:quickstart转web】.将项目转化为网页项目,这里引入spring mvc项目。
在上一篇博客中,有句话,没交代清楚,就是定义了bean之后,如何使用?我只说,加个注解然后调用,这一篇咱们来恰一恰这句话。
在这里插入图片描述
在使用的时候总不能每次都这么来调用bean吧?一次一次的从上下文get,applicationContext.getBean这种使用方式简直不堪入目了。

那怎么办呢?

开始,动手。在这上一篇博客,写了个bean的例子,这里稍微改动一下:

<bean id = "userDao" class="io.demo.dao.daoImpl.UserDaoImpl"></bean>
		<bean id = "UserService" class="io.demo.service.serviceImpl.UserServiceImpl">
			<property name="userDao" ref="userDao"></property>
		</bean> 

定义了两个bean,在userService里面有个元素:

<property name="userDao" ref="user"></property>。

这里是说在service里面,想要把userDao注入进来,而userDao是user这个bean。

改造文档结构,新建package,对应的interface和class:
在这里插入图片描述

在xml中,把UserDao、UserService定义成为bean。新建个controller:
在这里插入图片描述
叫FirstSpringMvc,代码如下:

package io.demo.controller;

import java.util.LinkedList;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import io.demo.entity.User;
import io.demo.service.UserService;

@Controller
public class FirstSpringMvc {
	
	@Autowired
	UserService userService;

	@RequestMapping(value = "req1" , method = RequestMethod.GET)
	public String req1() {
		
		LinkedList<User> userList = (LinkedList<User>)userService.queryUsers();
		for(User user: userList) {
			System.out.println(user.getName() + "\t身高:" +  user.getHeight() + "cm\t体重:" + user.getWeight() + "kg\t国籍/所在地:" + user.getAddress());
		}
		
		return "success";
	}
	
	@RequestMapping(value = "req2" , params = {"username" , "age!=10"})
	public String req2() {
		return "success";
	}
	
	@RequestMapping(value = "req3" , method = RequestMethod.GET , headers = {"Accept-Language = zh-CN,zh;q=0.9"})
	public String req3() {
		return "success";
	}
	
	@RequestMapping(value = "req4/{name}")
	public String req4(@PathVariable("name") String name) {
		System.out.println("---------------------> name: " + name);
		return "success";
	}
}

这FirstSpringMv里面有这两行:

@Autowired 
UserService userService;

是把UserService这个bean注入进来,完成它的初始化。在userService的实现类代码为:

package io.demo.service.serviceImpl;

import java.util.List;

import io.demo.dao.UserDao;
import io.demo.entity.User;
import io.demo.service.UserService;

public class UserServiceImpl implements UserService {
	
	private UserDao userDao;
	
	public UserDao getUserDao() {
		return userDao;
	}

	public void setUserDao(UserDao userDao) {
		this.userDao = userDao;
	}

	public UserServiceImpl(UserDao userDao) {
		super();
		this.userDao = userDao;
	}
	
	@Override
	public List<User> queryUsers() {
		return userDao.queryUsers();
	}

}

并没有实例化UserDao,只定义了UserDao有get、set方法。玄机在bean的配置中:

<bean id = "UserService" class="io.demo.service.serviceImpl.UserServiceImpl">
			<property name="userDao" ref="userDao"></property>
		</bean>

在userService这个bean里面,userDao被注入了,定义了property,这是使用的是set方法注入。

总结一下,userService这个 bean使用了自动注解(@Autowired)注入;userDao这个bean使用到userDao采用的是set方法注入,调试一下我的代码,因为是网页项目,添加到tomcat中调试:

在这里插入图片描述
可以看到userService、userDao均被实例化,调试出结果。

这里讲到了使用注解,自动装配;使用set方法注入。这里先有个概念,下一篇博客,细细说这个注解、装配的原理,这一篇把这注入的方式、定义先给熟悉了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值