Форум программистов, компьютерный форум, киберфорум
Наши страницы
Java EE (J2EE)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
bazJaz
35 / 32 / 21
Регистрация: 11.07.2014
Сообщений: 390
1

Spring и аннотации @Configuration & @Autowired

04.04.2016, 22:55. Просмотров 1033. Ответов 14

Здравствуйте!
Не могу найти ответ на свой вопрос, подскажите возможно ли такое.

При работе с веб проектом всю конфигурацию бинов описываю в классе/xml файле, и в коде нет нигде вызова метода getBean()

Сейчас делаю очень простое приложение и надо использовать аннотацию @Autowired для доступа к слоям service и dao
Вопрос: как можно сделать без getBean

Есть такой класс с бинами
Java
1
2
3
4
5
6
7
8
9
10
11
@Configuration
public class BeanInit {
    @Bean
    public CarDao carDao(){
        return new CarDaoImpl();
    }
    @Bean
    public CarService carService(){
        return new CarServiceImpl();
    }
}
Класс
Java
1
2
3
4
5
6
7
8
9
10
//может тут надо какую-то аннотацию ??? 
public class Main {
    @Autowired
    private CarService carService;
    public void runApp(){
        Car car = new Car();
        car.setName("name");
        carService.save(car);  //carService равно null
    }
}
Как сделать что-бы бины подгружались автоматически?
Вариант смотрел, но сразу же вопрос, а если будет 10-15 полей с @Autowired и 100-150 классов, не очень нравится
Java
1
Bridge wb = (Bridge) applicationContext.getBean("bridge");
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.04.2016, 22:55
Ответы с готовыми решениями:

[Spring] @Autowired сервиса
По ТЗ нельзя использовать mvc-фреймворков, но как я понимаю сам контейнер...

Spring на клиенте и Autowired
У меня есть спринг на клиенте (так уж получилось), в spring-config есть список...

Spring Autowired Annotation
Ребята, че за нафиг, как это вообще работает?! Стандартный пример,...

Spring аннотация Autowired
Всем, добрый день. Изучаю Spring недавно и соответственно столкнулся с...

Spring - Как сделать Autowired в N объектах класса
Подскажите пожалуйста как правильно сделать. Есть класс ImagesPool, он...

14
KEKCoGEN
Эксперт Java
2062 / 1932 / 502
Регистрация: 28.12.2010
Сообщений: 7,740
05.04.2016, 08:08 2
bazJaz, нельзя инжектить управляемые спрингом классы в неуправляемые. В вашем случае Main это не бин и спринг им не управляет поэтому ваш инжект не работает.

Если вам нужна простая программа с возможностями инжекта, используйте spring boot
0
Любопытный
149 / 162 / 48
Регистрация: 19.10.2012
Сообщений: 530
05.04.2016, 08:14 3
Цитата Сообщение от bazJaz Посмотреть сообщение
Как сделать что-бы бины подгружались автоматически?
Нужно указать спрингу, что этот этот класс нужно просканировать. Аннотируйте класс аннотацией @Component или @Resource.
Цитата Сообщение от bazJaz Посмотреть сообщение
Вариант смотрел, но сразу же вопрос, а если будет 10-15 полей с @Autowired
Следует избегать слишком большого количества зависимостей, это увеличивает связность между компонентами, что является антипаттерном.
0
bazJaz
35 / 32 / 21
Регистрация: 11.07.2014
Сообщений: 390
05.04.2016, 08:49  [ТС] 4
Цитата Сообщение от Любопытный Посмотреть сообщение
Аннотируйте класс аннотацией @Component или @Resource.
какой из класов анотировать как @Component
Цитата Сообщение от Любопытный Посмотреть сообщение
Следует избегать слишком большого количества зависимостей, это увеличивает связность между компонентами, что является антипаттерном.
спасибо за совет

Добавлено через 1 минуту
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
используйте spring boot
разве spring boot не для веб приложений?
0
Любопытный
149 / 162 / 48
Регистрация: 19.10.2012
Сообщений: 530
05.04.2016, 09:10 5
Цитата Сообщение от bazJaz Посмотреть сообщение
какой из класов анотировать как @Component
Тот, в который Вы хотите внедрять свои зависимости. Что бы обнаружить аннотацию @Autowired, Spring должен проанализировать класс, что бы он взялся его анализировать класс должен быть его компонентом.
Цитата Сообщение от bazJaz Посмотреть сообщение
разве spring boot не для веб приложений?
Не обязательно, по крайней мере в офф доке не говорится о применении исключительно в web.

Добавлено через 5 минут
Ну и соответственно, если используете xml конфиг не забыть про <context:annotation-config> и <context:component-scan>
0
KEKCoGEN
Эксперт Java
2062 / 1932 / 502
Регистрация: 28.12.2010
Сообщений: 7,740
05.04.2016, 09:16 6
Цитата Сообщение от bazJaz Посмотреть сообщение
разве spring boot не для веб приложений?
нет
0
bazJaz
35 / 32 / 21
Регистрация: 11.07.2014
Сообщений: 390
05.04.2016, 15:59  [ТС] 7
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
нет
зачем же тогда ему tomcat если это не веб проект?
в примеру, для boot есть аннотация @EnableAutoConfiguration тогда не нужно прописывать лоадер для бинов

Добавлено через 1 минуту
Цитата Сообщение от Любопытный Посмотреть сообщение
Тот, в который Вы хотите внедрять свои зависимости. Что бы обнаружить аннотацию @Autowired, Spring должен проанализировать класс, что бы он взялся его анализировать класс должен быть его компонентом.
добавил я аннотацию классу Main - не работает, пробывал и @Component и @Resource
могли бы тыкнуть в пример какой-то?
0
Любопытный
149 / 162 / 48
Регистрация: 19.10.2012
Сообщений: 530
05.04.2016, 16:16 8
Цитата Сообщение от Любопытный Посмотреть сообщение
<context:annotation-config> и <context:component-scan>
Есть?

Добавлено через 14 минут
Либо аннотацию @ComponentScan("%packageName%"), для указания пакетов с компонентами.
0
bazJaz
35 / 32 / 21
Регистрация: 11.07.2014
Сообщений: 390
05.04.2016, 16:28  [ТС] 9
Цитата Сообщение от Любопытный Посмотреть сообщение
Есть?
у меня проект без .xml конфигураций

Добавлено через 5 минут
Добавил к классу с бинами
Java
1
2
3
@Configuration
@ComponentScan("com.autoshop")
public class BeanInit {
Java
1
2
3
4
5
6
7
8
9
10
11
package com.autoshop;
//imports
@Component
public class Main {
    @Autowired
    private CarService carService;
    public void runApp(){
        Car car = new Car();
        car.setName("name");
        carService.save(car);  //carService равно null
    }
0
KEKCoGEN
Эксперт Java
2062 / 1932 / 502
Регистрация: 28.12.2010
Сообщений: 7,740
05.04.2016, 16:54 10
Цитата Сообщение от bazJaz Посмотреть сообщение
зачем же тогда ему tomcat если это не веб проект?
томкат для веб проекта. Но никто не заставляет вас тащить томкат. Можете консольную аппликацию писать без проблем.
0
bazJaz
35 / 32 / 21
Регистрация: 11.07.2014
Сообщений: 390
05.04.2016, 18:55  [ТС] 11
c boot все понятно, а как быть с Autowired ?

Добавлено через 1 час 52 минуты
да, вот сдесь можного его исключить
https://start.spring.io/
0
Любопытный
149 / 162 / 48
Регистрация: 19.10.2012
Сообщений: 530
06.04.2016, 07:55 12
bazJaz, на исходники бы глянуть.
0
bazJaz
35 / 32 / 21
Регистрация: 11.07.2014
Сообщений: 390
06.04.2016, 13:13  [ТС] 13
Любопытный, на исходники чего именно?
0
Любопытный
149 / 162 / 48
Регистрация: 19.10.2012
Сообщений: 530
06.04.2016, 13:25 14
bazJaz, проекта всего. В архиве.
0
bazJaz
35 / 32 / 21
Регистрация: 11.07.2014
Сообщений: 390
06.04.2016, 13:34  [ТС] 15
Любопытный, не думаю что архив хороший вариант, но залью, и как ответ сделаю тоже
0
06.04.2016, 13:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.04.2016, 13:34

Spring JDBC && Hibernate
Здравствуйте, подскажите пожалуйста, сейчас в моих уроках начался Spring+JDBC,...

Spring&JBoss&MyBatis
Подскажите, если есть, хороший туториал по связке этих фреймворков. У меня...

Java standalone & Spring
Написал простое приложение на спринге, просто связываю два компонента. Через...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru