Подскажите можно ли создать глобальный класс конфигурации для ApplicationContext в Spring вместо того что бы использовать вот такой вот пример:
ApplicationContext context = new AnnotationConfigApplicationContext(Config.class);
Company company = (Company) context.getBean("company");
И если можно то как это можно получать потом в приложении вместо .getBean();?
Если вы пытаетесь получить бин таким образом, до в 99 процентах это свидетельствует о том, что Вы неправильно подходите к использованию спринга. Используя спринг, логика Вашего приложения, не должна выходить за пределы бинов. Рассмотрим для примера классическое приложение,содержащее 3 основных класса/интерфейса.
@Controller
public class CustomWebController {
@Autowired
private CustomService customService;
}
@Service
public class CustomService {
@Autowired
private CustomRepository customRepository;
}
@Repository
public interface CustomRepository extends JpaRepository<CustomModel, Long>{
}
У нас есть веб-контроллер (CustomRepository - для обработки запросов), сервис (CustomService - наша бизнес-логика), репозиторий(CustomRepository - опреации с БД). Все это бины, поскольку помечены соответсвующими аннотациями. Поэтому спринг при запуске приложения по умолчанию создаст из них объекты (все синглтоны) и поместит в свой контейнер. Теперь, когда на Ваш контроллер поступит запрос, поскольку контроллер является бином, вы можете объявить переменную типа класса сервисного уровня , которую спринг сможет инициализировать, используя контейнер (поместит в нее заранее созданный соответсвующий ,бин-синглтон CustomService). Для этого вы можете использовать конструктор, аннотацию autowired (как в примере) и т.д. (это уже к вопросу о способах инициализации). Как Вы можете заметить, в классе CustomService объявлена переменная типа CustomRepository, над которой имеется аннотация Autowired. Поэтому спринг проинициализирует и эту переменную, поместив в не экземпляр CustomRepository. Вместе с тем, если в классе-контроллере вы вместо того, чтобы проинциализировать переменную с помощью аннотации Autowired, создадите экземпляр класса CustomService с помощью оператора new (CustomService customService = new CustomService();), то переменная CustomRepository в экземпляре данного класса не будет проинциализирована спрингом. Это происходит потому, что экземпляр класса получен через new, а не из контейнера спринга, соответсвенно, спринг ничего не знает об этом конкретном экземпляре класса и не сможет проинициализировать переменные в нем. Это случай, когда Ваша логика вышла за пределы спринга и теперь Вам требуется конструкция, которая напаисана в Вашем вопросе. Именно поэтому это и некорректно. И еще, создавайте спринг-приложение с помощью этого сайта https://start.spring.io/ (либо через спец меню в среде разработки). Вы увидите , что спринг записывает в методе main, чтобы инициализировать приложение. Надеюсь, что это прояснит ситуацию, а если нет, то задавайте вопросы.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Не могу понять почему не работает базовый методСоздал абстрактный класс Rodent для задачи интерфейса