001/***************************************************************************** 002 * Copyright (C) PicoContainer Organization. All rights reserved. * 003 * ------------------------------------------------------------------------- * 004 * The software in this package is published under the terms of the BSD * 005 * style license a copy of which has been included with this distribution in * 006 * the LICENSE.txt file. * 007 * * 008 * Original code by * 009 *****************************************************************************/ 010package org.picocontainer.injectors; 011 012import org.junit.Test; 013import org.picocontainer.DefaultPicoContainer; 014import org.picocontainer.MutablePicoContainer; 015import org.picocontainer.Parameter; 016import org.picocontainer.annotations.Inject; 017import org.picocontainer.monitors.NullComponentMonitor; 018 019import java.lang.annotation.ElementType; 020import java.lang.annotation.Retention; 021import java.lang.annotation.RetentionPolicy; 022import java.lang.annotation.Target; 023 024import static org.junit.Assert.assertNotNull; 025 026public class AnnotatedMethodInjectorTestCase { 027 028 public static class AnnotatedBurp { 029 030 private Wind wind; 031 032 @Inject 033 public void windyWind(Wind wind) { 034 this.wind = wind; 035 } 036 } 037 038 public static class SetterBurp { 039 040 private Wind wind; 041 042 public void setWind(Wind wind) { 043 this.wind = wind; 044 } 045 } 046 047 public static class Wind { 048 } 049 050 @Test public void testSetterMethodInjectionToContrastWithThatBelow() { 051 052 MutablePicoContainer pico = new DefaultPicoContainer(); 053 pico.addAdapter(new SetterInjector(SetterBurp.class, SetterBurp.class, Parameter.DEFAULT, new NullComponentMonitor(), 054 "set", "", false, false)); 055 pico.addComponent(Wind.class, new Wind()); 056 SetterBurp burp = pico.getComponent(SetterBurp.class); 057 assertNotNull(burp); 058 assertNotNull(burp.wind); 059 } 060 061 @Test public void testNonSetterMethodInjection() { 062 MutablePicoContainer pico = new DefaultPicoContainer(); 063 pico.addAdapter(new AnnotatedMethodInjector(AnnotatedBurp.class, AnnotatedBurp.class, Parameter.DEFAULT, 064 new NullComponentMonitor(), 065 Inject.class, false)); 066 pico.addComponent(Wind.class, new Wind()); 067 AnnotatedBurp burp = pico.getComponent(AnnotatedBurp.class); 068 assertNotNull(burp); 069 assertNotNull(burp.wind); 070 } 071 072 @Retention(RetentionPolicy.RUNTIME) 073 @Target(value={ ElementType.METHOD, ElementType.FIELD}) 074 public @interface AlternativeInject { 075 } 076 077 public static class AnotherAnnotatedBurp { 078 private Wind wind; 079 @AlternativeInject 080 public void windyWind(Wind wind) { 081 this.wind = wind; 082 } 083 } 084 085 086 @Test public void testNonSetterMethodInjectionWithAlternativeAnnotation() { 087 MutablePicoContainer pico = new DefaultPicoContainer(); 088 pico.addAdapter(new AnnotatedMethodInjector(AnotherAnnotatedBurp.class, AnotherAnnotatedBurp.class, Parameter.DEFAULT, 089 new NullComponentMonitor(), 090 AlternativeInject.class, false)); 091 pico.addComponent(Wind.class, new Wind()); 092 AnotherAnnotatedBurp burp = pico.getComponent(AnotherAnnotatedBurp.class); 093 assertNotNull(burp); 094 assertNotNull(burp.wind); 095 } 096 097 098}