关于java@resource的信息

http://www.itjxue.com  2023-02-10 01:06  来源:未知  点击次数: 

java注解@Resource机制怎么取到注入过的Bean

java注解@Resource机制如何取到注入过的Bean

SSH2项目整合案例

在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达到名称装配的目的

java 中 @Resource 的实现机制

首先如果想用注解或者是配置 来进行java bean 的注入,这些bean所对应的java类都要被Spring容器管理,所有的bean都存在于同一个生态体系里面才可以相互的引用注入。

其实不管是注解还是配置,本质的逻辑是一样的。都是寻找当前容器中对应的bean,找不到的话 注入进来的就是null。

基于你的问题,我们就说说Spring是怎么利用注解方式来注入bean的,首先在spring的文件里面会有一个scanner去扫描你所配置的package所有的类,利用反射来获取当前类是否已经加了注解(例如@Resource,当然如果没有加注解,这个类也可以通过配置的方式被管理),如果加了,那么容器就会对这个类进行标记以及生成一个对象存放起来(这个地方牵扯到ThreadLocal的知识),此时这个类就被管理了,当其他被管理的类需要引入这个类的时候,spring会找到被引入的类,类似于深clone一个 给当前线程。

@resource有什么用

@resource注解就是把一个bean注入到当前的类中,可以不必通过配置文件或者导包的方式注入就可以使用该bean,默认是ByName的方式注入,如:

@resource(name=“personDaoBean”)

private personDaoBean personDaobean;

这样就可以直接使用personDaoBean这个Bean,以及其setter和getter方法。

(责任编辑:IT教学网)

更多

推荐Fireworks教程文章