1 package com.atlassian.pageobjects.inject;
2
3 import com.atlassian.annotations.ExperimentalApi;
4
5 import javax.annotation.Nonnull;
6
7 /**
8 * Simple interface for framework components capable of injection of components as described by JSR-330.
9 *
10 * @since 2.1
11 */
12 @ExperimentalApi
13 public interface InjectionContext
14 {
15
16 /**
17 * Get an instance of given <tt>type</tt> from context.
18 *
19 * @param type type of the requested instance
20 * @param <T> type param
21 * @return an instance of requested type. An exception may be raised if the context is unable to instantiate
22 * given <tt>type</tt>.
23 * @throws IllegalArgumentException if instantiating given class according to JSR-330 rules was impossible
24 */
25 @Nonnull
26 <T> T getInstance(@Nonnull Class<T> type);
27
28 /**
29 * Execute injection of static fields on given <tt>targetClass</tt>.
30 *
31 * @param targetClass class to inject into
32 */
33 public void injectStatic(@Nonnull Class<?> targetClass);
34
35
36 /**
37 * Execute injection of fields on given <tt>targetInstance</tt>
38 *
39 * @param targetInstance instance to inject into
40 * @deprecated in 2.3 for removal in 3.0. Use {@link #inject(Object)} instead
41 */
42 @Deprecated
43 public void injectMembers(@Nonnull Object targetInstance);
44
45 /**
46 * Execute injection of fields on {@code targetInstance}
47 *
48 * @param target instance to inject into
49 */
50 @Nonnull
51 public <T> T inject(@Nonnull T target);
52 }