Initial project
This commit is contained in:
26
src/main/java/com/imyeyu/inject/annotation/Bean.java
Normal file
26
src/main/java/com/imyeyu/inject/annotation/Bean.java
Normal file
@@ -0,0 +1,26 @@
|
||||
package com.imyeyu.inject.annotation;
|
||||
|
||||
import java.lang.annotation.Documented;
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
/**
|
||||
* 控制反转(通用对象),注解在类上后该类将被 TimiInject 实例化并控制反转,后续执行注入
|
||||
*
|
||||
* @author 夜雨
|
||||
* @since 2024-07-19 15:48
|
||||
*/
|
||||
@Target({ElementType.TYPE})
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Documented
|
||||
public @interface Bean {
|
||||
|
||||
/**
|
||||
* 对象名称,非空时注入需要明确执行
|
||||
*
|
||||
* @return 对象名称
|
||||
*/
|
||||
String value() default "";
|
||||
}
|
||||
26
src/main/java/com/imyeyu/inject/annotation/Component.java
Normal file
26
src/main/java/com/imyeyu/inject/annotation/Component.java
Normal file
@@ -0,0 +1,26 @@
|
||||
package com.imyeyu.inject.annotation;
|
||||
|
||||
import java.lang.annotation.Documented;
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
/**
|
||||
* 控制反转(组件),注解在类上后该类将被 TimiInject 实例化并控制反转,后续执行注入
|
||||
*
|
||||
* @author 夜雨
|
||||
* @version 2022-03-04 23:16
|
||||
*/
|
||||
@Target({ElementType.TYPE})
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Documented
|
||||
public @interface Component {
|
||||
|
||||
/**
|
||||
* 组件名称,非空时注入需要明确执行
|
||||
*
|
||||
* @return 组件名称
|
||||
*/
|
||||
String value() default "";
|
||||
}
|
||||
26
src/main/java/com/imyeyu/inject/annotation/Controller.java
Normal file
26
src/main/java/com/imyeyu/inject/annotation/Controller.java
Normal file
@@ -0,0 +1,26 @@
|
||||
package com.imyeyu.inject.annotation;
|
||||
|
||||
import java.lang.annotation.Documented;
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
/**
|
||||
* 控制反转(控制器),注解在类上后该类将被 TimiInject 实例化并控制反转,后续执行注入
|
||||
*
|
||||
* @author 夜雨
|
||||
* @version 2022-03-04 23:16
|
||||
*/
|
||||
@Target({ElementType.TYPE})
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Documented
|
||||
public @interface Controller {
|
||||
|
||||
/**
|
||||
* 控制器名称,非空时注入需要明确执行
|
||||
*
|
||||
* @return 控制器名称
|
||||
*/
|
||||
String value() default "";
|
||||
}
|
||||
22
src/main/java/com/imyeyu/inject/annotation/IOCAsync.java
Normal file
22
src/main/java/com/imyeyu/inject/annotation/IOCAsync.java
Normal file
@@ -0,0 +1,22 @@
|
||||
package com.imyeyu.inject.annotation;
|
||||
|
||||
import java.lang.annotation.Documented;
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
/**
|
||||
* <p>异步控制反转,控制反转的类或 {@link IOCReturn} 方法使用此注解将会在异步线程中实例化或调用。
|
||||
* 此注解不影响注入流程。
|
||||
* <p>此注解对实例化比较耗时的动作有明显的速度提升,有 {@link IOCPriority} 的效果,对实例化耗时较短的动作使用将会适得其反。
|
||||
* <p><u>注意:JavaFX 组件不可用,因为它只有一个 UI 线程</u>
|
||||
*
|
||||
* @author 夜雨
|
||||
* @version 2022-10-10 17:05
|
||||
*/
|
||||
@Target({ElementType.TYPE, ElementType.METHOD})
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Documented
|
||||
public @interface IOCAsync {
|
||||
}
|
||||
27
src/main/java/com/imyeyu/inject/annotation/IOCPriority.java
Normal file
27
src/main/java/com/imyeyu/inject/annotation/IOCPriority.java
Normal file
@@ -0,0 +1,27 @@
|
||||
package com.imyeyu.inject.annotation;
|
||||
|
||||
import java.lang.annotation.Documented;
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
/**
|
||||
* 控制反转类使用此注解时将会优先执行实例化,对不存在异步控制反转的类使用不会提升效率。
|
||||
* <p>使用此注解后,{@link InvokeForInjected} 的方法也会优先于其他类触发
|
||||
*
|
||||
* @author 夜雨
|
||||
* @version 2022-10-10 23:17
|
||||
*/
|
||||
@Target({ElementType.TYPE})
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Documented
|
||||
public @interface IOCPriority {
|
||||
|
||||
/**
|
||||
* 优先级,默认所有使用此注解的类都会往前挤,除非使用指定等级,数值小的优先执行
|
||||
*
|
||||
* @return 优先等级,默认 {@link Integer#MAX_VALUE} / 2,非此注解的类的优先级为 {@link Integer#MAX_VALUE}
|
||||
*/
|
||||
int value() default Integer.MAX_VALUE / 2;
|
||||
}
|
||||
30
src/main/java/com/imyeyu/inject/annotation/IOCReturn.java
Normal file
30
src/main/java/com/imyeyu/inject/annotation/IOCReturn.java
Normal file
@@ -0,0 +1,30 @@
|
||||
package com.imyeyu.inject.annotation;
|
||||
|
||||
import java.lang.annotation.Documented;
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
/**
|
||||
* 控制反转(方法返回对象),注解在方法上,该方法所在类也必须控制反转到 TimiInject 中,经过此注解的方法返回值也会控制反转到 TimiInject 中并后续执行注入
|
||||
*
|
||||
* <p><b><u>注意:注解参数为空时 {@link Inject} 注入对象的变量名需要和此方法名一致</u></b></p>
|
||||
*
|
||||
* @author 夜雨
|
||||
* @version 2022-03-04 23:16
|
||||
*/
|
||||
@Target({ElementType.METHOD})
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Documented
|
||||
public @interface IOCReturn {
|
||||
|
||||
/**
|
||||
* 对象名称,非空时注入需要明确指定
|
||||
*
|
||||
* <p><b><u>为空时注入对象的变量名需要和此方法名一致</u></b></p>
|
||||
*
|
||||
* @return 对象名称
|
||||
*/
|
||||
String value() default "";
|
||||
}
|
||||
30
src/main/java/com/imyeyu/inject/annotation/Inject.java
Normal file
30
src/main/java/com/imyeyu/inject/annotation/Inject.java
Normal file
@@ -0,0 +1,30 @@
|
||||
package com.imyeyu.inject.annotation;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
/**
|
||||
* 注入,使用在类变量上,该变量的类需要在 TimiInject 控制反转中才能执行对象注入
|
||||
*
|
||||
* <p>注意
|
||||
* <ul>
|
||||
* <li><u>如果该类使用 {@link StaticInject} 静态注入,此变量必须为静态变量</u></li>
|
||||
* <li><u>如果是 {@link IOCReturn} 控制反转的对象,并且控制反转时没有指定名称,此变量名称需要和控制反转方法名一致</u></li>
|
||||
* </ul>
|
||||
*
|
||||
* @author 夜雨
|
||||
* @version 2022-03-04 23:15
|
||||
*/
|
||||
@Target({ElementType.FIELD})
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
public @interface Inject {
|
||||
|
||||
/**
|
||||
* 注入名称,控制反转明确指定名称时此属性也需要明确指定
|
||||
*
|
||||
* @return 注入名称
|
||||
*/
|
||||
String value() default "";
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
package com.imyeyu.inject.annotation;
|
||||
|
||||
import java.lang.annotation.Documented;
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
/**
|
||||
* 此注解使用在方法上,TimiInject 完成注入后自动执行,对 {@link StaticInject} 和 {@link SuperInject} 有效,方法访问权限无限制。
|
||||
* <p>注意:{@link StaticInject} 注解类的方法使用此注解时,该方法也必须是静态方法
|
||||
*
|
||||
* <pre>
|
||||
* @Component
|
||||
* public class Demo {
|
||||
*
|
||||
* @InvokeForInjected
|
||||
* public void hello() {
|
||||
* System.out.println("hello");
|
||||
* }
|
||||
*
|
||||
* @InvokeForInjected
|
||||
* public void timiInject() {
|
||||
* System.out.println("timi-inject");
|
||||
* }
|
||||
* }
|
||||
* </pre>
|
||||
*
|
||||
* @author 夜雨
|
||||
* @version 2022-09-23 22:25
|
||||
*/
|
||||
@Target({ElementType.METHOD})
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Documented
|
||||
public @interface InvokeForInjected {
|
||||
|
||||
/**
|
||||
* 执行顺序,默认 0,数值小的先执行
|
||||
*
|
||||
* @return 执行顺序
|
||||
*/
|
||||
int value() default 0;
|
||||
}
|
||||
26
src/main/java/com/imyeyu/inject/annotation/Resources.java
Normal file
26
src/main/java/com/imyeyu/inject/annotation/Resources.java
Normal file
@@ -0,0 +1,26 @@
|
||||
package com.imyeyu.inject.annotation;
|
||||
|
||||
import java.lang.annotation.Documented;
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
/**
|
||||
* 控制反转(资源),注解在类上后该类将被 TimiInject 实例化并控制反转托管,后续执行注入
|
||||
*
|
||||
* @author 夜雨
|
||||
* @version 2022-03-04 23:16
|
||||
*/
|
||||
@Target({ElementType.TYPE})
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Documented
|
||||
public @interface Resources {
|
||||
|
||||
/**
|
||||
* 资源名称,非空时注入需要明确执行
|
||||
*
|
||||
* @return 资源名称
|
||||
*/
|
||||
String value() default "";
|
||||
}
|
||||
26
src/main/java/com/imyeyu/inject/annotation/Service.java
Normal file
26
src/main/java/com/imyeyu/inject/annotation/Service.java
Normal file
@@ -0,0 +1,26 @@
|
||||
package com.imyeyu.inject.annotation;
|
||||
|
||||
import java.lang.annotation.Documented;
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
/**
|
||||
* 控制反转(服务),注解在类上后该类将被 TimiInject 实例化并控制反转托管,后续执行注入
|
||||
*
|
||||
* @author 夜雨
|
||||
* @version 2022-03-04 23:16
|
||||
*/
|
||||
@Target({ElementType.TYPE})
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Documented
|
||||
public @interface Service {
|
||||
|
||||
/**
|
||||
* 服务名称,非空时注入需要明确执行
|
||||
*
|
||||
* @return 服务名称
|
||||
*/
|
||||
String value() default "";
|
||||
}
|
||||
27
src/main/java/com/imyeyu/inject/annotation/StaticInject.java
Normal file
27
src/main/java/com/imyeyu/inject/annotation/StaticInject.java
Normal file
@@ -0,0 +1,27 @@
|
||||
package com.imyeyu.inject.annotation;
|
||||
|
||||
import java.lang.annotation.Documented;
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
/**
|
||||
* 静态注入,此类的<u>静态属性</u>将会在控制反转完成后进行注入,<u>此注解的类不会控制反转实例到 TimiInject 中</u>
|
||||
* <ul>
|
||||
* <li>{@link InvokeForInjected} 对本注解有效,但必须是静态方法</li>
|
||||
* </ul>
|
||||
* <pre>
|
||||
* @InvokeForInjected
|
||||
* public static void injected() {
|
||||
* }
|
||||
* </pre>
|
||||
*
|
||||
* @author 夜雨
|
||||
* @version 2022-06-24 11:29
|
||||
*/
|
||||
@Target({ElementType.TYPE})
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Documented
|
||||
public @interface StaticInject {
|
||||
}
|
||||
19
src/main/java/com/imyeyu/inject/annotation/SuperIOC.java
Normal file
19
src/main/java/com/imyeyu/inject/annotation/SuperIOC.java
Normal file
@@ -0,0 +1,19 @@
|
||||
package com.imyeyu.inject.annotation;
|
||||
|
||||
import java.lang.annotation.Documented;
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
/**
|
||||
* 父级控制反转,通常用于父级存在控制反转子类时使用,父级可以继续使用此注解
|
||||
*
|
||||
* @author 夜雨
|
||||
* @version 2023-02-28 11:42
|
||||
*/
|
||||
@Target({ElementType.TYPE})
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Documented
|
||||
public @interface SuperIOC {
|
||||
}
|
||||
21
src/main/java/com/imyeyu/inject/annotation/SuperInject.java
Normal file
21
src/main/java/com/imyeyu/inject/annotation/SuperInject.java
Normal file
@@ -0,0 +1,21 @@
|
||||
package com.imyeyu.inject.annotation;
|
||||
|
||||
import java.lang.annotation.Documented;
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
/**
|
||||
* 父级注入,用在控制反转的类上,对控制反转的对象父级的变量也执行注入对象,父级也可以继续使用此注解
|
||||
*
|
||||
* <p>*对 {@link StaticInject} 无效
|
||||
*
|
||||
* @author 夜雨
|
||||
* @version 2022-03-04 23:16
|
||||
*/
|
||||
@Target({ElementType.TYPE})
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Documented
|
||||
public @interface SuperInject {
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package com.imyeyu.inject.annotation;
|
||||
|
||||
import com.imyeyu.inject.TimiInject;
|
||||
|
||||
import java.lang.annotation.Documented;
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
/**
|
||||
* TimiInject 注入程序,{@link TimiInject} 核心将基于此注解类的位置(或注解参数)进行包扫描和控制反转
|
||||
*
|
||||
* @author 夜雨
|
||||
* @version 2022-03-04 23:32
|
||||
*/
|
||||
@Target({ElementType.TYPE})
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Documented
|
||||
public @interface TimiInjectApplication {
|
||||
|
||||
/**
|
||||
* 扫描包位置(如:com.imyeyu.inject),此包下的所有类将检测控制反转和注入,留空则使用注解的类所在包作为扫描位置。
|
||||
* <p><u>TimiInject 的所有注解在此包扫描范围内有效</u></p>
|
||||
*
|
||||
* @return 扫描包位置
|
||||
*/
|
||||
String[] value() default {};
|
||||
}
|
||||
26
src/main/java/com/imyeyu/inject/annotation/Util.java
Normal file
26
src/main/java/com/imyeyu/inject/annotation/Util.java
Normal file
@@ -0,0 +1,26 @@
|
||||
package com.imyeyu.inject.annotation;
|
||||
|
||||
import java.lang.annotation.Documented;
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
/**
|
||||
* 控制反转(工具),注解在类上后该类将被 TimiInject 实例化并控制反转,后续执行注入
|
||||
*
|
||||
* @author 夜雨
|
||||
* @version 2023-05-18 00:36
|
||||
*/
|
||||
@Target({ElementType.TYPE})
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Documented
|
||||
public @interface Util {
|
||||
|
||||
/**
|
||||
* 工具名称,非空时注入需要明确执行
|
||||
*
|
||||
* @return 工具名称
|
||||
*/
|
||||
String value() default "";
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
/** 控制反转和注入注解 */
|
||||
package com.imyeyu.inject.annotation;
|
||||
Reference in New Issue
Block a user