пружинный каркас 3.0 типобезопасный - PullRequest
5 голосов
/ 15 ноября 2010

В другом вопросе Я задал вопрос, что пружинный каркас не является безопасным для типа.Это правда или исправлена, и можете ли вы привести пример, что именно это означает?

Ответы [ 3 ]

7 голосов
/ 15 ноября 2010

Прежде всего, что означает «безопасный тип» для структуры внедрения зависимостей. Я могу думать о том, что вы можете получить компонент из контекста, указав тип, а не просто имя компонента. Spring 3 позволяет это.

В противном случае безопасность типов означает, что когда вы можете определить свои зависимости по их типу. И вы можете сделать это во всех версиях весны.

Еще одна вещь - безопасность во время компиляции. В Spring pre-3.0, когда вам приходилось различать два bean-компонента с одинаковым интерфейсом (или супертипом), используя их строковое имя. Весной 3.0 вы можете использовать аннотации на основе квалификаторов (используя javax.inject.Qualifier), так что это также безопаснее во время компиляции.

Еще одна вещь, которую стоит упомянуть, это использование дженериков. Вы можете иметь, например, @Inject List<MyService> весной.

2 голосов
/ 27 декабря 2013

Определение пользовательской аннотации с помощью @ Qualifier

Чтобы идентифицировать внедренный компонент без указания имени, нам нужно создать пользовательскую аннотацию.Эта процедура эквивалентна использованию аннотаций JSR 330 (Inject) в CDI.

@Target({ElementType.Field, ElementType.Parameter})  
@Retention(RetentionPolicy.RUNTIME)  
@Qualifier  
public @Interface Student  {  
}  

Теперь назначьте эту пользовательскую аннотацию для реализации интерфейса EntityDao

@Component  
@Student  
public class StudentDao implements EntityDao   {  
}  

@ Компонент сообщает Springчто это определение бобов.Аннотация @Student используется Spring IoC для идентификации StudentDao как реализации EntityDao при использовании ссылки на EntityDao.Внедрите bean-компонент с помощью @Autowired и пользовательского квалификатора. Что-то вроде этого.

@Autowired  
@Student  
private EntityDao studentDao; // So the spring injects the instance of StudentDao here.  

Это уменьшает использование строковых имен, которые могут быть написаны с ошибками и которые сложнее поддерживать.- Я считаю этот пост очень полезным.http://www.coolcoder.in/2011/08/how-to-use-type-safe-dependency.html

1 голос
/ 15 ноября 2010

Это зависит от того, как вы его используете и что вы подразумеваете под типобезопасным (более подробную информацию о последнем смотрите в ответе Божо): если вы используете конфигурацию xml для создания ваших bean-компонентов, то вы, вероятно, безопасны от типов после запуск.

Однако, если вы используете новую конфигурацию Java Bean (которая имеет свои ограничения), вы получаете безопасность во время компиляции.

Я не защищаю последнее по сравнению с первым, но это то, что нужно учитывать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...