Spring-搞定bean加载

本文介绍了在Spring框架中读取Bean配置文件的多种方法,包括使用BeanFactory和ApplicationContext的不同方式,以及如何在脱离Spring容器的情况下读取Bean。还提供了解决特定场景下获取Bean实例的策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

spring的IOC灰常的强大。。特别是管理Web项目中的自动加载。

但是实际应用中,可能会碰到这样两类的问题:

1.写UnitTest的时候,需要脱离容器,手动读取xml文件加载bean。

2.在一个Web容器中,可能某个脱离了spring管理(也就是一个非bean)的类,需要感知并读取某个spring容易的bean。

 

下面转了2篇文章,分别是对应上面2个问题的解决方案。

 

 

壹壹壹壹壹壹壹壹壹壹壹壹壹壹壹壹壹壹壹壹壹壹壹壹壹壹壹壹壹壹壹壹壹壹壹壹壹壹壹壹壹壹

 

http://hi.baidu.com/%C9%CF%B5%DB%D2%B2%B7%B8%C0%A7/blog/item/f934474a104c3e2008f7ef66.html

Spring中读取bean配置文件的几种方式   star_half.gif  优快云 Blog推出文章指数概念,文章指数是对Blog文章综合评分后推算出的,综合评分项分别是该文章的点击量,回复次数,被网摘收录数量,文章长度和文章类型;满分100,每月更新一次.

BeanFactory允许InputStream作为构造函数的参数,也可以org.springframework.core.io.Resource接口。下面这个例子是用ClassPathResource作为参数:

Resource resource = new ClassPathResource("bean.xml");
BeanFactory factory = new XmlBeanFactory(resource);
ActionBean action = (ActionBean) factory.getBean("actionBean");

如果同一个Bean在配置文件有多个bean的定义,则用下面的方法取得所有的对象:
Resource resource = new ClassPathResource("bean.xml");
ListableBeanFactory factory = new XmlBeanFactory(resource);
       
Map helloBeans = factory.getBeansOfType(ActionBean.class, false, false);

    一个应用程序中往往有很多的Bean要放在配置文件,如果所有的Bean都放在一个文件中,维护起来就相当的麻烦,这时我们可以按照模块把每个模块用到Bean放到不同的配置文件,Spring提供了相应的方法:
BeanDefinitionRegistry reg = new DefaultListableBeanFactory();
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(reg);
   
// 載入bean定義檔   
reader.loadBeanDefinitions(new ClassPathResource("bean1.xml"));
reader.loadBeanDefinitions(new ClassPathResource("bean2.xml"));
....

// 取得Bean
BeanFactory bf = (BeanFactory) reg;
Object o = bf.getBean("actionBean");

===================================================================

在读spring in aciton 时,他用的BeanFactory factory = new XmlBeanFactory(new FileInputStream("hello.xml"));
可是现在的用的1.2.6版本的构造器(XmlBeanFactory)只能接收Resource接口了,所以调不出来是正常的事情,假设现在有一个文件hello.xml
读取方法

1:ApplicationContext cx=new FileSystemXmlApplicationContext("hello.xml");//指定的路径去找文件
2:ApplicationContext factory = new ClassPathXmlApplicationContext("hello.xml");//还会在classpath去找
3:Resource fa = new FileSystemResource("hello.xml");
BeanFactory factory=new XmlBeanFactory(fa);
4:这个要设制classpath了,麻烦
  Resource res = new ClassPathResource("com/springinaction/chapter01/hello/hello.xml");
  BeanFactory factory=new XmlBeanFactory(res);
好了,用了上面那种方法都可以调用getBean("your bean name")了,
eg: BeanFactory factory=new XmlBeanFactory(fa);
      hello he=(hello)factory.getBean("hello");
              he.getHello();

================================================================================

 

 

 

 

贰贰贰贰贰贰贰贰贰贰贰贰贰贰贰贰贰贰贰贰贰贰贰贰贰贰贰贰贰贰贰贰贰贰贰贰贰贰贰贰贰贰贰

http://babycountry.spaces.live.com/blog/cns!18767b1e2eb6d0e1!236.entry

spring 读取注册bean的一些方法(转)
       我现在在做的东西,主要用到了框架是struts2+hibernate+spring开发一个上传,下载,播放视频,听歌的东西,在做到获得到注册bean的时候,我想通过在web.xml配置context-param中获得,但老也不成功,后来在网站上看到别人写的,共同分享:
          通过几个项目的实践总结一下几种获得spring里注册Bean的方法:
一:方法一(多在struts框架中)继承BaseDispatchAction
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
 com.mas.wawacommunity.wap.web.action;
 
 org.apache.struts.action.ActionForm;
 org.apache.struts.action.ActionForward;
 org.apache.struts.action.ActionMapping;
 org.apache.struts.action.ActionServlet;
 org.apache.struts.actions.DispatchAction;
 org.springframework.web.context.WebApplicationContext;
 org.springframework.web.context.support.WebApplicationContextUtils;
 
 com.mas.wawacommunity.wap.service.UserManager;
 
  BaseDispatchAction  DispatchAction 
    
     WebApplicationContext ctx;
 
     UserManager userMgr;
 
    
      Object (String beanName) 
         (beanName);
    
 
     ActionForward (ActionMapping mapping, ActionForm form,
              javax.servlet.http.HttpServletRequest request,
              javax.servlet.http.HttpServletResponse response)      
         ();
    
 
      (ActionServlet servlet) 
        this.servlet = servlet;
        this.ctx = (());
        this.userMgr = (UserManager) ();
             


action调用:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
 com.mas.wawacommunity.wap.web.action;
 
 javax.servlet.http.HttpServletRequest;
 javax.servlet.http.HttpServletResponse;
 
 org.apache.struts.action.ActionForm;
 org.apache.struts.action.ActionForward;
 org.apache.struts.action.ActionMapping;
 org.apache.struts.action.ActionServlet;
 
 com.mas.wawacommunity.wap.model.News;
 com.mas.wawacommunity.wap.service.NewsManager;
 
  NewsAction  BaseDispatchAction 
  NewsManager newsManager;       
    
      (ActionServlet servlet) 
        (servlet);
        newsManager = (NewsManager) ();         
  
    
    
     ActionForward (ActionMapping mapping, ActionForm form,
        HttpServletRequest request, HttpServletResponse resp) 
         category = (request, , );
         pageNo = (request, , );
         pageSize = (request, , );
        PageRoll pageRoll = (category, pageNo, pageSize);               
        (, pageRoll);
         ();
    



二:方法二实现BeanFactoryAware
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
 com.anymusic.oa.commons.service;
 
 org.springframework.beans.BeansException;
 org.springframework.beans.factory.BeanFactory;
 org.springframework.beans.factory.BeanFactoryAware;
 

  ServiceLocator  BeanFactoryAware 
      BeanFactory beanFactory = ;
 
      ServiceLocator servlocator = ;
 
      (BeanFactory factory)  BeansException 
        this.beanFactory = factory;
    
 
     BeanFactory () 
         beanFactory;
    
 
    
      ServiceLocator () 
         (servlocator == )
              servlocator = (ServiceLocator) ();
         servlocator;
    
 
    
      Object (String servName) 
         (servName);
    
 
    
      Object (String servName, Class clazz) 
         (servName, clazz);
    



action调用:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
 com.anymusic.oa.webwork;
 
 java.util.List;
 java.util.Map;
 
 javax.servlet.http.HttpServletRequest;
 
 com.anymusic.oa.commons.service.ServiceLocator;
 com.anymusic.oa.hibernate.pojo.Role;
 com.anymusic.oa.hibernate.pojo.Users;
 com.anymusic.oa.spring.IUserService;
 com.opensymphony.webwork.ServletActionContext;
 com.opensymphony.xwork.Action;
 com.opensymphony.xwork.ActionContext;
 com.opensymphony.xwork.ModelDriven;
 
  UserAction  BaseAction  Action,ModelDriven
    
     Users user =  ();
     ServiceLocator service = ();
    UserService userService = (UserService)();
 
     String ()  Exception          
         SUCCESS;
    
 
   Object () 
         user;
         
    
     String ()
        HttpServletRequest request = ();         
        List ls=( Users.class );
        (,ls);     
        ();
         SUCCESS;
    



三:方法三实现ApplicationContextAware

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
 com.easou.framework.common.util;
 
 org.springframework.beans.BeansException;
 org.springframework.beans.factory.NoSuchBeanDefinitionException;
 org.springframework.context.ApplicationContext;
 org.springframework.context.ApplicationContextAware;
 
  SpringContextUtil  ApplicationContextAware 
    ApplicationContext applicationContext;     
 
  
    (ApplicationContext applicationContext)  BeansException 
    SpringContextUtil.applicationContext = applicationContext;
  
 
  
    ApplicationContext () 
     applicationContext;
  
 
  
    Object (String name)  BeansException 
     (name);
  
 
  
    Object (String name, Class requiredType)  BeansException 
     (name, requiredType);
  
 
  
     (String name) 
     (name);
  
 
  
     (String name)  NoSuchBeanDefinitionException 
     (name);
  
 
  
    Class (String name)  NoSuchBeanDefinitionException 
     (name);
  
 
  
    String[] (String name)  NoSuchBeanDefinitionException 
     (name);
  




action调用:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
 com.anymusic.oa.webwork;
 
 java.util.List;
 java.util.Map;
 
 javax.servlet.http.HttpServletRequest;
 
 com.anymusic.oa.commons.service.ServiceLocator;
 com.anymusic.oa.hibernate.pojo.Role;
 com.anymusic.oa.hibernate.pojo.Users;
 com.anymusic.oa.spring.IUserService;
 com.opensymphony.webwork.ServletActionContext;
 com.opensymphony.xwork.Action;
 com.opensymphony.xwork.ActionContext;
 com.opensymphony.xwork.ModelDriven;
 
  UserAction  BaseAction  Action,ModelDriven
    
     Users user =  ();     
    UserService userService = (UserService) ();
    
     String ()  Exception          
         SUCCESS;
    
 
   Object () 
         user;
         
    
     String ()
        HttpServletRequest request = ();         
        List ls=( Users.class );
        (,ls);     
        ();
         SUCCESS;
    

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值