@Qualifier注解的使用

@Qualifier这个注解很简单。就是你一个接口有多个实现类。在Spring中使用了 @Autowired自动注入的时候不知道怎么选择是哪个具体的实现类了。
例如UserDao有2个实现类。
**加粗样式
**
如果你是Spring容器,给你一个UserDao接口,你知道在运行的时候使用那个实现类吗。所以使用@Qualifier来具体指向一下即可。这样对于接口的扩展十分有利。
我们具体看看代码吧

package com.zxf.test1;
public class User {
    private String name;
    private String pwd;

    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;
    }
}

package com.zxf.test1;
public interface UserDao {
    public User getUserByName(String u);
}

package com.zxf.test1;
import org.springframework.stereotype.Component;
@Repository("uu")
public class UserDaoImpl implements UserDao {
    @Override
    public User getUserByName(String u) {
        System.out.println("uu用户查找中。。。");
        return new User();
    }
}

package com.zxf.test1;
import org.springframework.stereotype.Component;
@Repository("umysql")
public class UserDaoMysqlImpl implements UserDao {
    @Override
    public User getUserByName(String u) {
        System.out.println("mysql用户查找中。。。");
        return new User();
    }
}

package com.zxf.test1;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
@Service
public class My1Service {
    @Autowired
    /*
         可以在这里修改选择使用那个相同接口的不同实现类。
     */
    @Qualifier("uu")
    //@Qualifier("umysql")
    UserDao userDao;
    public User login(String u,String p){
        System.out.println("Service 接受到请求,开始处理。");
       return userDao.getUserByName(u);
    }
}

package com.zxf.test1;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Controller("mycon1")
public class My1Controller {
    @Autowired
    My1Service my1Service;
    public String list(){
        String name="zhang3";
        String pwd="123";
        User user=my1Service.login(name,pwd);
        if(user!=null){
            System.out.println("Hello:"+name);
            return "登录OK";
        }else {
            return "登录失败";
        }
    }
}

package com.zxf.test1;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main1 {
    public static void main(String[] args) {
        ApplicationContext app=new ClassPathXmlApplicationContext("Spring1.xml");
        My1Controller bean = app.getBean("mycon1", My1Controller.class);
         String info=bean.list();
         System.out.println(info);
    }
}

Spring1.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"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
         http://www.springframework.org/schema/aop
          http://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">
    <context:component-scan base-package="com.zxf"/>
</beans>

你可能感兴趣的:(SpringBoot,Spring)