Spring Mvc那点事---(7)Spring Mvc @Autowired注解

        Spring中的类中定义的变量,方法,构造函数通过标注@Autowired注解可以从配置文件中找到相应的bean,完成自动装配的工作。默认情况下,@Autowired是按类型来匹配相应的bean,也可以通过名称来匹配,需要设置名称。

       如果想使@Autowired注解生效,需要在配置文件中添加AutowiredAnnotationBeanPostProcessor,通过这个,系统将自动解析bean

  <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>  

     1.@Autowired按类型装配

         下面我们先建立一个UserDao类,        

package com.springfirst.Controller;

public class UserDao {
	
	public  String GetUserName()
	{
		
		return "Hello World";
	}

}

IUserService  接口    

package com.springfirst.Controller;

public interface IUserService {

	public  String GetUserName();
}

UserService类

package com.springfirst.Controller;

import org.springframework.beans.factory.annotation.Autowired;

public class UserService implements IUserService {

	@Autowired
	private UserDao userDao; 
	
	public String GetUserName() {
		// TODO Auto-generated method stub
		return userDao.GetUserName();
	}

}

 在controller中我们定义userService,系统会进行自动匹配装载,找到userService的具体实现

	@Autowired
	private IUserService userService;
	
	
	@RequestMapping(value="userdetail")
	public String userdetail(ModelMap model)
	{
		String name=userService.GetUserName();
		System.out.print(name);
		model.addAttribute("username",name);
		return "userdetail";
	}

  配置文件      

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:p="http://www.springframework.org/schema/p"
    xmlns:cache="http://www.springframework.org/schema/cache" xmlns:repo="http://www.springframework.org/schema/data/repository"
    xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jpa="http://www.springframework.org/schema/data/jpa"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
        http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
        http://www.springframework.org/schema/data/repository http://www.springframework.org/schema/data/repository/spring-repository-1.7.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
            http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd "
    default-lazy-init="true">

    <description>Spring配置</description>
 <!-- 该 BeanPostProcessor 将自动起作用,对标注 @Autowired 的 Bean 进行自动注入 -->  
    <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>  
    
 <bean id="userService" class="com.springfirst.Controller.UserService"/>
  <bean id="userDao" class="com.springfirst.Controller.UserDao"/>
  
</beans>


上面的自动装配是按类型进行匹配的,Spring会自动从配置文件中找到相应的类型,进行装载

         使用方法进行注解  

	private IUserService userService;
	
	@Autowired()
	public void setUserService(IUserService userService) {
		this.userService = userService;
	}

           使用构造函数进行注解     

private IUserService userService;

	@Autowired
	public  UserController(IUserService userService)
	{
		this.userService=userService;
		
	}


          2.@Autowired按名称装配

               按名称装载的时候,@Autowired需要配合@Qualifier一起使用,通过@Qualifier可以指定名称。
               如果两个类同时继承一个接口,这个时候我们要通过@Qualifier来指定名称进行匹配,所谓名称就是XML文件中的bean的id, 这里我们定义了Employee类和UserService类都继承IUserService接口

               如果有两个类同时继承一个接口,使用的时候如果不通过名称指定,会报异常。
package com.springfirst.Controller;

import org.springframework.beans.factory.annotation.Autowired;

public class Employee implements IUserService {

	
	
	public String GetUserName() {
		// TODO Auto-generated method stub
		return  "Employee";
	}

}

          
       
package com.springfirst.Controller;

import org.springframework.beans.factory.annotation.Autowired;

public class UserService implements IUserService {

	@Autowired
	private UserDao userDao; 
	
	public String GetUserName() {
		// TODO Auto-generated method stub
		return userDao.GetUserName();
	}

}

            在xml中定义了bean
         
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:p="http://www.springframework.org/schema/p"
    xmlns:cache="http://www.springframework.org/schema/cache" xmlns:repo="http://www.springframework.org/schema/data/repository"
    xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jpa="http://www.springframework.org/schema/data/jpa"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
        http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
        http://www.springframework.org/schema/data/repository http://www.springframework.org/schema/data/repository/spring-repository-1.7.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
            http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd "
    default-lazy-init="true">

    <description>Spring配置</description>
 <!-- 该 BeanPostProcessor 将自动起作用,对标注 @Autowired 的 Bean 进行自动注入 -->  
    <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>  
    
 <bean id="userService" class="com.springfirst.Controller.UserService"/>
  <bean id="employee" class="com.springfirst.Controller.Employee"/>
  <bean id="userDao" class="com.springfirst.Controller.UserDao"/>
  
</beans>
            在Controller中我们指定使用名称为 userService的bean,通过@ Qualifier  指定,代码如下
          
	private IUserService userService;

	 //这里我们使用id为userService的bean
	@Autowired
	public  UserController(@Qualifier("userService")IUserService userService)
	{
		this.userService=userService;
		
	}

      



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值