将注释为@Component的类更改为@Bean注释方法

时间:2016-10-11 11:47:46

标签: java spring spring-bean

我有一个注释(function (H) { H.wrap(H.Chart.prototype, 'drillUp', function (p) { p.call(this); while (this.drilldownLevels.length) { p.call(this); } }); })(Highcharts); 的课程,然后@Component注入另一个课程。但是,我需要删除此@Autowired注释,而是在之前已自动装配的类中使用@Component带注释的方法创建它。

之前的课程如下:

@Bean

所以现在我删除了@Component public class MyClass implements IMyClass { // Stuff } @Configuration public class MyUsingClass { @Autowired private IMyClass myClass; private void methodUsingMyClass() { myClass.doStuff(); } } 注释并编写了一个@Component带注释的方法,如下所示:

@Bean

我的问题是将public class MyClass implements IMyClass { // Stuff } @Configuration public class MyUsingClass { @Bean public IMyClass getMyClass() { return new MyClass(); } .... } 的前一次调用替换为使用新bean。我现在是否将myClass.doStuff()类型的参数传递给私有方法:

MyClass

...或者我是否直接调用此方法(对我来说似乎不正确):

private void methodUsingMyClass(final MyClass myClass)
{
    myClass.doStuff();
}

......或者这些都不正确吗?

2 个答案:

答案 0 :(得分:1)

我认为你误解了@Bean注释。它可以用来创建一个Bean。所以基本上spring会扫描所有类,会找到你的@Bean并创建一个Bean,而不是更多。您现在可以使用此bean,就像使用<bean></bean>创建的bean一样。要实际使用你需要的bean,要么从ApplicationContext@Autowire获取它。当然,您仍然可以像代码中的任何其他函数一样使用该函数来创建该对象的新实例,但这与您希望使用bean实现的内容相矛盾

答案 1 :(得分:0)

使用解决方案

的注释
public class MyClass implements IMyClass{

    private OtherClassInjection otherClassInjection;

    private OtherClassInjection2 otherClassInjection2;

    MyClass(OtherClassInjection otherClassInjection, OtherClassInjection2 otherClassInjection2){
        this.otherClassInjection=otherClassInjection;
        this.otherClassInjection2=otherClassInjection2;
    }

    public void useObject(){
        otherClassInjection.user();
    }

}

@Bean(name = "myClass")
@Autowired
@Scope("prototype") //Define scope as needed
public MyClass getMyClass(@Qualifier("otherClassInjection") OtherClassInjection otherClassInjection, 
                          OtherClassInjection2 otherClassInjection2) throws Exception
{
    return new MyClass(otherClassInjection, otherClassInjection2);
}

那是合乎逻辑的,当创建一个Bean时,如果上下文知道那个bean,那么它就是注入@Autowired,你想要注入它。

我用那种方式。