关于java@resource的信息
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方法。