spring新手问题,关于反射

零点钟 发布于 2016/10/31 16:54
阅读 551
收藏 0

环境: org.springframework.boot + mybatis 

在 @Scheduled(cron="0/20 * *  * * ? ")的方法下, 起了4个线程 Runnable 

@Override
public void run() {
    try {
        System.out.println("开始加入队列");
        queueHandle.produce(this.taskQueueEntity);
        Class<?> c = Class.forName(taskQueueEntity.getServiceClass());
        Object task = c.newInstance();
        System.out.println(task.toString());
        System.out.println("加入成功");
    } catch (InterruptedException e) {
        e.printStackTrace();
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
}

我自己用java的class.forName @Autowired是null.

无法使用 mybatis查询数据了...有大神知道怎么解吗?

加载中
0
szwx855
szwx855
1,把如下文件在xml中定义个bean.
package app.contextAware;

import javax.servlet.ServletContext;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.ServletContextAware;

public class ApplicationContextAware implements org.springframework.context.ApplicationContextAware {

	private static ApplicationContext applicationContext;
	
	@Override
	public void setApplicationContext(ApplicationContext arg0)
			throws BeansException {
		
		this.applicationContext = arg0;
		
	}
	
	public static <T> T getBean(String beanName){
        return (T) applicationContext.getBean(beanName);
    }

}


2,在使用Dao的地方。

ApplicationContextAware.getBean("xxxxDao")//可以通过

applicationContext.getBeanDefinitionNames()来获取你的dao是什么注入名字,然后粘进去,就可以在多线程中索取dao进行操作了。


0
螃蟹大叔
螃蟹大叔
貌似要用spring工具类获取
螃蟹大叔
螃蟹大叔
回复 @零点钟 : http://www.dexcoder.com/selfly/article/326 网上搜,有好多种方式获取的,如果这些方法都不能获取到,证明你的类都没有被spring创建bean
零点钟
零点钟
工具类? 哪个?
0
牛牛-豆豆
牛牛-豆豆

http://www.dexcoder.com/selfly/article/326


零点钟
零点钟
好的..谢谢
0
大木老师故事的小黄花
大木老师故事的小黄花
如果你想获取到springd的ApplicationContext 实现这个接口 org.springframework.context.ApplicationContextAware 得到 ApplicationContext  getBean() 看能不能拿到你的bean
零点钟
零点钟
好的..谢谢~~
0
Allen_Ho
Allen_Ho
这里你要理解spring框架和原理,spring所产生的bean,并不是我们平时new的对象。那些spring所创建的对象,你可以看做是实际对象的代理对象,它继承了你的class,并包裹着那实际对象,只有这样,spring的AOP才能玩起来,所以自己手动去的对象,并不在spring容器的管辖范围内,所以是找不到你的bean的。你要创建一个spring可控的bean,不能单纯new或者反射创建就完事,必须使用spring的bean注册方式,让spring帮你创建那个对象。你现在上面的创建方式,是不能通过spring去获取到的。
Allen_Ho
Allen_Ho
回复 @零点钟 : 简单了解一下spring原理,可以让你更正确地使用spring
零点钟
零点钟
我重新看了 spring的框架, 大概了解了spring的bean容器 http://stackoverflow.com/questions/21827548/spring-get-current-applicationcontext
0
尚浩宇
尚浩宇
你可以直接注入,为啥要反射一下new个出来?即使new出来了,也是不能用的
尚浩宇
尚浩宇
回复 @零点钟 : 你可以试试,在调度类里直接注入service,然后使用
零点钟
零点钟
可能是因为我对功能的实现过程想的比较繁琐了...对spring不太了解
0
CC_make
CC_make
你在main里怎么获取数据库数据的 这里就要怎么写
0
零点钟
零点钟
感谢各位大神..小弟受教了..谢谢~
返回顶部
顶部