1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mackyHuang-knapsack

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

knapsack Maven Central License

-- Первый выпуск уже доступен --

Описание

knapsack ("маленький рюкзак"), как следует из названия, это легковесный фреймворк для внедрения зависимостей, который реализует функционал IOC для внедрения зависимостей и AOP с использованием CGLIB и JDK. Конфигурация необходимых свойств может быть выполнена через конфигурационный файл properties.

  • Внедрение зависимостей
    • Реализация спецификаций JSR330 для внедрения зависимостей в Java
    • Управление интерфейсами и классами реализации с помощью метода QualifierSack.bindQualifierClassToPool
  • AOP
    • Поддержка двойной динамической прокси CGLIB и JDK для удобства программирования аспектов
    • Предоставляет четыре метода: preInvoke, postInvoke, postReturning, postThrowing, чтобы расширить бизнес-логику, а также метод preInvoke для контролируемого прерывания, позволяющий решать вопрос продолжения выполнения самостоятельно
  • Функции на основе конфигурационных файлов
    • Привязка интерфейсов и классов реализации может быть выполнена через конфигурационный файл

Инструкция по установке

Для Maven проекта достаточно добавить зависимости в pom.xml:

<dependency>
    <groupId>vip.ifmm</groupId>
    <artifactId>knapsack</artifactId>
    <version>1.0.0</version>
</dependency>

Конечно, для Gradle это будет выглядеть следующим образом:```groovy implementation group: 'vip.ifmm', name: 'knapsack', version: '1.0.0'


### Инструкция по использованию
После того как была добавлена зависимость Knapsack,
необходимо объявить контейнер. Если требуется внедрение зависимостей от реализационного класса до интерфейса, например,

```java
@Named("stu")
@Inject
public Person stu;

такое внедрение зависимостей (внедрение реализационного класса Stu в интерфейс Person) требует указания соответствия контейнеру, после чего можно использовать следующий метод для получения управляемого экземпляра:

public <T> T takeOutInstance(Class<T> clazz);

где параметром является класс, экземпляр которого требуется получить.

Пример использования других вспомогательных классов:

// Объявление единичного экземпляра Stu
@Singleton
@Named()
public class Stu extends Person {}

// Объявление единичного экземпляра Teacher
@Singleton
@Named()
public class Teacher extends Person {}

public class ClassRoom {
    @Named("stu")
    @Inject
    public Person stu;
}
``````java
    @Named("teacher")
    @Inject
    public Person teacher;
}
@Singleton указывает, что экземпляр в контейнере является синглтоном.
@Named("id") указывает на id при сборке или внедрении. При сборке, если id пустое, используется имя класса в нижнем регистре по умолчанию.
Внедрение требует наличия как @Named, так и @Inject, а также обязательства заполнения id.
- Здесь представлено 2 способа:
  - Кодовый способ:
   Knapsack knapsack = new Knapsack();
   // связывание интерфейса и реализации
   knapsack.link(Person.class).with(Stu.class);
   knapsack.link(Person.class).with(Teacher.class);
   ClassRoom classRoom = knapsack.sew().takeOutInstance(ClassRoom.class);
- Конфигурационный файл:
Более компактный код, параметр метода sew — это расположение конфигурационного файла.
   Knapsack knapsack = new Knapsack();
   ClassRoom classRoom = knapsack.sew("test.properties").takeOutInstance(ClassRoom.class);
Содержимое конфигурационного файла:

Указание местоположения сканирования пакета

scanPackage=vip.ifmm.knapsack

Указание отношения между интерфейсом и реализацией, разделённых символом $

qualifier.Person=Stu$Teacher


- В приведённых примерах, место использования `takeOutInstance` — это место получения экземпляра,
тогда, если вы замените его на
ClassRoom classRoom = (ClassRoom) knapsack.enhanceInstance(ClassRoom.class, SimpleAdapter.class, Recordlog.class);
Параметры:
 ① Класс, который требуется улучшить
```      ② Реализация интерфейса EnhancementAdapter (место бизнес-логики)
       ③ Аннотация метки улучшения (методы в классе, помеченные этой аннотацией, будут улучшены)
       Это вернёт уже улучшенный прокси-объект, который можно использовать непосредственно

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Лёгкий фреймворк для внедрения зависимостей, который уже реализует функции внедрения зависимости IOC и функцию аспектно-ориентированного программирования AOP на основе CGLIB и JDK. Также можно настроить нужные параметры через конфигурационный файл properties. Развернуть Свернуть
Apache-2.0
Отмена

Обновления (1)

все

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/mackyHuang-knapsack.git
git@api.gitlife.ru:oschina-mirror/mackyHuang-knapsack.git
oschina-mirror
mackyHuang-knapsack
mackyHuang-knapsack
master