java注解@Resource机制怎么取到注入过的Bean
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java注解@Resource机制怎么取到注入过的Bean相关的知识,希望对你有一定的参考价值。
参考技术A java注解@Resource机制如何取到注入过的BeanSSH2项目整合案例
在ApplicationContext.xml中Spring注入Bean(以BaseDao为类),以下两种方法通过Java Application测试:
第一种:
ApplicationContext act = new ClassPathXmlApplicationContext("ApplicationContext.xml");
baseDao = act.getBean("baseDao");
System.out.println(baseDao);
测试结果:打印出来不为空,即已经成功取得对象。
第二种:
首先已经在ApplicationContext.xml添加了<context:annoation-config />
//定义属性
@Resource
BaseDao baseDao;
//测试方法
System.out.println(baseDao);
测试结果:打印出来为空。
但是我Tomcat启动后,通过浏览器访问,在Debug模式下,查看baseDao的确可以获取到,为什么Java Application测试却不能获取。
我一个小猜测:是不是@Resource注解依赖Tomcat服务器运行。
[解决办法]
@Resource
是运行时注入,要依赖WEB容器。
第一种配置文件其实是通过XML文件直接构造BEAN
[解决办法]
LS别误导人...
@Resource和@Autowired
是spring用来做注解式注入的标记
区别在于resource按照名称装配,autowired按照类型装配
resource标记是java5的一部分,autowired是spring自身的标记,autowired也可以配合Qualifier达到名称装配的目的本回答被提问者和网友采纳
spring 3.2 注解注入普通BEAN的@Resource 总是得到空指针,怎么解决?
用@Resource注入到ACTION中是可用使用的,但是我当前要把这个服务接口注入到定时器JOB工作累中,对数据库数据进行定时更新操心,但是这个注入的接口总是NULL
spring 配置文件
<!-- 注解搜索路径 -->
<context:component-scan base-package="com.wfms"/>
<!-- 支持注解依赖注入 -->
<context:annotation-config/>
<!-- 支持注解的事务,用于测试 -->
<tx:annotation-driven/>
<!-- 支持注解的aop功能 -->
<aop:aspectj-autoproxy/>
<!-- task任务扫描注解 -->
<task:annotation-driven/>
我不明白为什么在ACTION中可用注入而在普通的类中不能注入呢
你是不是没有搜索到普通类?为什么不用@Autowired 注解。
定时器用的spring quartz 么追问
@Autowired 也尝试过了,不过同样是空指针,即获得不到注入的接口对象。
定时器是用的quartz
定时器类用@Component进行声明了,理论上应该自动进入spring管理。
追答注入的接口是null,你是怎么判断的?如果是报nullpointerException的话有可能就不是spring的问题。因为如果spring找不到bean的话报的是NoSuchBeanDefinitionException。还是上点具体代码吧
追问debug模式是能看见运行时那个对象是空导致程序出现的异常的。
追答没代码帮不了你。给你几点建议。当容器启动时看看quartz是否开始工作(随便给个设定为每秒都执行的方法,看看能不能输出)。如果没工作就说明quartz没注入spring,检查所在包是否涵盖在base-package下。如果工作则检查你的注入接口(照理来说这个不应该为空,如果spring注入失败会给出具体的注入失败的原因的),然后看下你的执行方法中是否有可能出现导致空指针异常的代码。
以上是关于java注解@Resource机制怎么取到注入过的Bean的主要内容,如果未能解决你的问题,请参考以下文章
SpringIOC的bean自动注解(Resource,Autowired)
SpringIOC的bean自动注解(Resource,Autowired)
SpringIOC的bean自动注解(Resource,Autowired)