Как сварной контейнер обслуживать для применения в среде Java?

Я новичок в сварке, и через несколько дней изучаю, но знаю только фундаментальную концепцию сварки.


Я собираюсь использовать сварочный контейнер в среде Java. И вот что самый простой способ иметь 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. узнать, как работает сварочный сервис для применения se, другими словами, что делает основной метод?


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


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


И я упомянул ряд актуальных вопросов, например, приварка и Java Se. Как запустить приварку в тесте JUnit и т. Д., Но обнаружил, что они все для меня старшие. спасибо за ваше внимание заранее.

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 должно отображаться на консоли.

Другие вопросы по тегам