1
dddddddddd 2020-01-20 11:50:48 +08:00
为什么要手动 new, 可以直接从容器了取呀
|
2
Newyorkcity OP @dddddddddd 没给那个类加 @Component 之类的注解。。。。。
|
3
nutting 2020-01-20 11:55:35 +08:00
不能,用 spring 最好就都让它管理
|
4
Newyorkcity OP |
5
dddddddddd 2020-01-20 12:01:56 +08:00
如何没有注册这个 bean,Autowired 是不管用的, 可以查一下 spring 如何动态注册 bean,应该是可以的
|
6
Newyorkcity OP @Newyorkcity new 出来 --》 反射反出来
|
7
richard1122 2020-01-20 13:22:13 +08:00 1
```java
private @Autowired AutowireCapableBeanFactory beanFactory; public void doStuff() { MyBean obj = new MyBean(); beanFactory.autowireBean(obj); // obj will now have its dependencies autowired. } ``` https://stackoverflow.com/questions/3813588/how-to-inject-dependencies-into-a-self-instantiated-object-in-spring 把对象传进去帮你做 autowire |
8
urzz 2020-01-20 15:22:53 +08:00
ApplicationContextAware
|
9
jaylee4869 2020-01-20 16:02:44 +08:00 1
给你工具类:
```java package com.utils; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; /** * 以静态变量保存 Spring ApplicationContext, 可在任何代码任何地方任何时候中取出 ApplicaitonContext. * */ public class SpringContextHolder implements ApplicationContextAware { private static ApplicationContext applicationContext; /** * 实现 ApplicationContextAware 接口的 context 注入函数, 将其存入静态变量. */ @Override public void setApplicationContext(ApplicationContext applicationContext) { // NOSONAR SpringContextHolder.applicationContext = applicationContext; } /** * 取得存储在静态变量中的 ApplicationContext. */ public static ApplicationContext getApplicationContext() { checkApplicationContext(); return applicationContext; } /** * 从静态变量 ApplicationContext 中取得 Bean, 自动转型为所赋值对象的类型. */ public static <T> T getBean(String name) { checkApplicationContext(); return (T) applicationContext.getBean(name); } /** * 从静态变量 ApplicationContext 中取得 Bean, 自动转型为所赋值对象的类型. */ public static <T> T getBean(Class<T> clazz) { checkApplicationContext(); return (T) applicationContext.getBean(clazz); } /** * 清除 applicationContext 静态变量. */ public static void cleanApplicationContext() { applicationContext = null; } private static void checkApplicationContext() { if (applicationContext == null) { throw new IllegalStateException( "applicaitonContext 未注入,请在 applicationContext.xml 中定义 SpringContextHolder"); } } } ``` |