Форум программистов, компьютерный форум, киберфорум
Наши страницы

Java EE (J2EE)

Войти
Регистрация
Восстановить пароль
 
bazJaz
34 / 31 / 10
Регистрация: 11.07.2014
Сообщений: 390
#1

Spring и аннотации @Configuration & @Autowired - Java EE

04.04.2016, 22:55. Просмотров 875. Ответов 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 и аннотации @Configuration & @Autowired (Java EE):

Spring на клиенте и Autowired - Java EE
У меня есть спринг на клиенте (так уж получилось), в spring-config есть список бинов и есть фабрика которая их один раз грузит и раздаёт...

Spring Autowired Annotation - Java EE
Ребята, че за нафиг, как это вообще работает?! Стандартный пример, напечатать HELLO_WORLD, для этого: 1. Класс MessageProvider ...

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

Spring - Как сделать Autowired в N объектах класса - Java EE
Подскажите пожалуйста как правильно сделать. Есть класс ImagesPool, он создается через new и его всегда существует несколько экземпляров. В...

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

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

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

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

Добавлено через 1 минуту
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
используйте spring boot
разве spring boot не для веб приложений?
0
Любопытный
148 / 161 / 31
Регистрация: 19.10.2012
Сообщений: 525
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
2007 / 1882 / 451
Регистрация: 28.12.2010
Сообщений: 7,566
05.04.2016, 09:16 #6
Цитата Сообщение от bazJaz Посмотреть сообщение
разве spring boot не для веб приложений?
нет
0
bazJaz
34 / 31 / 10
Регистрация: 11.07.2014
Сообщений: 390
05.04.2016, 15:59  [ТС] #7
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
нет
зачем же тогда ему tomcat если это не веб проект?
в примеру, для boot есть аннотация @EnableAutoConfiguration тогда не нужно прописывать лоадер для бинов

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

Добавлено через 14 минут
Либо аннотацию @ComponentScan("%packageName%"), для указания пакетов с компонентами.
0
bazJaz
34 / 31 / 10
Регистрация: 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
2007 / 1882 / 451
Регистрация: 28.12.2010
Сообщений: 7,566
05.04.2016, 16:54 #10
Цитата Сообщение от bazJaz Посмотреть сообщение
зачем же тогда ему tomcat если это не веб проект?
томкат для веб проекта. Но никто не заставляет вас тащить томкат. Можете консольную аппликацию писать без проблем.
0
bazJaz
34 / 31 / 10
Регистрация: 11.07.2014
Сообщений: 390
05.04.2016, 18:55  [ТС] #11
c boot все понятно, а как быть с Autowired ?

Добавлено через 1 час 52 минуты
да, вот сдесь можного его исключить
https://start.spring.io/
0
Любопытный
148 / 161 / 31
Регистрация: 19.10.2012
Сообщений: 525
06.04.2016, 07:55 #12
bazJaz, на исходники бы глянуть.
0
bazJaz
34 / 31 / 10
Регистрация: 11.07.2014
Сообщений: 390
06.04.2016, 13:13  [ТС] #13
Любопытный, на исходники чего именно?
0
Любопытный
148 / 161 / 31
Регистрация: 19.10.2012
Сообщений: 525
06.04.2016, 13:25 #14
bazJaz, проекта всего. В архиве.
0
bazJaz
34 / 31 / 10
Регистрация: 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 AOP configuration - Java
Привет кодеры! Тут в общем со спрингом пытаюсь подружиться и решил для одного бина внедрить аспект. У меня есть класс: package...

[Spring & Hibernate] Обойтись без @Transactional в контроллере - Java EE
На SO прочитал, что все транзакции должны быть в сервисах и следует избегать @Transactional в контроллерах. Сейчас у меня контроллер...

[Spring Boot & Thymeleaf] Сервер не может найти статические ресурсы - Java EE
Здесь написано Spring Boot will automatically add static web resources located within any of the following directories: ...

[Hibernate & Spring Data] Получить список объектов сущности из ManyToMany - Java EE
Сущность User @Entity @Table(name = &quot;users&quot;) public class User { @Id @GeneratedValue(strategy = GenerationType.AUTO) ...


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

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

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