spring ioc注解与spring mvc注解

以前我们都是基于xml配置文件来实现bean的依赖注入的,现在有了更方便的注解来实现bean的配置以及注入。

1.bean的配置

利用如下配置ioc容器自动扫描test包下的所有bean并且配置到ioc容器中

<!--  只管理@Controller类型的bean, 忽略其他型的bean, 如@Service -->
  <context:component-scan base-package="test" use-default-filters="false">
    <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />保留@Controller注解的bean
    <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service" />//忽略@Service注解的bean
</context:component-scan>

@Service("id")用于标注业务层组件  这里的id是指在applicationcontext.xml(ioc容器)中指定bean的id名,如果不指定它的名字,此bean则默认用第一个字母小写的类名作为它的id。

@Controller("id")用于标注控制层组件(如struts中的action)

@Repository用于标注数据访问组件,即DAO组件

@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。

@Scope("singleton")用于指定bean的作用于。默认单例模式。

    singleton:在一个ioc容器中只能实例一次。

    prototype:子一个ioc容器中没调用一次实例一次。

以下两个注解配合使用

@Configuration用在类上等价 与XML中配置beans

@Bean(name="",init-method="init")用于(返回此方法类型的实例化的)方法上,将方法的类型加入到ioc容器中,没有设置此bean的名称,此bean的name为方法的名字,@Bean相当于<bean></bean>标签。这样就可以用applicationcontext对象来获取刚才返回实例化的bean。@Bean为单例模式


2.依赖注入

@Required通常用于set方法上,用于检查属性是否设置。

@Autowired(required=false)用于set和构造方法上或属性上,required=false表示如果找不到此bean将不会抛出异常,如果不设置它找不到将会抛出空指针异常,只有一个构造器被标识为true.

还可以注解到set ,list,map比如list<interface>a会将interface类型的所有bean自动注入到list中去

@Order(value=1)value=1,2...表示注入的顺序

@Qualifier(bean1)  只是注入名字为bean1的bean,当一个bean有多个实现类时(比如实现了某些接口的类有多个),用于缩小范围。


3.加载资源

@ImportResource("classpath:xx.xml")加载资源配置文件

@value("${xx值}")读取文件中属性值

4.spring mvc所需注解

@Controller

@RequestMpping("/login",method = RequestMethod.GET)

表示匹配的/login的请求,并且是get请求。

@ResponseBody

spring mvc和json结合,使得后端向前端传送json数据变的更为简单。

例子如下:

(1)pom.xml(所需4个jar包)

<dependency>  
        <groupId>org.codehaus.jackson</groupId>  
        <artifactId>jackson-mapper-asl</artifactId>  
        <version>1.9.11</version>  
        <type>jar</type>  
        <scope>compile</scope>  
        </dependency>
    <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
		<dependency>
		    <groupId>com.fasterxml.jackson.core</groupId>
		    <artifactId>jackson-core</artifactId>
		    <version>2.8.7</version>
		</dependency>

<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-databind</artifactId>
			<version>2.8.7</version>
		</dependency>
   
<!-- https://mvnrepository.com/artifact/org.codehaus.jackson/jackson-core-asl -->
		<dependency>
		    <groupId>org.codehaus.jackson</groupId>
		    <artifactId>jackson-core-asl</artifactId>
		    <version>1.9.11</version>
		</dependency>
注意:jar包之间的组合可能会导致出错,出错记得换较新的版本。


(2)实体类(必须要有无参构造方法)

package com.tsj.entity;

public class Register_message {
private String username_exist;
private String code_error;
private String phonenum_exist;
private String register_success;
private String login_error;

public String getLogin_error() {
	return login_error;
}
public void setLogin_error(String login_error) {
	this.login_error = login_error;
}
public String getRegister_success() {
	return register_success;
}
public void setRegister_success(String register_success) {
	this.register_success = register_success;
}
public String getPhonenum_exist() {
	return phonenum_exist;
}
public void setPhonenum_exist(String phonenum_exist) {
	this.phonenum_exist = phonenum_exist;
}
public Register_message(){
	
}
public String getUsername_exist() {
	return username_exist;
}
public void setUsername_exist(String username_exist) {
	this.username_exist = username_exist;
}
public String getCode_error() {
	return code_error;
}
public void setCode_error(String code_error) {
	this.code_error = code_error;
}

}
(3)控制层(只拿出来一部分)
@RequestMapping(value="/judge_login",method = RequestMethod.POST)
public @ResponseBody Register_message judge_login(HttpServletRequest request, HttpServletResponse response,HttpSession session) throws UnsupportedEncodingException{
	request.setCharacterEncoding("utf-8");
	response.setCharacterEncoding("utf-8");
	Register_message rm=new Register_message();
	String username=request.getParameter("username");
	String password=request.getParameter("password");
	User u=new User();
	u.setPassword(password);u.setUsername(username);
	if(ls.judge_password(u)>=1){
		session.setAttribute("username",username);
		return rm;
	}
	else if(ls.judge_password1(u)>=1){
		session.setAttribute("username",ls.select_username(username));
		return rm;
	}
	else{
		rm.setLogin_error("用户名或密码错误");
		return rm;
	}
	
}

(4)这里用jquery ajax进行交互

function judge_login(){
	var $username=$(".username_div>input").val();
	var $password=$(".password_div>input").val();
	$.ajax({  
        type: "POST",  
        url: "http://localhost:8080/tsj/judge_login",  
        data: "password="+$password+"&username="+$username,
        dataType : 'json',
        success: function(data){ 
        if(data.login_error!=null){
       	$(".loginerror_message").html(data.login_error).show();
       	 }
        else{
        	window.location.href=$(".redirectURL").html();
        }
        }
	});
}
其它就是spring的配置了,在此省略。
@RequestBody

此注解用法就是前端向后端传送json数据,将此注解放在实体类前,就可方便接受。

@PathVariable

     例如:  

@Controller  
public class TestController {  
     @RequestMapping(value="/user/{userId}/roles/{roleId}",method = RequestMethod.GET)  
     public String getLogin(@PathVariable("userId") String userId,  
         @PathVariable("roleId") String roleId){  
         System.out.println("User Id : " + userId);  
         System.out.println("Role Id : " + roleId);  
         return "hello";  
     } 
} 

    

@RequestParam

它的作用和request.getParameter("");的作用一样。

如:

@Controller
public class testController{
       @RequestMapping(value="/test")
       public String test(@RequestParm String a,HttpServletRequest request){
                System.out.println(a);
                String st=request.getParameter("a");
                 System.out.println(st);
                 //发现st的值和a的值是一样的
           }
}


@RequestHeader

这是一个Request 的header部分:

Host                    localhost:8080  
Accept                  text/html,application/xhtml+xml,application/xml;q=0.9  
Accept-Language         fr,en-gb;q=0.7,en;q=0.3  
Accept-Encoding         gzip,deflate  
Accept-Charset          ISO-8859-1,utf-8;q=0.7,*;q=0.7  
Keep-Alive              300  
@RequestMapping("/displayHeaderInfo.do")  
public void displayHeaderInfo(@RequestHeader("Accept-Encoding") String encoding,  
                              @RequestHeader("Keep-Alive") long keepAlive)  {  
}  

@CookieValue
public void displayHeaderInfo(@CookieValue("JSESSIONID") String cookie)  {  
}  


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

醒悟wjn

打赏可获取源码

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值