задний план
Сегодня я увидел большой грузовик, возвращающийся с работы, поэтому я подумал о сборке, а затем в моей голове всплыла аннотация @Autowired (автоматическая сборка), поэтому я подумал, что аннотация @Resource использовалась для сборки в последнее время. рабочие проекты. Итак, в духе обучения всему, вы должны тренироваться до конца, чтобы превратиться из новичка в великого бога! ! Я провел серьезное исследование и резюмировал его здесь. В следующем содержании сначала объясняются две аннотации по отдельности, а затем обобщаются общие черты и различия.
@Autowired @Autowired — это аннотация, предоставляемая Spring, для которой необходимо импортировать пакет org.springframework.beans.factory.annotation.Autowired.
Стратегия, принятая @Autowired, заключается в внедрении по типу.
public class UserService {
@Autowired
private UserDao userDao;
}
Как показано в приведенном выше коде, соберите его обратно в контейнер Spring, чтобы найти класс типа UserDao, а затем внедрите его. Это вызовет проблему. Когда тип имеет несколько значений bean-компонента, будет невозможно выбрать, какое из них вводить. В настоящее время нам нужно использовать его с @Qualifier.
@Qualifier сообщает Spring, какой объект нужно собрать.
public class UserService {
@Autowired
@Qualifier(name="userDao1")
private UserDao userDao;
}
В это время мы можем найти объект, который мы хотим внедрить, по типу и имени.
@Resource
Аннотация @Resource предоставляется J2EE и требует импорта пакета javax.annotation.Resource.
@Resource автоматически внедряется в соответствии с ByName по умолчанию.
public class UserService {
@Resource
private UserDao userDao;
@Resource(name="studentDao")
private StudentDao studentDao;
@Resource(type="TeacherDao")
private TeacherDao teacherDao;
@Resource(name="manDao",type="ManDao")
private ManDao manDao;
}
① Если указаны и имя, и тип, единственный соответствующий bean-компонент будет найден из контекста Spring для сборки, и если он не будет найден, будет выдано исключение.
② Если имя указано, компонент с совпадающим именем (id) будет искаться из контекста для сборки, и если он не будет найден, будет выдано исключение.
③ Если указан тип, найти аналогичный соответствующий уникальный компонент из контекста для сборки, если он не найден или найти более одного, будет выдано исключение.
④ Если ни имя, ни тип не указаны, он будет собран автоматически по методу byName, если нет совпадения, он вернется к примитивному типу для сопоставления, и если он совпадет, он будет собран автоматически.
Суммировать
Spring принадлежит третьей стороне, J2EE — собственная разработка Java. Использование @Resource уменьшает связь между вашим кодом и Spring.
Оба могут быть написаны на полях и методах установки. Если в поле написано и то, и другое, то метод установки писать не нужно.
Когда есть несколько типов, но они не указаны, будет сообщено о следующей ошибке:
严重: Exception sendingcontext initialized event to listener instance of classorg.springframework.web.context.ContextLoaderListenerorg.springframework.beans.factory.BeanCreationException: Error creating beanwith name 'sequenceServiceImpl': Injection of resource dependencies failed;nested exception isorg.springframework.beans.factory.NoUniqueBeanDefinitionException: Noqualifying bean of type