我有一个注释(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();
}
......或者这些都不正确吗?
答案 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,你想要注入它。
我用那种方式。