首先说明下 我用的是springMVC mybatis
很多时候我们 在操作数据库的时候 LoginController 直接使用@Autowired 直接可以注入。
那么 在其他类中 需要通过以下方法才可以获得对象 。如果直接使用 @Autowired直接空 指针。
我对以下的理解是这样,大神勿喷。LoginController通过注解可以获得对象,但是如果在其他类中,那么就是在容器外,需要加载上下文 告诉容器你要操作的class然后获得操作的容器BeanID 才可以 对这个类进行使用。不知是否理解的对,给纠正一下,并告诉小弟 是否有其他方法在容器外 可以不通过注解 获得?
ApplicationContext atx=new ClassPathXmlApplicationContext("classpath:com/hoomsun/mybatis/config/applicationContext.xml");
CostMapperDao dao=atx.getBean(CostMapperDao.class);
https://tieba.baidu.com/p/3167100238
最原始的配置xml;或者二写一个通用自定义注解,里面去实现寻找bean的方法,添加自定义的注解即可,具体方法可以百度自定义注解;可以获取spring上下文,不过得在xml中配置或者继承或实现某个类(忘记具体细节了)。我能想到的就这几个了,只能给你提供思路和方法。其实你看结合spring原理看源代码很快就能搞明白的。
其它类怎么会就是容器外了呢,你在web.xml里边配置加载spring的applicationContext.xml文件,让web容器启动加载,当前项目里边src目录下的所有类都会编译到WEB-INF下的classes文件夹下,都会被容器所管理,只要在spring中配置了想要的bean,所有类中都可以使用注解注入,如果用@autweired不行,试一下@resource
在controller中可以使用@autweired/@resource 注入,是因为controller被springmvc扫描到了,
在其他类无法使用这对注解是因为其他类没有声明是spring 的组件,这里可以用@component实现组件声明,
不过有一些情况也只能使用getBean实例化了,比如:有容器管理的监听器、过滤器等。