Ну, простыми словами:
Вы пытаетесь получить доступ к объекту, который не создан или в настоящее время не находится в памяти.
Итак, как это решить:
if (i == null) {
// Handle this
}
Поиск по имени означает, что некоторые фреймворки позволяют использовать FIndObjects с помощью строк, а код может выглядеть так: FindObject («ObjectName»);
Java позволяет отключать элементы управления доступом к полю или методу (да, сначала необходимо пройти проверку безопасности) с помощью метода AccessibleObject.setAccessible()
, который является частью структуры отражения (оба Field
и Method
наследуются от AccessibleObject
). Как только поле может быть обнаружено и записано, довольно просто сделать остальную часть; просто Простое программирование .
Java позволяет вам взаимодействовать с частными членами класса посредством отражения.
Проверьте ReflectionTestUtils , что очень удобно для написания модульных тестов.
Spring использует API-интерфейс CGLib , чтобы обеспечить автоматическую инъекцию зависимостей.
Нет необходимости в каких-либо сеттерах, вам просто нужно объявить класс EmpDao с помощью аннотации @component, чтобы Spring идентифицировала его как часть компонентов, содержащихся в ApplicationContext ...
You имеют 2 решения:
контекст: компонент-сканирование base-package = "package" />
& lt; context: annotation-config />
И использовать аннотацию весны для объявления классов, которые ваш весенний контейнер будет управлять как компоненты
ex:
@Component
class EmpDao {...}
И чтобы аннотировать его ссылку с помощью @Autowired:
@Component (or @Controller, or @Service...)
class myClass {
// tells the application context to inject an instance of EmpDao here
@Autowired
EmpDao empDao;
public void useMyDao()
{
empDao.method();
}
...
}
Автоустановка происходит путем помещения экземпляра одного компонента в нужное поле в экземпляре другого компонента.
Spring знает о существовании компонентов EmpDao и MyClass и автоматически создаст экземпляр EmpDao в MyClass
, чтобы он мог быть определен в контексте приложения.