论坛首页 Java企业应用论坛

spring根据注解自动去装载的一个问题

浏览 6423 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-12-07  
首先有如下这样一个controller:
public class MainFunction
{
  @RequestMapping("/dofunction-{functionCode}.htm")
  public String doFunction(@PathVariable("functionCode") String strFunctionCode,ModelMap model)
  {
    ProxyFunction function = new ProxyFunction( SpringContext.getBean(strFunctionCode) );
    function.doFunctionWorks();
    return "result";
  }
}


提交到后台的/dofunction-A0001.htm,/dofunction-A0002.htm这样的请求,都会由doFunction这个函数来处理。在doFunction这个函数里,代理类ProxyFunction 会根据A0001,A0001...等这样的functionCode,来确定初始化哪个类。并调用这个类的doFunctionWorks来完成计算工作。
在spring配置文件中,就这样的配置:
  <bean id="A001" class="test.test1.FunctionA"></bean>
  <bean id="A002" class="test.test1.FunctionB"></bean>
  <bean id="A003" class="test.test1.FunctionC"></bean>


同时,FunctionA,FunctionB,FunctionC……每个类的都有这样的注解:
@AnnotationOfFunc(funcCode="A001")
public class test.test1.FunctionA
{
  ……
}




我现在的问题是:
实际上存在A001,A002,A003……。总量大概好几百上千个,这样的话spring配置文件中要配置太多。有没有一种解决方案,使得在F
 @RequestMapping("/dofunction-{functionCode}.htm")
  public String doFunction(@PathVariable("functionCode") String strFunctionCode,ModelMap model)
  {
     ProxyFunction function = new ProxyFunction( SpringContext.getBean(strFunctionCode) );


中,不需要去写ProxyFunction function = new ProxyFunction( SpringContext.getBean(strFunctionCode) );这句话,spring自动根据("/dofunction-{functionCode}.htm")中的functionCode,找到FunctionA,或者FunctionB(根据注解去匹配)然后装配进来,这样后面就可以直接用了。
我看了spring的自动装载功能,好像还没有根据注解去装载的。
哪位精通spring的,能否提示一个可行的解决方案?
   发表时间:2012-12-07  
@AnnotationOfFunc(funcCode="A001")
public class test.test1.FunctionA
{
  ……
}

这段代码里面的@AnnotationOfFunc(funcCode="A001")意义是什么?
0 请登录后投票
   发表时间:2012-12-07  
char1st 写道
@AnnotationOfFunc(funcCode="A001")
public class test.test1.FunctionA
{
  ……
}

这段代码里面的@AnnotationOfFunc(funcCode="A001")意义是什么?

就是做个标记,表示这个类的功能编号是A001。每个功能都有唯一的编号。
0 请登录后投票
   发表时间:2012-12-07  
可以考虑扩展spring的数据绑定完成。如@Func("functionCode")   拿到functionCode数据,到spring容器拿组件创建ProxyFunction


可以参考我之前写的:
http://jinnianshilongnian.iteye.com/blog/1717180
http://jinnianshilongnian.iteye.com/blog/1719952
0 请登录后投票
   发表时间:2012-12-08  
Sping 直接用注解生成bean,就不用配置了
0 请登录后投票
   发表时间:2012-12-10  
1. component-scan
2. test.test1.FunctionX 构建bean时,自动注册到一个map中
3. 然后根据map.get("AXXX"),去拿的bean
0 请登录后投票
   发表时间:2012-12-10  
iamiwell 写道
1. component-scan
2. test.test1.FunctionX 构建bean时,自动注册到一个map中
3. 然后根据map.get("AXXX"),去拿的bean

多谢,提供了一个不错的思路!!
0 请登录后投票
   发表时间:2012-12-10  
gehy1 写道
Sping 直接用注解生成bean,就不用配置了

不好意思,没理解。能详细点吗?
0 请登录后投票
   发表时间:2012-12-10  
我认为你的结构本身就有问题。你应该是想想为什么会出现这种情况,应该如何处理。而不是削足适履。
0 请登录后投票
   发表时间:2013-02-18  
魔力猫咪 写道
我认为你的结构本身就有问题。你应该是想想为什么会出现这种情况,应该如何处理。而不是削足适履。

我面临的情况是这样的:系统有1000多个功能,每个功能都是遵循一定规则独立开发出来的jar包,每个包里面有对应的功能编号。对应网站上也有1000多个链接(http://ip/001.htm,http://ip/002.htm,……),这些链接会统一提交到一个公共的controller里面来,在公共的controller里面,就需要根据001,002自动调用那些独立开发出来的各种jar包。对于这个结构您有更好的建议,渴请赐教。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics