spring的依赖注入 -------基于注解方式

20 篇文章 0 订阅

前言:

做了2年的软件,刚开始入行的时候,没有个目标基本上都是在摸索,技术看的我眼花缭乱,这个想学,那个也想学结果是对很多技术一知半解的,工作中才发现,我们要掌握的一门可以搞定快速开发搞定所有业务需求的技术, 所以现在我要对spring的东西达到一个深层次的掌握,尽量避免百度,在开发中避免查询查询api提高开发速度,在前端方面我觉得知道掌握jquery,easyui相关的技术即可,在前端方面不追求广度,只追求技术的深度

spring依赖注入

spring的依赖注入指的是应用程序本身不负责对象的创建和维护,应用程序所需要的类在应用加载启动的时候创建完成,并通过set方法将类直接加载到应用程序中(DI),在spring容器中并设置类的一系类属性,例如的类的作用域,bean与bean之间的关系,类的模式,在spring容器中检测,类的生命周期等

现在spring使用方式有基于注解和基于xml的2中方式:
先介绍注解的方式:
实例化的注解列表:
@compoent :应用于普通的类中
@service:在servie层中使用
@controller:标记controller层
@reposistory:在dao层中使用
@resource:根据设置的明朝名称来进行注入

注入的注解的标签:
@autowired:自动注入的方式进行注入,默认根据类的名称来进行装配
@Resource(name="")没有name时3和autowired一样但是他可以根据名称进行装配

装配标签:在xml里面的
<context:compoent-scan pack-name="">

设置类装配的范围:

@Scope()
在这里插入图片描述

使用实例:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:p="http://www.springframework.org/schema/p"
  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"
  xsi:schemaLocation="
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-3.2.xsd
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">
     
     <mvc:annotation-driven /> 
     <!-- 扫描controller(controller层注入) -->
     <!-- 当类上面有 @Compoent, @service, @Controller,@repository 
    	 也可以定义为 1 <context:component-scan base-package="cn.gacl.dao.impl,cn.gacl.service.impl,cn.gacl.action"/>
     
     	@Component
		是所有受Spring 管理组件的通用形式,@Component注解可以放在类的头上,@Component不推荐使用。
		@Controller
		@Controller对应表现层的Bean,也就是Action
		@Scope("prototype") 用于生命bean的范围
		
     -->
     <!-- 开始扫 @Compoent, @service, @Controller,@repository 并 相关的标签 将这些类实例化
     	相当于在 <bean id="" class=""></bean>
     -->
     <context:component-scan base-package="com.mvc" />
     <!-- springMVC上传文件时,需要配置MultipartResolver处理器 -->
    <bean id="multipartResolver" 
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="defaultEncoding" value="utf-8"></property>
        <property name="maxUploadSize" value="10485760000"></property>
        <property name="maxInMemorySize" value="40960"></property>
    </bean>
     <!-- 对模型视图添加前后缀 -->
     <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"
      p:prefix="/" p:suffix=".jsp"/>
      
</beans>

在文件加载文件的使用将类自动注入

controller层样例:

package com.mvc.controller;

import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import com.fileupload.dao.ContextDao;
import com.fileupload.dao.impl.ContextDaoImpl;
import com.mvc.model.OAArchiveCjRTypeArchives;
import com.mvc.model.OAArchiveCjRTypeFile;
import com.mvc.model.OArchiveCjRtypeProject;
import com.mvc.model.User;
import com.mvc.service.UserService;



@Controller
@Scope
public class UserController {
	
	private static Logger logger = Logger.getLogger(UserController.class); 
	
	@Autowired
	private UserService service;
	
	private List list;
	
	private Map map;
	
	
	List<User> user;
	
    @RequestMapping("/")    
    public ModelAndView getIndex(){     
    	// 记录debug级别的信息    
	    logger.debug("This is debug message.");    
	    // 记录info级别的信息    
	    logger.info("This is info message.");    
	    // 记录error级别的信息    
	    logger.error("This is error message.");   
	    
        ModelAndView mav = new ModelAndView("index");   
        return mav;    
    }   
    
    
    
    @RequestMapping(value = "/mvctest", method = RequestMethod.GET,produces = "application/json;charset=UTF-8")
    @ResponseBody()
    public Map<String,Object> mvctest(@RequestParam("name") String name){
    	
    	
    	logger.info(name);
    	List<String> list = new ArrayList<String>();
    	
    	list.add("tomcat");
    	list.add("eclipse");
    	
    	
    	Map<String,Object> map = new HashMap<String,Object>();
    	
    	map.put("list", list);
    	
    	
    	return map;
    	
    }
    
    @RequestMapping(value="/listUser", method=RequestMethod.GET,produces = "application/json;charset=UTF-8")
    @ResponseBody()
    public List<User> listUser(){
    	
    	List<User> list = service.listUser();
    	
    	
    	return list;
    }
    

    
 /*   @RequestMapping(value="/listTest", method=RequestMethod.GET,produces = "application/json;charset=UTF-8")
    @ResponseBody()
    public List listTest(){
    	
    	List list = this.list;
    	
    	return list;
    	
    }*/
    
    /*
     * 包装类型的数据,在传参数的时候不会报错报0 int和integer
     * */
    
    @RequestMapping(value="/integerTest", method=RequestMethod.GET,produces = "application/json;charset=UTF-8")
    @ResponseBody()
    public Integer IntegerTest(@RequestParam("num")Integer num){
		return num;
    }
    //传数组
    
    @RequestMapping(value="/arrayTest", method=RequestMethod.GET,produces = "application/json;charset=UTF-8")
    @ResponseBody()
    public String arrayTest(@RequestParam("name")String[] name){
    	
    	StringBuffer buf = new StringBuffer();
    	
    	for(String nameVal:name){
    		buf.append(nameVal).append("   ");
    	}
        	
		return buf.toString();
    }
    //http://localhost:8080/mvctest/objectTest?userName=jiang&userTel=123456
    @RequestMapping(value="/objectTest", method=RequestMethod.GET,produces = "application/json;charset=UTF-8")
    @ResponseBody()
    public String objectTest(OArchiveCjRtypeProject rp){
    	
    	return rp.toString();
    }
    
    
    //
    @RequestMapping(value="/listTest", method=RequestMethod.GET,produces = "application/json;charset=UTF-8")
    @ResponseBody()
    public String listTest(List<User> user){
    	
    	return user.toString();
    }
    
    
    //modelAndView test
    
    @RequestMapping(value="/viewTest", method=RequestMethod.GET)
    public ModelAndView viewTest(){
    	ModelAndView model = new ModelAndView("index");
    	model.addObject("name", "jiang");
    	model.getModel().put("age","1112");
    	return model;
    }
    
    @InitBinder("user")
    public void userBind( WebDataBinder bind){
    	
    	bind.setFieldDefaultPrefix("user.");
    };
    
    @InitBinder("admin")
    public void adminBind( WebDataBinder bind){
    	
    	bind.setFieldDefaultPrefix("admin.");
    };
    
	public List getList() {
		return list;
	}


	public void setList(List list) {
		this.list = list;
	}



	public Map getMap() {
		return map;
	}



	public void setMap(Map map) {
		this.map = map;
	}



	public List<User> getUser() {
		return user;
	}



	public void setUser(List<User> user) {
		this.user = user;
	}
    
	
}

service层和到dao层类似于此

科学上网教程:

http://javastudy.mynatapp.cc/jeesite/f/wechat/interLine/view

相关相关教程可以查看博客中的其他博客

引用\[1\]和\[3\]提到了@Controller注解,它是用来定义一个控制器的注解。在Spring MVC中,@Controller注解用于标记一个类为控制器,并且处理HTTP请求。它可以与@RequestMapping注解一起使用,来指定处理请求的URL和请求方法。\[1\]\[3\] @Controller注解依赖于Spring MVC框架,它提供了处理请求和响应的功能。当一个请求到达时,Spring MVC会根据@RequestMapping注解中指定的URL和请求方法,找到对应的@Controller类和方法来处理请求,并返回相应的结果。\[2\] 因此,使用@Controller注解可以将一个类标记为Spring MVC的控制器,并定义处理请求的方法。这样,当请求到达时,Spring MVC会自动调用相应的方法来处理请求,并返回结果。 #### 引用[.reference_title] - *1* *3* [Spring Boot 中常用注解@Controller/@RestController/@RequestMapping介绍](https://blog.csdn.net/lDemoni/article/details/127507535)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [@controller深入详解](https://blog.csdn.net/m0_66278959/article/details/126447183)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值