假设我有以下spring.xml(SomeBean由spring管理)
<bean id="some_bean" class="SomeBean" />
和类(这个不受管理)
public class MyClass {
@<some magic or something else?>
private SomeBean sb;
}
和我的主要
public class Main {
public static void main(String[] args) {
new MyClass().getSB();
}
}
如何通过创建新类(使用new关键字)来实现这一点MyClass实例可以访问id =“some_bean”的bean?
答案 0 :(得分:1)
如果您使用Spring AOP并使用@Configurable
对其进行注释,则可以将some_bean
直接注入预先存在的MyClass
:
@Configurable
public class MyClass {
@Autowired
private SomeBean sb;
}
上面的代码将按类型注入。如果您碰巧有多个SomeBean
s,则按名称注入:
@Configurable
public class MyClass {
@Autowired
@Qualifier("some_bean")
private SomeBean sb;
}
答案 1 :(得分:1)
如果您有权访问应用程序上下文,那么您可以将其设置为:
public class MyClass {
@Autowire
private SomeBean sb;
}
public class Main {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
MyClass myClass = new MyClass();
ctx.getAutowireCapableBeanFactory().autowireBeanProperties(myClass, AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE, true);
}
答案 2 :(得分:0)
如果您不喜欢AOP / AspectJ,另一种选择是创建一个MyClassFactory
bean,负责创建MyClass
的新实例,并将SomeBean
引用注入它们(通过构造函数注入或方法注入),例如
@Service
public class MyClassFactory {
@Autowired
private SomeBean sb;
public MyClass createMyClassWithSomeBean() {
MyClass myClass = new MyClass();
myClass.setSomeBean(sb);
return myClass;
}
}
public class Main {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("spring.xml");
MyClassFactory factory = ctx.getBean(MyClassFactory.class);
MyClass myClass = factory.createMyClassWithSomeBean();
}
}