如何通过弹簧注入以下场景。
Class A{
public void doSomeThing(){
B builder=new B();
//call other function.
}
}
在这里,我不想将B作为类级对象。
Class A{
B b;// dont want to bring b here
}
我也不想使用Spring context.getBean(“B)或autowire;
所以Spring必须以这样的方式注入B:
Class A{
public void doSomeThing(){
B builder=<injected by Spring>
//call other function.
}
}
所以B在doSomeThing()方法的范围内被创建和销毁。
答案 0 :(得分:2)
您可以使用ApplictionContext
来执行此操作
Class A{
@Autowire
private ApplicationContext appContext;
public void doSomeThing(){
B builder=appContext.getBean(B.class);
}
}
如果您希望每次调用B
时都有appContext.getBean(B.class)
的不同实例,那么您需要将B
的bean定义为prototype scoped
bean。
答案 1 :(得分:0)
所以你可能想要这样的东西:
class A {
B b;
public void doSomething() {
b.something();
}
public B getB() {
return b;
}
public void setB(B b) {
this.b = b;
}
}
class B {
public void something() {
System.out.println("something");
}
}
然后您的XML配置将是:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="a" class="A">
<property name="b" ref="b"/>
</bean>
<bean id="b" class="B"/>
</beans>
答案 2 :(得分:0)
你可以在spring中通过lookup-method来做到这一点。创建一个抽象方法createB(); 并且你使该类也是抽象的但不要担心spring会创建一个抽象类的具体代理对象。
@style/TextAppearance.AppCompat.Widget.ActionBar.Title