2013-02-27 2 views
3

Как впрыскивать через весну для сценария ниже.Весенняя инъекция в методах без объектов уровня уровня

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;

Так весна впрыснуть B таким образом, что:

Class A{ 

public void doSomeThing(){ 
B builder=<injected by Spring> 
//call other function. 
} 

} 

Так B получить создано и уничтожаются в рамках DoSomething метода().

+0

Я думаю, вам нужно будет использовать: context.getBean («B») – cowls

+0

Это condriditics это условие: – Vishnu

+0

Постарайтесь быть более конкретную информацию о Вашей потребности. Если вы хотите получить что-то из Spring, вам нужно либо позволить ему вводить значение в член класса, либо получить точку входа в BeanFactory, будь то статическую или введенную в себя ... – Vincent

ответ

2

Вы можете использовать ApplictionContext сделать это

Class A{ 
    @Autowire 
    private ApplicationContext appContext; 

    public void doSomeThing(){ 
     B builder=appContext.getBean(B.class); 
    } 
} 

Если хочет иметь различные экземпляры B каждый раз, когда вы называете appContext.getBean(B.class), то вам необходимо определить боб B в prototype scoped боба.

+0

Поскольку это будет частью Веб приложение. Я не хочу напрямую использовать любые объекты контекста. – Vishnu

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> 
+0

Я не пробовал это в идеале. И вам все равно понадобится класс, чтобы отбросить все это с помощью основного метода. – Jimadilo

+0

Он прямо сказал, что не хотел этого делать. Хотя, по общему признанию, мы не знаем, почему – cowls

+0

я пытался использовать MethodInvokingFactory, но для этого требуется абстрактный метод. Я не могу изменить А как абстрактный. – Vishnu

0

Вы можете сделать это с помощью поиска-метода в весенний период. Создайте абстрактный метод createB(); , и вы сделали этот класс абстрактным, но не волнуйтесь, весна создаст конкретный прокси-объект вашего абстрактного класса.

<bean id="objB" class="com.package.Prototype" scope="prototype" /> 

<bean id="yourobject" class="com.package.YourClass"> 
    <lookup-method name="createB" bean="objB" /> 
</bean> 
+0

Я уже указал, что вы предложили в комментарии ниже, где in не может сделать абзац класса A. – Vishnu

+0

Хорошо, тогда вы можете пойти на ** замененный метод ** в этом вам не придется вносить какие-либо изменения в A.class this _ [link] (http://www.jroller.com/habuma/entry/ spring_method_replacement) _ может помочь вам – digvijayb

Смежные вопросы