как служба контейнера сварки для приложения в среде java se?

Я новичок в сварке, и через несколько дней исследований, но я знаю только некоторые основные понятия сварки.


Я собираюсь использовать контейнер сварки в среде java se. И выполните следующие действия: Как проще всего использовать CDI и JPA в Java SE? мой сегмент кода приведен ниже:

public class SayHello {
    public SayHello(){}
       public void sayHello(){
       System.out.println("Hello");
   }
}

import javax.inject.Inject;
import org.jboss.weld.environment.se.Weld;
import org.jboss.weld.environment.se.WeldContainer;

public class UseInject {
    private SayHello obj;
    public UseInject(){}

    @Inject
    public UseInject(SayHello obj){
        this.obj = obj;
    }

    public void show(){
        obj.sayHello();
    }

    public static void main(String[] args){
         Weld weld = new Weld();
         WeldContainer container = weld.initialize();
         UseInject ui = container.instance().select(UseInject.class).get();
         ui.show();
         weld.shutdown();
    }
  } 

и мое приложение основано на maven. Вот сегмент зависимостей jar в pom.xml

 <dependency>
    <groupId>org.jboss.weld.se</groupId>
    <artifactId>weld-se-core</artifactId>
    <version>3.0.0.Alpha17</version>

мое намерение состоит в том, чтобы вставить объект SayHello в объект UseInject, чтобы окончательный вывод этого приложения был "Hello". Но не все так гладко, jvm сообщает о следующей ошибке:

введите здесь описание изображения

и через поиск в Интернете есть поговорка, что создание пустого beans.xml - это нормально, и я следую этому не может дать эффект. А что касается основного метода, я подражаю Как проще всего использовать CDI и JPA в Java SE? Я не знаю, что они делают, и Что такое самый простой способ иметь CDI и JPA в Java SE? используйте аннотацию @Produces, я не знаю, следует ли мне ее использовать. И я намеревался использовать его для класса SayHello, но я не знаю, какую банку мне следует импортировать, чтобы использовать его, поэтому я сдаюсь.


Теперь я хочу: 1. знаете, как работает служба сварки для данного приложения, другими словами, что делает основной метод?


2. Как я могу успешно запустить свое приложение с помощью сварки?


3. когда мы должны использовать аннотацию @Produces


И я упомянул ряд соответствующих проблем, например, weld и java seКак выполнить загрузку сварки в тесте JUnit и т. д. но нахожу, что все они слишком старшие для меня. заранее спасибо за внимание.


person nail fei    schedule 24.09.2016    source источник


Ответы (1)


  1. Как я могу успешно запустить свое приложение с помощью сварки?

Сообщение об ошибке говорит вам, что вы должны создать файл с именем beans.xml в каталоге META-INF. Итак, чтобы решить проблему, просто сделайте следующее:

  1. Каталог с именем META-INF в каталоге src/main/resources
  2. Создайте пустой файл с именем beans.xml под META-INF, чтобы в вашем проекте был включен CDI.
  1. когда мы должны использовать аннотацию @Produces

Вы используете эту аннотацию, если хотите использовать любые примитивные типы Java, такие как Integer, String, ..., в качестве компонентов CDI или любой тип/класс во внешней библиотеке, которая не содержит файла META-INF/beans.xml в путь к классам.

Пример:

public class SayHello {

    @Produces
    private double pi = 3.14159;
    // the rest of the code
}

и вы можете ввести значение PI в другое место вашего кода как:

public class UseInject {

    @Inject
    private double pi;  // 3.14159 will be injected here

    // the rest of the code

    public static void main(...) {
        // ....
        UseInject ui = container.instance().select(UseInject.class).get();
        ui.show();
        System.out.println(ui.pi);
        // ...
    }

В консоли должно отображаться значение 3,14159.

person ujulu    schedule 24.09.2016
comment
Спасибо, и ваше решение подействует. - person nail fei; 25.09.2016