我可以在没有任何xml配置文件的情况下使用Spring注入Java对象吗?
我想以编程方式使用Spring注入一个普通java对象,而不使用任何xml配置。想要注入带有标签的字段/方法,如我可以在没有任何xml配置文件的情况下使用Spring注入Java对象吗?,java,spring,Java,Spring,我想以编程方式使用Spring注入一个普通java对象,而不使用任何xml配置。想要注入带有标签的字段/方法,如@EJB,@PostConstruct等。这可能吗?谢谢 是的,您可以使用@Component、@Service、@Controller、或@Respository(取决于其职责)对任何POJO进行注释,它将成为SpringBean。您只需将这一行放入applicationContext.xml: <context:component-scan base-package="org
@EJB
,@PostConstruct
等。这可能吗?谢谢 是的,您可以使用@Component
、@Service
、@Controller
、或@Respository
(取决于其职责)对任何POJO进行注释,它将成为SpringBean。您只需将这一行放入applicationContext.xml
:
<context:component-scan base-package="org.yourbasepackage" />
您还可以使用@PostConstruct
和@PreDestroy
代替xmlinit方法
和销毁方法
更新:有一个名为SpringJavaConfig的项目。它的一部分已经成为核心弹簧的一部分,你可以看到。简而言之,它允许您使用java类而不是xml来配置bean。可以找到关于基于注释的Spring配置的文档。您将需要最少的XML,以便Spring知道如何查找基于注释的配置:
<context:component-scan base-package=".." />
完成后,您可以使用@Autowired
注释来设置bean。创建不带XML的应用程序上下文(使用注释ConfigApplicationContext)
使用,您根本不需要任何XML。您可以通过编程方式创建应用程序上下文,并且
a) 人工
b) 或
如果您使用一个方便的构造函数
或
上下文是自动创建和刷新的,否则您需要在添加类或包后手动调用该方法
自动连接现有的非SpringBean(使用AutowireCapableBeanFactory)
对于自动连接现有bean,我认为首选的习惯用法是使用
appContext.getAutowireCapableBeanFactory().autowireBean(existingBean)
或者,如果您想要更多的控制,请使用
appContext.getAutowireCapableBeanFactory()
.autowireBeanProperties(
existingBean,
autowireMode,
// e.g. AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE
dependencyCheck
)
有关进一步参考,请参阅
仅在定义它的同一应用程序上下文中查找bean上的注释。组件扫描在上面的示例中,将扫描com.acme包
,查找任何@component
-注释类,这些类将在容器中注册为SpringBean定义。Spring javaconfig文档-上下文:注释配置
不起作用。它检测现有bean上的注释。这就是我想要的。顺便说一句,如果我创建了这个对象(不是由Spring创建的),我可以使用Spring将依赖项注入这个对象吗?我认为这个太简单了,似乎ctx.autowireBean(bean)和更多的方法可以做到这一点。@seanizer:谢谢你的回答!否决票?我肯定不是在使用基于java的配置,一个bean读取外部文件以按类名创建对象。对象可以相互自动关联。在创建其他bean的过程中如何注册它们?@VadimKirilchuk提出了一个新问题!
appContext.getAutowireCapableBeanFactory().autowireBean(existingBean)
appContext.getAutowireCapableBeanFactory()
.autowireBeanProperties(
existingBean,
autowireMode,
// e.g. AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE
dependencyCheck
)