@Primary注記の役割

6296 ワード

同じ言い訳には実装クラスがたくさんあるかもしれませんが、beanは必ず区別しなければなりません.@Primary注釈の役割は実はデフォルト値に相当し、多くの実装クラスの中で彼にこのような注釈を与えると、どのbeanクラスを呼び出すかを指定しないときにこの注釈のあるメソッドがデフォルトで呼び出されます.
もちろん、1つのインタフェースが複数回実装されている場合は、このコードは起動エラーを報告します.2つの実装クラスがどちらを使用するか分からないので、このとき@Primaryを使用することができます.
public interface EmployeeService {
    public EmployeeDto getEmployeeById(Long id);
}
 

  EmployeeServiceImpl EmployeeServiceImpl1:

@Service("service")
public class EmployeeServiceImpl implements EmployeeService {
    public EmployeeDto getEmployeeById(Long id) {
        return new EmployeeDto();
    }
}

@Service("service1")
public class EmployeeServiceImpl1 implements EmployeeService {
    public EmployeeDto getEmployeeById(Long id) {
        return new EmployeeDto();
    }
}@Controller
@RequestMapping("/emplayee.do")
public class EmployeeInfoControl {
    
    @Autowired
    EmployeeService employeeService;
     
    @RequestMapping(params = "method=showEmplayeeInfo")
    public void showEmplayeeInfo(HttpServletRequest request, HttpServletResponse response, EmployeeDto dto) {
        # 
    }
}

腰で他の1つを呼び出すときに使用できます:この時@Qualifier注釈を使用します.qualifierの意味は合格者です.この標識を通じて、どの実装クラスが私たちが必要かを示します.私たちは呼び出しコードを修正し、@Qualifier注釈を追加します.注意しなければならないのは@Qualifierのパラメータ名が私たちの前に@Service注釈の名前の1つを定義しなければなりません.
@Controller
@RequestMapping("/emplayee.do")
public class EmployeeInfoControl {
    
    @Autowired
    @Qualifier("service") @Resource(name="service") 
    EmployeeService employeeService;
    
    @RequestMapping(params = "method=showEmplayeeInfo")
    public void showEmplayeeInfo(HttpServletRequest request, HttpServletResponse response, EmployeeDto dto) {
        # 
    }
}