gpt4 book ai didi

java - 支持在非 spring 实例化的类中 Autowiring (3)

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:58:30 25 4
gpt4 key购买 nike

我意识到这应该是非常基本的,但我还没有找到 Helloworld 之后的第二步示例

所以我有:

名为 spring-beans.xml 的 spring 配置 xml:

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">

<context:annotation-config />
<context:component-scan base-package="org" />

</beans>

一个 spring 上下文初始化类:

public static void main(String[] args) {
// initialize Spring
ApplicationContext context = new ClassPathXmlApplicationContext("META-INF/spring-beans.xml");

App app = (App) context.getBean("app");
app.run();
}

AppImpl类的相关细节:

@Component("app")
public final class AppImpl implements App{

// focus of question: This autowiring works
@Autowired
private DAO1 dao1;


public void run() {
//focus of question: This works as daoclass is instantiated properly
obj1s = dao1.myFind();

badJobs = runJobs(obj1s);
}

private List<Obj1> runJobs(final List<Obj1> obj1s) {
List<Obj1> jobsGoneBad = new ArrayList<Obj1>();
for (Obj1 next : obj1s) {

// focus of question: usage of new keyword, thus not spring container managed?
Job job = new JobImpl(next);
job.run();

}
return jobsGoneBad;
}
}

JobImpl的相关细节:

public class JobImpl implements Job {

private Obj1 obj1;

// focus of question: can't autowire
@Autowired
private DAO2 dao2;

@Override
public void run() {
//focus of question: opDAO == null - not initialized by @Autowired
Obj2 obj2 = dao2.myFind();
}

}

DAO1的相关细节:

@Repository("DAO1") //Focus of question: DAO1 is a repository stereotype
public class DAO1 {

myfind() { ...}
}

DAO2的相关细节:

@Repository("DAO2") //Focus of question: DAO2 is a repository stereotype
public class DAO2 {

myfind() { ...}
}

是的,所以我通过 springcontext 调用初始化应用程序,然后通过使用 @Autowired 成功实例化 DAO1 实例。

然后我创建了一个 Job 的非托管实例,并想通过使用 @Autowired 向该类中注入(inject)“单一”依赖项

两个 Dao 类都是 spring 构造型,扫描仪发现它们很好。

所以我的问题基本上是,我应该如何实例化作业实例以便我可以在其中使用@Autowired 概念?

如果我需要一个全局可访问的 applicationcontext,我该如何最好地引入它?

最佳答案

您只能在 Spring 管理的 bean 中使用注入(inject)等 Spring Bean 功能!

但是你可以使用@Configurable注解,但这需要你使用REAL AspectJ。如果类由 @Configurable 注释(并且您使用 AspectJ),那么即使此类是由普通的 new 创建的,您也可以使用 Springs Injection Annotations。

@看

关于java - 支持在非 spring 实例化的类中 Autowiring (3),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13085096/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com