当前位置:编程学习 > JAVA >>

怎么通过spring注解方式动态的生成我的bean

我现在想用spring注解方式注入一个类
@autowired
//@Resource
//@Qualifier 
//@自定义注解
MyService myService;

现在我想根据配置文件,假设配置default动态的(比如自定义注解,Qualifier注解的参数等方式)根据工厂生成我需要的bean,
貌似@bean或者FactoryBean的bean工厂方法都不能获取到这些参数然后动态的生成不同属性值的bean啊,有什么办法解决这个问题吗
谢谢各位~ Spring 注解 --------------------编程问答-------------------- 类用bean,属性用property,值在property节点加value属性。这样不行么 --------------------编程问答-------------------- Spring 好像很多公司都在用 --------------------编程问答-------------------- 实在没看懂你的问题。。。。

根据这句
引用
获取到这些参数然后动态的生成不同属性值的bean啊

你试试这Resource吧

@Resource(name="beanAnn")
--------------------编程问答--------------------
引用 3 楼 zzvnzz 的回复:
实在没看懂你的问题。。。。

根据这句
引用
获取到这些参数然后动态的生成不同属性值的bean啊

你试试这Resource吧

@Resource(name="beanAnn")

我仔细在说下我的需求吧
我需要利用spring对一个实例对象进行注解,比如对于
private MyService myService;

正常情况下使用spring注解注入可以使用

@autowired
private MyService myService;

但是我是希望这个注入是多个

private MyService myService1;
private MyService myService2;

只不过这个多个MyService可能是属性值不一样,当然可以的做法是使用xml配置多个MyService的bean,然后配置不同属性值,或者MyService是接口,由不同的实现注入,但是也是需要写不同的实现类,
我是希望能够根据注入时候的注解,这种注解可以是

@Resource
@Qualifier 
@自定义注解

等各种方式,假设@MyAnnotation(config="default"),能够使用一个spring工厂根据注解的配置生成不同的属性值的对象,但是我上面也提到了,@bean或者FactoryBean的bean工厂方法都不能获取到这些参数然后动态的生成不同属性值的bean啊。

也就是我希望能够根据一些参数或者其他方式来动态的注入我所需要的同一个类不同属性值的对象,即类似于

@Qualifier("defualt")
private MyService myService1;
@Qualifier("alternative")
private MyService myService2;

我能够通过代码控制注入的对象的属性值~诸如@bean或者FactoryBean
他们使用的时候是

FactoryBean impl..
public Object getObject() throws Exception {
  // 这边并不能获取我的注解参数args然后动态的生成我需要的MyService
  // 即不能return new MyService(args);
  return new MyService();
}
--------------------编程问答-------------------- 你这种想法是行不通的,
假设你可以通过在注入时指定注入的bean的构造参数,那么spring context中势必存在多个同一类型的未指定名称的注入bean,那么spring该怎么存储他们呢?要知道每一个bean都必须对应一个唯一的名称的,而你并未指定
其次,在注入时,注入bean是已经实例化好的,不会临时看到要注入才会去生成这个bean --------------------编程问答-------------------- 还达不到那么智能啊 --------------------编程问答--------------------
引用 5 楼 zzvnzz 的回复:
你这种想法是行不通的,
假设你可以通过在注入时指定注入的bean的构造参数,那么spring context中势必存在多个同一类型的未指定名称的注入bean,那么spring该怎么存储他们呢?要知道每一个bean都必须对应一个唯一的名称的,而你并未指定
其次,在注入时,注入bean是已经实例化好的,不会临时看到要注入才会去生成这个bean

我觉得应该是可以的,因为FactoryBean工厂既然可以动态的构造要注入的bean,即可以在运行时获取我需要的bean,尤其是非单例模式下,每次都工厂调用肯定完全可以根本不同的参数生成不同的bean。

public Object getObject() throws Exception {
  return new MyService(Math.random());
}

只不过我是在注解注入的时候需要获取注解的参数来动态的实例化出我的bean。
至于你说的id,在xml中是指定的id,在注解的方式中完全可以是用类名作为默认id,具体我没仔细研究过,否则注解注入过程中怎么能根据类型动态的注入?当然实际上也完全可以不需要id,只需要类型匹配就行了,比如加载类的class信息,然后去根据此找匹配的注入,我想spring底层应该就类似实现的。
在一个接口多重实现类的情况下本身spring就提供了如@Qualifier来确定注入具体的实现类,只不过这个是spring自己去实现了,而他这个实现类实例是已经定义好的几个具体实现类实例,我只是希望能够动态生成不同的实现类实例,其实算是同一个实现类,只不过该实现类初始化值不一样 --------------------编程问答--------------------
补充:Java ,  Java EE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,