我想以编程方式使用Spring注入一个普通的java对象,而不使用任何xml配置。想要注入带有标签的字段/方法,例如@EJB
,@PostConstruct
等。这可能吗?谢谢!
答案 0 :(得分:24)
使用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()方法。
对于现有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-method
和destroy-method
。
更新:有一个名为spring-javaconfig的项目。它的一部分已经成为核心弹簧的一部分,你可以看到more details here。简而言之,它允许您使用java类而不是xml来配置bean。
答案 2 :(得分:1)
可以找到有关基于注释的Spring配置的文档here。您将需要最少量的XML,以便Spring知道寻找基于注释的配置:
<context:component-scan base-package=".." />
完成后,您可以使用@Autowired
注释来设置bean。