如何在Spring中创建与动态生成自动关联的通用字段?

时间:2019-04-10 10:33:43

标签: java spring spring-boot

我用泛型定义了一些接口,并且在Spring上下文中注入了一些作为Beans的类,我可以动态创建一个管理器bean来管理它们,并且可以在没有该管理器任何Bean def代码的情况下自动连接到字段中吗? / p>

我尝试了FactoryBean方式来实现它,但是没有用,它无法传输通用的类信息,并且FactoryBean bean无法传输任何可更改的参数。

我尝试了BeanFactory的方式来实现它,当我获得getBeansOfType时,这些没有自动装配的对象无法正常工作...

现在我有了一个finally方法,我认为使用ImportBeanDefinitionRegistrar和ClassPathBeanDefinitionScanner扫描所有类,然后插入管理器的beanDefinition并不是很聪明。

如果您提供任何方法,我将不胜感激,非常感谢!

我想要这样实现:

public interface Strategy<E extends BaseEnum>
{
    public E getType();
}

public interface LoginStrategy extends Strategy<LoginType>
{
    public LoginStrategy getType();
}

@Strategy
public class ALoginStrategy implements LoginStrategy 
{
    public getType()
    {
         return LoginType.OTP;
    }
}

@Strategy
public class BLoginStrategy implements LoginStrategy 
{
    @Autowired
    private UserMapper;

    public getType()
    {
         return LoginType.PASSWORD;
    }
}

public LoginServiceImpl implements LoginService
{
    @Autowired
    private StrategyManage<LoginType, LoginStrategy> strategyManager;
}

我希望可以自动生成LoginServiceImpl中标为“自动装配”的strategyManager。

我还有另一个问题。解释我想要的内容可能会更容易。

我有一个实现ModelConvertor接口的模型转换器,TL是lowerModel的类,TU是upperModel的类。

现在有一个像这样的bean包含代码:


@Autowired
private ModelConvertor<UserPO, UserDO> userConvertor;

通常,Spring框架会抛出带有“ no such bean”消息的异常,因此我想使该字段可以自动注入一个像这样的值:

@Autowired
private ModelConvertor<UserPO, UserDO> userConvertor[ = new DefaultModelConvertor(UserPO.class, UserDO.class)]; 

我该如何解决这些问题,非常感谢!

1 个答案:

答案 0 :(得分:0)

我已经解决了这个问题,扫描特定的程序包并动态生成放置在上下文中的bean。