spring如何将spring中的dao、service等注⼊到普通的Java类
在spring管理的项⽬⾥,譬如springboot、springmvc等的项⽬,配置好后,springboot⾥就可以直接使⽤定义好的service、dao。但是如果要在普通的⼯具类⾥,使⽤service、dao,就会报空指针,因为这个普通的java类并不在spring管理下,不能使⽤spring注⼊的service、dao。
那么该怎么办呢,下⾯就来分享⼏种⽅法:⼿动获取spring的ApplicationContext和bean对象,让普通⼯具类也能使⽤spring中的service、dao等
⼀、WEB项⽬
⽅法1、ApplicationContext ac1 = RequiredWebApplicationContext(ServletContext sc)
⽅法2、ApplicationContext ac2 = WebApplicationContext(ServletContext sc)
⽅法3、写⼀个⼯具类类继承ApplicationObjectSupport,并将这个加⼊到spring的容器
⽅法4、写⼀个⼯具类类继承WebApplicationObjectSupport,并将这个加⼊到spring的容器
⽅法5、写⼀个⼯具类实现ApplicationContextAware接⼝,并将这个加⼊到spring的容器(我项⽬中就是使⽤这种⽅法,接下来会给出该⽅法的实例)
⼆、⾮WEB项⽬
ApplicationContext ac = new FileSystemXmlApplicationContext("l")
可选的操作⽅法:
⽅法1:
String[] path = {"WebRoot/l","WebRoot/WEB-INF/l"};
ApplicationContext context = new FileSystemXmlApplicationContext(path);
⽅法2:
String path="WebRoot/WEB-INF/applicationContext*.xml";
ApplicationContext context = new FileSystemXmlApplicationContext(path);
⽅法3:
ApplicationContext ctx = new FileSystemXmlApplicationContext("classpath:地址");
没有classpath的话就是从当前的⼯作⽬录
⽅法5的⽰例:
import java.util.Map;
import org.springframework.beans.BeansException;
import t.ApplicationContext;
import t.ApplicationContextAware;
/**
* 获取ApplicationContext和Object的⼯具类
* @author zxl
*
*/
@SuppressWarnings({ "rawtypes", "unchecked"})
@service //交给spring来管理(必须加)
public class SpringContextUtils implements ApplicationContextAware {
private static ApplicationContext applicationContext;
public void setApplicationContext(ApplicationContext arg0)
throws BeansException {
applicationContext = arg0;
}
/**
* 获取applicationContext对象
* @return
*/
public static ApplicationContext getApplicationContext(){
return applicationContext;
}
/**
* 根据bean的id来查对象
* @param id
* @return
*/
public static Object getBeanById(String id){
Bean(id);
}适合新手的spring boot
/**
* 根据bean的class来查对象
* @param c
* @return
*/
public static Object getBeanByClass(Class c){
Bean(c);
}
/
**
* 根据bean的class来查所有的对象(包括⼦类)
* @param c
* @return
*/
public static Map getBeansByClass(Class c){
BeansOfType(c);
}
}
public class Test{
private TestBeanDao testBeanDao = (BeanByClass(TestBeanDao.class); }
参考:wwwblogs/yangzhilong/p/3949332.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论