我可以在没有任何xml配置文件的情况下使用Spring注入Java对象吗?

时间:2010-09-12 06:22:13

标签: java spring

我想以编程方式使用Spring注入一个普通的java对象,而不使用任何xml配置。想要注入带有标签的字段/方法,例如@EJB@PostConstruct等。这可能吗?谢谢!

3 个答案:

答案 0 :(得分:24)

创建不带XML的ApplicationContext(使用AnnotationConfigApplicationContext)

使用AnnotationConfigApplicationContext,您根本不需要任何XML。您以编程方式创建应用程序上下文

a)手动register annotated classes

appContext.register( MyTypeA.class,
                     MyTypeB.class,
                     MyTypeC.class );

b)或scan the classpath for annotated classes

appContext.scan(
    "com.mycompany.myproject.mypackagea",
    "com.mycompany.myproject.mypackageb"
)

如果您使用其中一个便利构造函数

AnnotationConfigApplicationContext(Class<?> ... annotatedClasses)

AnnotationConfigApplicationContext(String ... basePackages)

自动创建和刷新上下文,否则您需要在添加类或包后手动调用refresh()方法。

自动装配现有的非Spring bean(使用AutowireCapableBeanFactory)

对于现有bean的自动装配,我认为首选的习惯是使用

appContext.getAutowireCapableBeanFactory().autowireBean(existingBean)

或者,如果您想要更多控制,请使用

appContext.getAutowireCapableBeanFactory()
      .autowireBeanProperties(
          existingBean,
          autowireMode,
          // e.g. AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE 
          dependencyCheck
      ) 

有关进一步参考,请参阅

答案 1 :(得分:2)

是的,您可以使用@Component@Service@Controller@Respository(取决于其职责)注释任何POJO,它将成为一个春天的bean。您只需将此行放入applicationContext.xml

<context:component-scan base-package="org.yourbasepackage" />

您还可以使用@PostConstruct@PreDestroy代替xml init-methoddestroy-method

更新:有一个名为spring-javaconfig的项目。它的一部分已经成为核心弹簧的一部分,你可以看到more details here。简而言之,它允许您使用java类而不是xml来配置bean。

答案 2 :(得分:1)

可以找到有关基于注释的Spring配置的文档here。您将需要最少量的XML,以便Spring知道寻找基于注释的配置:

<context:component-scan base-package=".." />

完成后,您可以使用@Autowired注释来设置bean。