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

2022-09-03 18:21:55

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


答案 1

创建不带 XML 的应用程序上下文(使用 AnnotationConfigApplicationContext)

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

a) 手动注册带注释的类

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

b) 或扫描类路径以查找带注释的类

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

如果您使用便利构造函数之一

注释配置应用程序上下文(类<?> ...带注释的类)

注释配置应用程序上下文(字符串 ...基本包)

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

自动布线现有的非弹簧豆(使用AutowireCapableBeanFactory)

对于自动布线的现有Bean,我认为首选的成语是使用

appContext.getAutowireCapableBeanFactory().autowireBean(existingBean)

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

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

有关进一步的参考,请参阅


答案 2

是的,您可以使用 、 、 或 (根据其职责) 对任何 POJO 进行注释,然后它将成为一个春豆。你只需要把这行放到:@Component@Service@Controller@RespositoryapplicationContext.xml

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

您还可以使用 和 代替 xml 和 。@PostConstruct@PreDestroyinit-methoddestroy-method

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


推荐